24. april 2016 - 12:19
Der er
4 kommentarer
VBA UserForm
Hej
Jeg har lavet en userform, men når der er fejl (fx postnr skal indeholde tal), så får jeg beskeden om at der er fejl, men data bliver stadig skrevet til excel. Hvad skal jeg tilføje af kode, for at der ikke bliver sendt noget af det data i userform, med mindre alt er korrekt?
24. april 2016 - 18:12
#1
Du skal ikke nødvendigvis tilføje ekstra kode. Før du skriver til Excel, skal du tjekke om de indtastede data er OK. Hvis ikke, giver du brugeren en fejlmeddelelse og hopper dernæst ud af proceduren (fx med "Exit Sub"), så brugeren kan rette fejlen.
25. april 2016 - 11:24
#2
Det synes jeg også jeg har gjort, her er koden:
'indstillinger for OK knappen:
Private Sub cmdOK_Click()
'her vælger jeg hvilket ark der skal hentes data fra og i hvilke celler det skal placeres:
Dim RowCount As Long
RowCount = Worksheets("UserForm").Range("A3").CurrentRegion.Rows.Count
With Worksheets("UserForm").Range("A3")
.Offset(RowCount, 0).Value = Me.txtFornavn.Value
.Offset(RowCount, 1).Value = Me.txtEfternavn.Value
.Offset(RowCount, 2).Value = Me.cboDag & "/" & cboMåned & "/" & cboÅr.Value
.Offset(RowCount, 3).Value = Me.txtAdresse.Value
.Offset(RowCount, 4).Value = Me.txtPostnr.Value
.Offset(RowCount, 5).Value = Me.txtBy.Value
.Offset(RowCount, 6).Value = Me.txtHoldnr.Value
End With
'her har jeg tilføjet data validering, fx hvis der er tomme felter:
If Me.txtFornavn.Value = "" Then
MsgBox "Indtast venligst et Fornavn.", vbExclamation, "Nyt Medlem"
Me.txtFornavn.SetFocus
Exit Sub
End If
If Me.txtEfternavn.Value = "" Then
MsgBox "Indtast venligst et Efternavn.", vbExclamation, "Nyt Medlem"
Me.txtEfternavn.SetFocus
Exit Sub
End If
If Me.cboDag.Value = "" Then
MsgBox "Vælg venligst Dag.", vbExclamation, "Nyt Medlem"
Me.cboDag.SetFocus
Exit Sub
End If
If Me.cboMåned.Value = "" Then
MsgBox "Vælg venligst Måned.", vbExclamation, "Nyt Medlem"
Me.cboMåned.SetFocus
Exit Sub
End If
If Me.cboÅr.Value = "" Then
MsgBox "Vælg venligst År.", vbExclamation, "Nyt Medlem"
Me.cboÅr.SetFocus
Exit Sub
End If
If Me.txtAdresse.Value = "" Then
MsgBox "Indtast venligst Adresse.", vbExclamation, "Nyt Medlem"
Me.txtAdresse.SetFocus
Exit Sub
End If
If Me.txtPostnr.Value = "" Then
MsgBox "Indtast venligst Post Nummer.", vbExclamation, "Nyt Medlem"
Me.txtPostnr.SetFocus
Exit Sub
End If
If Me.txtBy.Value = "" Then
MsgBox "Indtast venligst din By.", vbExclamation, "Nyt Medlem"
Me.txtBy.SetFocus
Exit Sub
End If
If Me.txtHoldnr.Value = "" Then
MsgBox "Indtast venligst et Hold Nummer.", vbExclamation, "Nyt Medlem"
Me.txtHoldnr.SetFocus
Exit Sub
End If
'her har jeg sørget for at feltet til Postnr skal indeholde tal:
If Not IsNumeric(Me.txtPostnr.Value) Then
MsgBox "Postnr skal indeholde tal!", vbExclamation, "Nyt Medlem"
Me.txtPostnr.SetFocus
Exit Sub
End If
'lukker UserForm ned efter klik på OK:
Unload Me
End Sub
'indstillinger for Ryd knappen:
Private Sub cmdRyd_Click()
'lukker UserForm ned og genåbner den med tomme felter:
Unload Me
frmNyeMedlemmer.Show
End Sub
'indstillinger for Annullere knappen:
Private Sub cmdAnnullere_Click()
'lukker UserForm ned når man trykker Annullere:
Unload Me
End Sub
'indstillinger for combobox cboDag:
Private Sub cboDag_Change()
'man kan kun indtaste eller vælge den data, der bliver hentet fra arket Data:
cboDag.Style = fmStyleDropDownList
End Sub
'indstillinger for combobox cboMåned:
Private Sub cboMåned_Change()
'man kan kun indtaste eller vælge den data, der bliver hentet fra arket Data:
cboMåned.Style = fmStyleDropDownList
End Sub
'indstillinger for combobox cboÅr:
Private Sub cboÅr_Change()
'man kan kun indtaste eller vælge den data, der bliver hentet fra arket Data:
cboÅr.Style = fmStyleDropDownList
End Sub
25. april 2016 - 15:41
#3
Nej, du starter med at skrive til cellerne og laver valiseringen bagefter. Lav valideringen først, og skriv kun til cellerne, hvis alt er OK.