Hallo,
ich fülle über eine Userform
ein Formular.
Leider werden manche Werte gar nicht oder an falscher Stelle eingefügt.
Was ist falsch?
Hier das Makro (Aktivierreihenfolge beachten!):
und hier die Muster-Datei:
2016 Rechnungen - Rabe - Muster.xlsb (Größe: 76,84 KB / Downloads: 10)
ich fülle über eine Userform
ein Formular.
Leider werden manche Werte gar nicht oder an falscher Stelle eingefügt.
Was ist falsch?
Hier das Makro (Aktivierreihenfolge beachten!):
Option Explicit
Private Sub UserForm_Initialize()
Dim objWs As Worksheet
Dim objZeile As Range
Set objWs = ThisWorkbook.Worksheets("Kundendaten")
For Each objZeile In objWs.UsedRange.Rows
If objZeile.Row > 1 Then
Me.ListBox1.AddItem objZeile.Cells(1, 2)
End If
Next objZeile
Set objWs = Nothing
Set objZeile = Nothing
' strDatei = ThisWorkbook.Path & "\Logo.jpg"
' If Dir(strDatei) = "" Then ' prüfen, ob Bild vorhanden
' MsgBox ("Firmenlogo fehlt! " & Chr(10) & Chr(13) & strDatei)
'Else
' Me.Image1.Picture = LoadPicture(strDatei)
' End If
Set objWs = ThisWorkbook.Worksheets("RechnungsVorlage")
With objWs ' Worksheets("RechnungsVorlage")
.Range("K23").ClearContents ' Rechnungsnummer
.Range("K22").ClearContents ' Kundennummer
'.Range("F16").ClearContents ' eMail-Adresse
For i = 16 To 21 'Kundendaten
.Range("C" & i).ClearContents
Next i
.Range("K21").ClearContents ' Rechnungsdatum
.Range("D30").ClearContents ' Bezeichnung 1-1
.Range("F30").ClearContents ' Bezeichnung 1-2
.Range("G30").ClearContents ' Anzahl 1
.Range("H30:I30").ClearContents ' Preis 1
.Range("D32").ClearContents ' Projekttext 1-1
.Range("D33").ClearContents ' Projekttext 1-2
.Range("D34").ClearContents ' Projekttext 1-3
.Range("D36").ClearContents ' Bezeichnung 2-1
.Range("F36").ClearContents ' Bezeichnung 2-2
.Range("G36").ClearContents ' Anzahl 2
.Range("H36:I36").ClearContents ' Preis 2
.Range("D38").ClearContents ' Projekttext 2-1
.Range("D39").ClearContents ' Projekttext 2-2
.Range("D40").ClearContents ' Projekttext 2-3
.Range("D42").ClearContents ' Bezeichnung 3-1
.Range("F42").ClearContents ' Bezeichnung 3-2
.Range("G42").ClearContents ' Anzahl 3
.Range("H42:I42").ClearContents ' Preis 3
.Range("D44").ClearContents ' Projekttext 3-1
.Range("D45").ClearContents ' Projekttext 3-2
.Range("D46").ClearContents ' Projekttext 3-3
End With
' dteReDatum = vbNullString
strBezeichnung1_1 = vbNullString
strBezeichnung1_2 = vbNullString
strAnzahl_1 = vbNullString
strPreis_1 = vbNullString
strProjekttext1_1 = vbNullString
strProjekttext1_2 = vbNullString
strProjekttext1_3 = vbNullString
strBezeichnung2_1 = vbNullString
strBezeichnung2_2 = vbNullString
strAnzahl_2 = vbNullString
strPreis_2 = vbNullString
strProjekttext2_1 = vbNullString
strProjekttext2_2 = vbNullString
strProjekttext2_3 = vbNullString
strBezeichnung3_1 = vbNullString
strBezeichnung3_2 = vbNullString
strAnzahl_3 = vbNullString
strPreis_3 = vbNullString
strProjekttext3_1 = vbNullString
strProjekttext3_2 = vbNullString
strProjekttext3_3 = vbNullString
End Sub
Private Sub Userform_Activate() 'Userform aufrufen
For i = 1 To 22
Me.Controls("TextBox" & i) = ""
Next
For i = 1 To 3
Me.Controls("Textbox" & i) = "bitte eintragen"
Next
Me.Controls("Textbox16") = VBA.Date
ListBox1.SetFocus
End Sub
Private Sub CancelButton_Click() ' Eingabe abbrechen
For i = 1 To 22
Me.Controls("TextBox" & i) = ""
Next
boAbbruch = True
Unload Me
' Me.Hide
End Sub
Private Sub ListBox1_Click()
TextBox1.SetFocus
End Sub
Private Sub okButton1_Click() ' Übernehmen
For i = 1 To 5
If Me.Controls("TextBox" & i).Value = "" Then Exit Sub
Next
boAbbruch = False
Application.ScreenUpdating = False
' Zelleninhalt_sichern = ActiveCell.Value
'Datenzeile aus Formular ermitteln
lngAdressZeile = ListBox1.ListIndex + 2
'Kundendaten auslesen
Set objWs = ThisWorkbook.Worksheets("Kundendaten")
'KdNr Name Firma Strasse Ort Land PLZ eMail MWSt
strKdNr = objWs.Cells(lngAdressZeile, 1).Value
strAnsprechpartner = objWs.Cells(lngAdressZeile, 2).Value
strFirma = objWs.Cells(lngAdressZeile, 3).Value
strStrasse = objWs.Cells(lngAdressZeile, 4).Value
strOrt = objWs.Cells(lngAdressZeile, 5).Value
strLand = objWs.Cells(lngAdressZeile, 6).Value
strPLZ = objWs.Cells(lngAdressZeile, 7).Value
streMail = objWs.Cells(lngAdressZeile, 8).Value
strMWSt = objWs.Cells(lngAdressZeile, 9).Value
' Kundendaten in Tabelle "RechnungsVorlage" eintragen
Set objWs = ThisWorkbook.Worksheets("RechnungsVorlage")
With Worksheets("Datenbankliste")
loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1)
strReNr = WorksheetFunction.Max(.Range("H2:H" & loLetzte)) + 1
End With
With objWs ' Worksheets("RechnungsVorlage")
.Range("K23") = strReNr ' Rechnungsnummer
.Range("K22") = strKdNr ' Kundennummer
.Range("C16") = strAnsprechpartner ' Ansprechpartner
'.Range("F16") = streMail ' eMail-Adresse
.Range("C17") = strFirma ' Firma
.Range("C18") = strStrasse ' Straße
.Range("C19") = strOrt ' Ort
.Range("C20") = strLand ' Land
.Range("C21") = strPLZ ' PLZ
.Range("K21") = dteReDatum ' Rechnungsdatum
.Range("D30") = strBezeichnung1_1 ' Bezeichnung 1-1
.Range("F30") = strBezeichnung1_2 ' Bezeichnung 1-2
.Range("G30") = strAnzahl_1 ' Anzahl 1
.Range("H30") = strPreis_1 ' Preis 1
.Range("D32") = strProjekttext1_1 ' Projekttext 1-1
.Range("D33") = strProjekttext1_2 ' Projekttext 1-2
.Range("D34") = strProjekttext1_3 ' Projekttext 1-3
.Range("D36") = strBezeichnung2_1 ' Bezeichnung 2-1
.Range("F36") = strBezeichnung2_2 ' Bezeichnung 2-2
.Range("G36") = strAnzahl_2 ' Anzahl 2
.Range("H36") = strPreis_2 ' Preis 2
.Range("D38") = strProjekttext2_1 ' Projekttext 2-1
.Range("D39") = strProjekttext2_2 ' Projekttext 2-2
.Range("D40") = strProjekttext2_3 ' Projekttext 2-3
.Range("D42") = strBezeichnung3_1 ' Bezeichnung 3-1
.Range("F42") = strBezeichnung3_2 ' Bezeichnung 3-2
.Range("G42") = strAnzahl_3 ' Anzahl 3
.Range("H42") = strPreis_3 ' Preis 3
.Range("D44") = strProjekttext3_1 ' Projekttext 3-1
.Range("D45") = strProjekttext3_2 ' Projekttext 3-2
.Range("D46") = strProjekttext3_3 ' Projekttext 3-3
End With
' ActiveCell.Value = Zelleninhalt_sichern
Application.ScreenUpdating = True
' Unload Me
Me.Hide
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Bezeichnung 1-1: Text und Zahl
If TextBox1.Value = "" Then Exit Sub
strBezeichnung1_1 = TextBox1.Value
' TextBox2.SetFocus
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Bezeichnung 1-2: Text und Zahl
If TextBox2.Value = "" Then Exit Sub
strBezeichnung1_2 = TextBox2.Value
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 1-1: Text und Zahl
If TextBox3.Value = "" Then Exit Sub
strProjekttext1_1 = TextBox3.Value
' TextBox17.SetFocus
End Sub
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 1-2: Text und Zahl
strProjekttext1_2 = TextBox17.Value
' TextBox18.SetFocus
End Sub
Private Sub TextBox18_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 1-3: Text und Zahl
strProjekttext1_3 = TextBox18.Value
' TextBox6.SetFocus
End Sub
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Anzahl 1: nur Zahl
If TextBox4.Value = "" Then Exit Sub
If IsNumeric(TextBox4.Value) = False Then
frmFehler.Show
TextBox4.Value = ""
TextBox4.SetFocus
Cancel = True
Exit Sub
Else
strAnzahl_1 = TextBox4.Value
End If
' TextBox5.SetFocus
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Preis 1: nur Zahl
If TextBox5.Value = "" Then Exit Sub
If IsNumeric(TextBox5.Value) = False Then
frmFehler.Show
TextBox5.Value = ""
TextBox5.SetFocus
Cancel = True
Exit Sub
Else
strPreis_1 = TextBox5.Value
End If
' TextBox6.SetFocus
End Sub
Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Bezeichnung 2-1: Text und Zahl
strBezeichnung2_1 = TextBox6.Value
' TextBox7.SetFocus
End Sub
Private Sub TextBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Bezeichnung 2-2: Text und Zahl
strBezeichnung2_2 = TextBox7.Value
' TextBox8.SetFocus
End Sub
Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 2-1: Text und Zahl
strProjekttext2_1 = TextBox8.Value
' TextBox19.SetFocus
End Sub
Private Sub TextBox19_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 2-2: Text und Zahl
strProjekttext2_2 = TextBox19.Value
' TextBox20.SetFocus
End Sub
Private Sub TextBox20_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 2-3: Text und Zahl
strProjekttext2_3 = TextBox20.Value
' TextBox9.SetFocus
End Sub
Private Sub TextBox9_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Anzahl 2: nur Zahl
If IsNumeric(TextBox9.Value) = False Then
frmFehler.Show
TextBox9.Value = ""
TextBox9.SetFocus
Cancel = True
Exit Sub
Else
strAnzahl_2 = TextBox9.Value
End If
' TextBox10.SetFocus
End Sub
Private Sub TextBox10_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Preis 2: nur Zahl
If IsNumeric(TextBox10.Value) = False Then
frmFehler.Show
TextBox10.Value = ""
TextBox10.SetFocus
Cancel = True
Exit Sub
Else
strPreis_2 = TextBox10.Value
End If
' TextBox11.SetFocus
End Sub
Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Bezeichnung 3-1: Text und Zahl
strBezeichnung3_1 = TextBox11.Value
' TextBox12.SetFocus
End Sub
Private Sub TextBox12_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Bezeichnung 3-2: Text und Zahl
strBezeichnung3_2 = TextBox12.Value
' TextBox13.SetFocus
End Sub
Private Sub TextBox13_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 3-3: Text und Zahl
strProjekttext3_3 = TextBox13.Value
' TextBox21.SetFocus
End Sub
Private Sub TextBox21_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 3-2: Text und Zahl
strProjekttext3_2 = TextBox21.Value
' TextBox22.SetFocus
End Sub
Private Sub TextBox22_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Projekttext 3-3: Text und Zahl
strProjekttext3_3 = TextBox22.Value
' TextBox14.SetFocus
End Sub
Private Sub TextBox14_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Anzahl 3: nur Zahl
strAnzahl_3 = TextBox14.Value
' TextBox15.SetFocus
End Sub
Private Sub TextBox15_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Preis 3: nur Zahl
strPreis_3 = TextBox15.Value
' TextBox16.SetFocus
End Sub
Private Sub TextBox16_Enter() ' Datum
' TextBox16.Value = Date
End Sub
Private Sub TextBox16_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' Datum: nur Datum
If TextBox16.Value = "" Then Exit Sub
If IsDate(TextBox16.Value) = False Then
frmFehler.Show
TextBox16.Value = ""
TextBox16.SetFocus
Cancel = True
Exit Sub
Else
dteReDatum = TextBox16.Value
End If
End Sub
und hier die Muster-Datei:
2016 Rechnungen - Rabe - Muster.xlsb (Größe: 76,84 KB / Downloads: 10)