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.