Terug naar het GUI formulier

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Zoals in het zoekdatabase is te lezen ben ik bezig met een GUI formulier.

Hiervoor had ik al een vraag gesteld omtrent het centreren, maar ik vind dit niets.

Ik heb nu besloten het formulier te splitsen in 2 losse formulieren. Ik ben hiermee tot de conclusie gekomen dat ik dit netter vind.

Maar nu toch even een vraag voor de pro kenners.

Zodra ik een zoekopdracht heb ingevoerd in het eerste formulier worden de textboxen van het tweede formulier gevuld nadat het eerste formulier verborgen wordt via hide en het tweede formulier is geopend.

Code:
    Me.Hide
    Frm_Product.Show
    
    On Error GoTo Product
    
    If ComboBox1.Value = vbNullString Or TextBox1.Text = vbNullString Or TextBox1.Text = Tekst_A Then GoTo Invoer
    If ComboBox1.Value = Tekst_B Then It = WorksheetFunction.Match(TextBox1.Text, Sheets("Materiaallijst").Columns(3), 0)
    If ComboBox1.Value = Tekst_C Then It = WorksheetFunction.Match(TextBox1.Text, Sheets("Materiaallijst").Columns(4), 0)
    If ComboBox1.Value = Tekst_D Then It = WorksheetFunction.Match(TextBox1.Text, Sheets("Materiaallijst").Columns(5), 0)
    If ComboBox1.Value = Tekst_E Then It = WorksheetFunction.Match(TextBox1.Text, Sheets("Materiaallijst").Columns(6), 0)

    Kolnr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    Call Gegevens 'Gegevens uit database ophalen
    
    Application.ActiveWindow.ScrollRow = It
        
    Exit Sub

Zodra het 2e formulier is geopend dan zie je netjes alle gegevens in de textboxen staan. Echter als ik nu veranderingen maak in de textboxen en deze wil doorvoeren met:

Code:
 With Sheets("Materiaallijst")
        Cells(It, 1).Resize(, 8) = Array(TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, CDbl(TextBox9), CDbl(TextBox10 / 100))
    End With

dan krijg ik een foutmelding in deze code. Het blijkt verkeerd te gaan in het gedeelte Cells(It,1)

De It kan kennelijk niet worden gevonden als deze in het eerste formulier is genoemd en verborgen is.

Nu heb ik wel een oplossing bedacht en dat is de eerste code herhalen met een aanpassing verwijzend naar Userform1.ComboBox1.Value.

Code:
    If UserForm1.ComboBox1.Value = Tekst_B Then It = WorksheetFunction.Match(UserForm1.TextBox1.Text, Sheets("Materiaallijst").Columns(3), 0)
    If UserForm1.ComboBox1.Value = Tekst_C Then It = WorksheetFunction.Match(UserForm1.TextBox1.Text, Sheets("Materiaallijst").Columns(4), 0)
    If UserForm1.ComboBox1.Value = Tekst_D Then It = WorksheetFunction.Match(UserForm1.TextBox1.Text, Sheets("Materiaallijst").Columns(5), 0)
    If UserForm1.ComboBox1.Value = Tekst_E Then It = WorksheetFunction.Match(UserForm1.TextBox1.Text, Sheets("Materiaallijst").Columns(6), 0)

Hoewel deze oplossing wel werkt, vraag ik mij toch af of ik niet iets verkeerd heb gedaan, want ik heb het idee dat in het tweede formulier de It normaal gesproken helemaal niet opnieuw en aangepast hoeft te worden benoemd.

De It is als Long gedeclareerd.

Kan iemand mij dat uitleggen?
 
Laatst bewerkt:
Wellicht interessant is te weten dat de codes onder Private Subs zijn weggewerkt. Ik weet dat zij dan enkel voor het geldend formulier bestemd zijn, maar enkel Sub werkt ook niet.
 
Masala09,

Als je een variabele maakt onder een userform is deze alleen maar beschikbaar als de userform actief is.
Zo gauw je de userform sluit ben je de waarde kwijt.
Wat je kunt doen is de variabele global te definiëren. Dit doe je door onder VBA een module aan te maken
en hier alleen maar in te zetten:
Code:
Dim It as Long

Dan kun je de variabele in beide userforms gebruiken.

Veel Succes.
 
Beste Elsendoorn, daar dacht ik dus ook al aan. Ik krijg het op de 1 of andere manier niet voor elkaar. Echter jouw manier heb ik nog niet geprobeerd. Ik had gepoogd de volledige code in een module te plaatsen en deze dan aan te spreken. Dat werkte alleen niet. Nu heb ik het wel opgelost door in beide userforms dezelfde code te plaatsen.

Als opmerking wil ik je wellicht ten overvloede meegeven dat ik het formulier overigens niet echt sluit, maar hide. (Of het formulier moet dan alsnog niet meer actief zijn en dat ik dat over het hoofd zie)

Wat ik van jou dus begrijp is in een module slechts: Dim IT as long zetten en dat dat is genoeg?
 
Beste Elsendoorn, sorry dat ik er zo laat op terug kom, maar jouw code werkt niet. Ik heb een module aangemaakt en ik heb daar Dim It As Long in gezet. Vervolgens heb ik de herhaling van de om de It te bepalen, uit het tweede formulier verwijderd. Ik heb de Dim It As Long op beide formulieren verwijderd.

Toch werkt het niet.
 
Die ziet er meer bekend uit. Ik denk wel dat die werkt.

Je hoort van mij. Bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan