Ga naar inhoud

Excel-VBA


anoniem

Aanbevolen berichten

L.S. Ik heb op een formulier een groot aantal textvakken geplaatst. De naam van deze tekstvakken zou ik graag aan een variabele overdragen zodat ik daar een terugkerende routine op los kan laten. Dit lukt echter niet, omdat er aanhalingstekens om de naam worden geplaatst: tekstvak=txt4.name geeft voor tekstvak: "txt4". Iemand een idee hoe ik dit oplos? Het zou mij weer een stukje gelukkiger maken. gegroet, mrt
Link naar reactie
  • 2 weken later...
  • 2 weken later...
Beste Mart, Het probleem dat zich bij u voordoet is dat u een string doorzendt naar een subroutine waarvan de parameter niet specifiek is gedefinieerd en aldus als een [i:cdf5f0d4d1]Variant[/i:cdf5f0d4d1] wordt beschouwd. Dit kan overigens nooit werken... Ik raad u aan om steeds de parameters van Sub's en Function's volledig te specificeren om fouten te vermijden. U kunt dit alles heel duidelijk terugvinden in de 'Help' van VBA onder Excel. Om de oplossing duidelijker te kunnen voorstellen heb ik een testsimulatie gemaakt. Misschien kun jij even hetzelfde proberen te doen. In Excel open je een nieuw werkblad en daarop plaats je een textbox die te vinden is de menubalk "Werkset besturingselementen". Ik mag er van uit gaan dat dit wel degelijk zo 'n textbox is die jou parten speelt, niet? Typ (of kopieer) nu de volgende code: [code:1:cdf5f0d4d1] Option Explicit Public Sub test() Dim obj As OLEObject Set obj = ActiveSheet.OLEObjects(1) With obj .Object.Text = "Hey" Debug.Print "Name = " & .Name Debug.Print "Width = " & .Width Debug.Print "Height = " & .Height Debug.Print "Index = " & .Index Debug.Print "Text = " & .Object.Text Debug.Print "Control= " & (.OLEType = xlOLEControl) End With Probeer obj End Sub Private Sub Probeer(ByRef obj As OLEObject) If obj.Object.DisplayStyle = fmDisplayStyleText Then Debug.Print "Dit is een textbox" Debug.Print "Multiline = " & obj.Object.MultiLine End If End Sub [/code:1:cdf5f0d4d1] U kunt ook de volgende parametrering gebruiken voor de subroutine 'Probeer' maar dan kunt u het object niet meer wijzigen binnen deze procedure omdat u met een kopie werkt van het object en niet met een referentie (adres) naar het oorspronkelijke object: [code:1:cdf5f0d4d1] Private Sub Probeer(ByVal obj As OLEObject) [/code:1:cdf5f0d4d1] Er zijn heel wat meer [i:cdf5f0d4d1]attributes[/i:cdf5f0d4d1] en [i:cdf5f0d4d1]methods[/i:cdf5f0d4d1] dan u op het eerste zicht zou denken of die VBA in zijn contextmenu's voorstelt. Om die allemaal te kennen selecteert u [b:cdf5f0d4d1]obj[/b:cdf5f0d4d1] en voegt die toe aan het [i:cdf5f0d4d1]Venster Controle[/i:cdf5f0d4d1]. Plaats vervolgens een onderbrekingspunt op 'End Sub' van de subroutine 'test' en debug het programma. Het programma stopt op het onderbrekingspunt en [b:cdf5f0d4d1]obj[/b:cdf5f0d4d1] in het [i:cdf5f0d4d1]Venster Controle[/i:cdf5f0d4d1] wordt ingevuld. Alles wat mogelijk is met [b:cdf5f0d4d1]obj[/b:cdf5f0d4d1] kunt u daar terugvinden... Ik denk wel dat het niet mogelijk zal zijn om [i:cdf5f0d4d1].SetFocus[/i:cdf5f0d4d1], [i:cdf5f0d4d1].SelStart[/i:cdf5f0d4d1] of [i:cdf5f0d4d1].SelLength[/i:cdf5f0d4d1] te gebruiken met een OLEObject. Een oplossing hiervoor kan bijvoorbeeld zijn dat u de inhoud van de textbox in een string variabele plaatst, deze vervolgens bewerkt, en het resultaat terugplaatst in de textbox. Hopelijk kunt u hiermee verder. Moesten er nog vragen zijn, laat mij dan maar iets weten langs deze weg. Veel succes ermee. Groetjes E. CLE
Link naar reactie
  • 1 maand later...
Beste E, Bedankt voor alle moeite; tijdens de kerstdagen heb ik me in jou vorbeeld verdiept. De complexiteit is echter van een niveau dat ik nog niet heb bereikt - maar ik kreeg het werkende. Mijn probleem is echter niet opgelost en ik ben er vrij zeker van dat het ook niet oplosbaar is - je gaf dit ook al enigszins aan. Nu heb ik een vreselijke hekel om dezelfde code meerdere malen te schrijven, maar hier zal ik me dan maar bij neerleggen. En uiteindelijk gaat het gelukkig om een beperkt aantal herhalingen. Nogmaals hartelijk dank, mrt
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...