Gedeelte UserForm werkt niet meer

Status
Niet open voor verdere reacties.

gummi

Gebruiker
Lid geworden
30 jul 2008
Berichten
10
Hallo,

Heb een excel (2003) bestand met daarin een userform. Deze wordt opgeroepen met:

Code:
Private Sub Worksheet_activate()
Answer = MsgBox("Zijn de toleranties veranderd?", vbYesNo)
If Answer = vbNo Then Exit Sub
If Answer = vbYes Then UserForm1.Show
End Sub

Waarbij de code van UserForm1 =

Code:
Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub

Private Sub CommandButton2_Click()
Range("M2:M10000") = Label7.Caption
Range("N2:N10000") = Label8.Caption
UserForm1.Hide
End Sub

Private Sub CommandButton3_Click()
Range("M2:M10000") = TextBox1.Text
End Sub

Private Sub CommandButton4_Click()
Range("N2:N10000") = TextBox2.Text
End Sub

Private Sub CommandButton5_Click()
Label7.Caption = Range("M2")
End Sub

Private Sub CommandButton6_Click()
Label8.Caption = Range("N2")
End Sub

Private Sub TextBox1_Change()
AlleenGetallen
End Sub

Private Sub TextBox2_Change()
AlleenGetallen
End Sub

Private Sub AlleenGetallen()
    If TypeName(UserForm1.ActiveControl) = "TextBox" Then
        With UserForm1.ActiveControl
[B]            If Not IsNumeric(.Value) And .Value <> "-" And .Value <> vbNullString Then
                MsgBox "Helaas alleen getallen toegestaan, anders is alles #WAARDE!"
                .Value = vbNullString[/B]
            End If
        End With
    End If
End Sub

Nu werkt het allemaal prima, op de laatste sub AlleenGetallen na. Het If Not statement wordt niet goed uitgevoerd, genereert geen msgbox en retourneert ook geen nullstring. Nu deed deze het kortgeleden nog prima, echter nu niet meer. Kan nu bij wijze van spreken de hele troonrede in die textboxen jassen zonder dat Excel er iets van vindt. Kan me helaas niet heugen dat er met dit bestand een noemenswaardige verandering heeft plaatsgevonden in de tussentijd. Heb er alleen op een ander werkblad een lijst toegevoegd en die er later weer uitgehaald. :| (een kopie is in Excel 2000 geweest)

Origineel komt het laatste deel hiervandaan:
http://www.ozgrid.com/VBA/validate-numbers.htm

Notes:
- De sub wordt wel gerunned, want als ik in het If Not statement (of ergens anders) de boel half afbreek, wordt er wel een foutmelding gegenereerd dat er verkeerde dingen instaan. Dit zowel gelijk in het VBA venster, alsmede wanneer het nog dermate in orde is dat hij er pas tijdens het uitvoeren in de werkmap problemen mee krijgt.
- Het geheel importeren in een leeg Excel bestand en daar uitvoeren levert geen verbetering op. Hetzelfde geldt voor opnieuw opstarten. Of voor de userform code schrappen en na saven er weer in plakken.
- Het macrobeveiligingsniveau, of beveiliging op het blad lijkt geen effect te hebben.
- Heb al Me. door UserForm1. en andersom vervangen, maar dat heeft geen effect.
- Het origineel van ozgrid komt ook niet meer met een werkend If Not.

Kortom: Userform werkt, alles wordt herkend, echter wordt er een deel niet uitgevoerd.

Weet iemand waar dit aan ligt?

Thanks! :)
 
Laatst bewerkt:
De gebeurtenis TextBox1_Change() kan ook aangeroepen worden als Textbox1 niet de 'activecontrol' is van het 'userform'.
Het gebruik van een tekstvak voor de invoer van alleen getallen ligt niet erg voor de hand.
Als eens naar het kringveld(spinbutton) gekeken ? of naar een combobox, ingesteld als dropdownlist (Type =2) met de reeks van toegestane getallen ?
Dat voorkomt niet alleen foutmeldingen, maar ook fouten in VBA-code om die meldingen te produceren.

NB. het gebruik van de test op 'typename' is overbodig als deze macro alleeen maar wordt aangeroepen bij een gebeurtenis met een tekstvak.
 
hmm, ja bij het uitvoeren zonder het element ActiveControl komt het met een melding bij de eerste .Value. Doet vermoeden dat het activecontrol niet die tekstbox is waar ik in type.

Zie dat het te omzeilen is door er twee aan te maken, een met TextBox1 en een met TextBox2 ipv ActiveControl. Dan komt ie wel met de msgbox en de nullstring.

Reden voor het tekstvak is om de gebruiker de vrijheid te geven alle mogelijke numerieke waarden direct in te kunnen vullen.

Bedankt, dat gaat zo wel lukken nu. Maar hoe kan het zijn dat een textbox die je 10x aanklikt en waar je karakters intypt niet het activecontrol is?


Edit, dan wordt het:

Code:
Private Sub TextBox1_Change()
AlleenGetallenBoven
End Sub

Private Sub TextBox2_Change()
AlleenGetallenOnder
End Sub

Private Sub AlleenGetallenBoven()
    With UserForm1.TextBox1
        If Not IsNumeric(.Value) And .Value <> "-" And .Value <> vbNullString Then
            MsgBox "Helaas alleen getallen toegestaan, anders is alles #WAARDE!"
            .Value = vbNullString
        End If
    End With
End Sub

Private Sub AlleenGetallenOnder()
    With UserForm1.TextBox2
        If Not IsNumeric(.Value) And .Value <> "-" And .Value <> vbNullString Then
            MsgBox "Helaas alleen getallen toegestaan, anders is alles #WAARDE!"
            .Value = vbNullString
        End If
    End With
End Sub

Works like a charm. Maar ik vraag me nog steeds af hoe dat niet het activecontrol is.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan