• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Variabele opvragen in userform

Status
Niet open voor verdere reacties.

Joost.van.Steeg

Gebruiker
Lid geworden
9 okt 2006
Berichten
138
Het lukt me niet om een variabele die ik heb gedecladeerd in module 1 op te roepen in een userform. Ik heb mijn situatie hieronder simplistisch weergegeven.

in sheet(1)
Code:
Private Sub cmdVoorbeeld_click()
    Dim Naam1 as string
    Dim Naam2 as string
    Dim [COLOR="DarkRed"]Naam3[/COLOR] as string

    Naam1 = bepaaldevariabele
    Naam2 = date()
    Naam3 = Naam1 & Naam2

    frmVoorbeeld.show
End Sub

In frmVoorbeeld:

Code:
Private Sub cmdVoorbeeld2_click()
     Worksheets([COLOR="DarkRed"]Naam3[/COLOR]).range("a1").value =  "maaktnietuitwat"
End Sub

De waarde van Naam3 is bij het oproepen in de uservorm verloren gegaan. Kan iemand misschien bovenstaand code herschrijven, of advies geven met betrekking tot het formuleren van de code, zodat de waarde van de variabele wederom gebruikt kan worden?
 
Moet je die variabele niet als Public declareren? Anders hebben ze alleen een lokale 'scope', dus kun je dan niet gebruiken ergens anders (ze zijn daar dan dus 'leeg').

Citaat uit de Visual Basic help:
Voor het declareren van variabelen gebruikt u gewoonlijk de instructie Dim. U kunt een declaratie-instructie binnen een procedure plaatsen om een variabele van procedureniveau aan te maken. U kunt de instructie ook boven aan een module in de sectie Declaraties plaatsen, waardoor u een variabele van moduleniveau maakt.

In het volgende voorbeeld wordt de variabele strName aangemaakt en wordt het gegevenstype String opgegeven.

Dim strName As String

Als deze instructie binnen een procedure verschijnt, kan de variabele strName alleen in die procedure worden gebruikt. Als de instructie in de sectie Declaraties van de module verschijnt, is de variabele strName voor alle procedures binnen de module beschikbaar, maar niet voor de procedures in andere modules in het project. Als u vóór deze variabele de instructie Public opneemt, maakt u deze beschikbaar voor alle procedures in het project. Bijvoorbeeld

Public strName As String

Zie de sectie "Naamregels in Visual Basic" in Visual Basic Help voor meer informatie over de naamgeving van variabelen.

Tijs.
 
Juist, dat heb ik meer gelezen, maar

Code:
Public Sub cmdVoorbeeld_click()
    Dim Naam1 as string
    Dim Naam2 as string
    Dim Naam3 as string

    Naam1 = bepaaldevariabele
    Naam2 = date()
    Naam3 = Naam1 & Naam2

    frmVoorbeeld.show
End Sub

veranderd niets aan het probleem.
 
Wat dacht je van:

Sub cmdVoorbeeld_click()
Public Naam1 as string
Public Naam2 as string
Public Naam3 as string

Naam1 = bepaaldevariabele
Naam2 = date()
Naam3 = Naam1 & Naam2

frmVoorbeeld.show
End Sub

zoals uit mijn citaat???

Tijs.
 
Ok, in dat geval krijg ik de melding dat ik geen public mag declareren buiten de modules om. Ik heb de code namelijk staan in een sheet. Want in Sheet(1) staat namelijk de button cmdVoorbeeld. Dus dan zal ik op 1 of andere manier moeten verwijzen naar een functie in een module waar ik de variabele declareer als public ?
 
Code:
Public Sub cmdVoorbeeld_click()
    Public Naam1 as string
    Public Naam2 as string
    Public Naam3 as string

    Naam1 = bepaaldevariabele
    Naam2 = date()
    Naam3 = Naam1 & Naam2

    frmVoorbeeld.show
End Sub

Mag/werkt bovenstaande wel? Je declareert én de variabelen, én de functie als public.

Tijs.
 
Declareer de variabelen BUITEN de functie.

Dus:

Code:
    Public Naam1 as string
    Public Naam2 as string
    Public Naam3 as string

Private Sub cmdVoorbeeld_click()

    Naam1 = bepaaldevariabele
    Naam2 = date()
    Naam3 = Naam1 & Naam2

    frmVoorbeeld.show
End Sub
 
Ok, dat werkt inderdaad.

Public Naam2 as string bevat nu inderdaad de waarde, maar bij het oproepen in de userform is de waarde weer "empty".

Moet ik Public Naam2 as string misschien in een module zetten?
 
Gebruik bij je aanroep de naam van het formulier/blad erbij, waar je de variabele gemaakt hebt. Je had het over Sheet(1), dus 1 van

Code:
Private Sub cmdVoorbeeld2_click()
     Worksheets(Sheet(1).Naam3).range("a1").value =  "maaktnietuitwat"
End Sub

of

Code:
Private Sub cmdVoorbeeld2_click()
     Worksheets(Sheet1.Naam3).range("a1").value =  "maaktnietuitwat"
End Sub

zou toch moeten werken, lijkt me.

Tijs.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan