anoniem Geplaatst: 10 november 2003 Delen Geplaatst: 10 november 2003 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 Quote Link naar reactie
anoniem Geplaatst: 14 november 2003 Auteur Delen Geplaatst: 14 november 2003 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? Quote Link naar reactie
anoniem Geplaatst: 25 november 2003 Auteur Delen Geplaatst: 25 november 2003 Een tekstbox is een control en een control kun je als parameter doorgeven. Quote Link naar reactie
anoniem Geplaatst: 8 december 2003 Auteur Delen Geplaatst: 8 december 2003 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 Quote Link naar reactie
anoniem Geplaatst: 9 januari 2004 Auteur Delen Geplaatst: 9 januari 2004 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 Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen