Avatar billede morsus Nybegynder
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?
Avatar billede Sitestory Mester
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.
Avatar billede morsus Nybegynder
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
Avatar billede Sitestory Mester
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.
Avatar billede morsus Nybegynder
25. april 2016 - 18:40 #4
Mange tak Sitestory, fik det til at virke :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester