Vraag & Antwoord

Programmeren

Excel-VBA

4 antwoorden
  • 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
  • Met de weinige detailgegevens die u in uw vraag formuleert heb ik het probleem eens proberen te simuleren, maar bij mij lijkt alles normaal te verlopen, of met andere woorden: geen aanhalingstekens... Kunt u anders iets meer specifiek zijn zodat het probleem kan gesimuleerd?
  • Een tekstbox is een control en een control kun je als parameter doorgeven.
  • 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

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.