AW: Datenübernahme VBA per Schaltfläche
fcs
Hallo Sascha,
damit eine Prozedur das macht was man möchte, muss ja zumindest der Ablauf der Aktivitäten in der richtigen Reihenfolge sein. also erst einmal die Eingaben auf Vollständigkeit prüfen und dann Werte übertragen.
Außerdem erschwert das unnötige Verwenden von verbundenen Zellen die Programmierung.
Gruß
Franz
Private Sub CommandButton1_Click()
Dim Fx, SpaltenPflege, SpaltenQuelle, N As Integer
Dim Zeile As Long
Dim msgText As String
Dim wksPflege As Worksheet, wksQuelle As Worksheet
Set wksPflege = Worksheets("Datenpflege")
Set wksQuelle = Worksheets("Datenquelle")
Fx = Array("die Rechnungsnummer", "das Lieferdatum", "der Rechnungsbetrag", _
"die Kontonummer")
SpaltenPflege = Array(3, 7, 11, 14) 'Spalten in Datenpflege (C, G, K, N)
Const ZeilePflege As Long = 12 'Eingabezeile im Blatt Datenpflege
SpaltenQuelle = Array(2, 3, 4, 6) 'Spalten in Datenquelle (B, C, D, F)
'Eingaben Prüfen
For N = LBound(SpaltenPflege) To UBound(SpaltenPflege)
If msgText = "" Then
'Zelle mit unvollständiger Eingabe selektieren
wksPflege.Cells(ZeilePflege, SpaltenPflege(N)).MergeArea.Select
End If
If IsEmpty(wksPflege.Cells(ZeilePflege, SpaltenPflege(N))) Then
msgText = msgText & vbLf & " - " & Fx(N)
End If
Next
If msgText <> "" Then
'Fehlermeldung anzeigen
msgText = "Zur Übernahme ist " & msgText & vbLf & " notwendig!"
MsgBox msgText, vbInformation + vbOKOnly, "Fehler!"
Else
'Daten übertragen
With wksQuelle
'Nächste freie Zeile im Blatt Datenquelle
Zeile = .Cells(.Rows.Count, 3).End(xlUp).Row + 1
'Daten eintragen
For N = LBound(SpaltenPflege) To UBound(SpaltenPflege)
If SpaltenPflege(N) = 7 Then 'Lieferdatum
.Cells(Zeile, SpaltenQuelle(N)) = _
wksPflege.Cells(ZeilePflege, SpaltenPflege(N)) + 21
Else
.Cells(Zeile, SpaltenQuelle(N)) = _
wksPflege.Cells(ZeilePflege, SpaltenPflege(N))
End If
'Inhalte in Eingabezelle löschen
wksPflege.Cells(ZeilePflege, SpaltenPflege(N)).MergeArea.ClearContents
Next
End With
Range("C12").Select
End If
Set wksPflege = Nothing
Set wksQuelle = Nothing
End Sub