Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Excel-VBA

Mart Kieftenburg
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

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