Variabele Public maken vanuit userform

Status
Niet open voor verdere reacties.

NickBu

Gebruiker
Lid geworden
14 mrt 2012
Berichten
9
Hallo allemaal,

ik heb me net aangemeld op het forum aangezien ik hier al vaak terecht ben gekomen met Google.

Ik ben voor mijn werk bezig met een projectje in VBA om onze bestelformulieren wat te "automatiseren"
Met een aantal eenvoudige stappen wordt mijn excel file nu mooi aangemaakt. Er is echter 1 zaak waar ik maar niet uitraak.

Ik heb dus een userform aangemaakt. Deze wordt opgeroepen door een knop op mijn Excel blad en de code die in mijn Microsoft Excel Objecten Blad 1 staat is volgende:

Code:
[I]Private Sub CommandButton1_Click()
    UserForm1.Show
End Sub[/I]
Eenvoudig dus


Heel mijn programmatie bevindt zich ook in deze userform en de structuur ziet er als volgt uit.
Code:
[I]----------------------------
Sub UserForm_Initialize()
 'alle initialisatie items...
End Sub
--------------------------
Code:
Private Sub Copy_Click()
   'programma om alles te kopiëren naar mijn excel file...
End Sub
-------------------------
Code:
Private Sub xClearart_Click()
 'programma om mijn artikels te wissen...
End Sub


Nu declareer ik in elke Private sub enkele variabelen als volgt:

Dim strTekst as string

Hierdoor is het enkel mogelijk om deze variabele te gebruiken binnen de private sub waarin ze gedeclareerd is.

Nu heb ik 1 variabele nodig die ik in meerdere Private subs van mijn userform wens te gebruiken en dat lukt me niet om te declareren.

Ik heb hem al als public gedeclareerd, op alle mogelijke plaatsen: In een private sub, bovenaan alle code van de userform, in een gewone module waar verder helemaal niets instaat enz enz....

Op internet wordt hier en daar gezegd dat Public declaraties niet werken met userforms, en dat je hem in een andere module moet programmeren enzo maar ik snap echt niet waar.

Hopelijk kunnen jullie me op weg helpen en is het probleem goed beschreven.


Als iemand tevens een goede link weet naar uitleg wat het verschil is tussen modules, userforms enzo... wat meer rechten heeft en minder, hoe je tussen al deze items kan communiceren en hoe je variabelen allemaal kan declareren is dit ook welkom.

Mvg
 
Laatst bewerkt door een moderator:
Maak gewoon een variabele in je class:

Code:
Class UserForm
   
   Dim strTekst as string
    
   Sub UserForm_Initialize()
     'alle initialisatie items...
   End Sub

   Private Sub Copy_Click()
     'programma om alles te kopiëren naar mijn excel file...
   End Sub

   Private Sub xClearart_Click()
     'programma om mijn artikels te wissen...
   End Sub
End Class

nu is 'strTekst' zichtbaar in heel je class:
en als je er Public voor zet ipv. Dim dan wordt hij zichtbaar voor andere classen die een instantie van de 'UserForm' class hebben.

Van een module kan je geen nieuwe instanties maken het is ongeveer hetzelfde als een Gedeelde/Statische | Shared/Static class
Je kan deze dus aanroepen met [Module naam].[De Publieke Members van de module]
Zoals dit: MijnModule.DoeIets("parameter1", 999) <- is een voorbeeld

En bij een UserForm gaje meestal dit moeten doen:
Dim instantieForm As New UserForm()
instantieForm.DoeIets("parameter1", 999)

En kan je dus niet zomaar de Class Naam gebruiken zoals dit:
UserForm.DoeIets("parameter1", 999)
 
Laatst bewerkt door een moderator:
Bedankt voor het antwoord,

maar dit is helaas niet de oplossing blijkt... :(
Ik dien ook meteen te zeggen dat blijkt dat dit bericht niet in het correcte forum staat, het zou in VBA moeten staan. Heb ik ook pas gemerkt
toen ik zelf achter mijn bericht aan het zoeken was. Dus misschien heb ik daarvoor ook een andere oplossing nodig, ik ken de verschillen niet zo goed.

Mijn userform staat helemaal niet tussen Class en End Class.
Wat ik hierboven heb getypt is echt alles wat er staat. Het is ook niet mogelijk om END class onderaan al mijn tekst bij te zetten dan geeft hij een fout.

Ik heb ook geprobeerd dan Dim strTaal as string bovenaan te zetten maar dat vindt hij ook niet leuk.


Alvast bedankt !
 
Laatst bewerkt:
Ow ik dacht dat je het over Visual Basic had en niet over VBA,
Blijkbaar ga ik je dan niet kunnen helpen :(

Maar toch, veel succes!
 
@MatthiWare: Heb 'm al gerapporteerd, als het goed is wordt-ie nu verplaatst.
 
Welkom op Helpmij...

En aldus verplaatst naar VBA.;)

Succes met je vraag
 
Meestal heb je dit helemaal niet nodig.
Je kunt een van de eigenschappen van een object in een userform gebruiken om gegevens in op te slaan en uit te lezen; bijv.

Code:
Textbox1.tag="geen overbodige luxe"

Combobox1.value=textbox1.tag

Als je in variabelen persisteert kun je ze op de allereerste regel van de code module van het userform declareren; bijv:

Code:
Private sn as Variant
Private Sub Userform_Initialize()
   --
end sub

of plaats de essentie van wat je wil in een werkboek hier.
 
Laatst bewerkt:
Zonder een hele Code te schrijven zal ik de bedoeling uitwerken.
Mijn userform heeft verschillende knoppen, en dus verschillende private subs....

Code:
-------------------------------------------
Private Sub Copy_Click()        ' Mijn subroutine om alles naar het juiste blad te kopieren....
Dim Taal As String                 'mijn variabele die ik ook in andere private sub's wil gebruiken, dit is dus fout

    If ButNed.Value = True Then
        Blad1.Activate
        Taal = "Nederlands"
    Else
        Blad4.Activate
        Taal = "Frans"
    End If

'vervolgens komen al mijn regels om alles naar het correcte blad te kopieren

End Sub
------------------------------------------------
Private Sub ButPrint_Click()    'vervolgens ga ik mijn blad printen
 
 'printcommando's .....

'na het printen wil ik in mijn Excel van het gebruikte taalblad terug gegevens gaan kopiëren zonder weer heel de If-functie toe te passen, maar
'door de variabele Taal te gaan gebruiken die ik in vorige subroutine een waarde had gegeven. Dit gaat dus niet.


 Sheets(Taal).Select
            Range("B" & iTeller).Select             'materiaal
            Application.CutCopyMode = False
            Selection.Copy
            Sheets("Uitgeleend materiaal").Select
            Range("A" & i).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False

End Sub

Ik hoop bij deze een beetje meer uitleg gegeven te hebben over het idee. Zoals ik al zelf heb aangegeven kan ik inderdaad gewoon nogmaals
met een if functie de taal gaan controleren, want dit geef ik wel in op het userform, maar toch zou ik graag weten hoe het op mijn manier gaat.

Grtz
 
NickBu, het is belangrijk dat je de gegeven antwoorden grondig leest en dan toepast op jouw code.
snb heeft je in z'n laatste post het antwoord al gegeven.
Zet helemaal bovenaan je code (buiten alle procedures om) Private Taal As String
 
Ik had dit alreeds geprobeerd maar kreeg elke keer een compileerfout, vandaar dat ik dacht dat het niet kon.
Nu bleek een frame op mijn userform dezelfde naam te hebben (taal) vandaar dat hij fouten aangaf. Bij "dim" zag hij erover.

VBA is blijkbaar niet zo intelligent om dan ook aan te geven waar deze naam twee keer wordt gebruikt en je moet er dus zelf achter zoeken.

Bedankt allemaal

Mvg
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan