AW: VBA Makro
28.10.2005 11:30:52
Sebastian
Hallo Peter,
vielen Dank für Deinen Ansatz. Bis jetzt funktioniert folgendes:
- Das Makro stellt richtig fest, ob das Feld A1 in Seba-1.xls mit dem Feld A1 in Seba-2.xls übereinstimmt.
- Wenn die Werte übereinstimmen, schreibt es die Zeile 1 aus Seba-1 in die Zeile 1 in Seba-2.
- Die Abfrage, ob die Zeile überschrieben werden soll, funktioniert.
Was nicht funktioniert:
- Das Makro liest nicht die ganze Spalte aus, d.h. es erkennt nicht, wenn der Wert in A2 oder weiter unten steht.
- Insofern kann ich auch nicht sagen, ob es den Wert in die erste leere Zeile schreibt. Wenn der Wert nicht in A1 auftaucht, meldet es immer, Zeile 2 sei die erste Zeile.
Vielleicht fällt Dir oder jemand anderem was dazu ein?
Danke im Voraus,
Sebastian
PS: Wie ist denn die Syntax, wenn ich nicht die Felder B1 bis J1 schreiben will, sondern spezifische Felder wie B1, F4, G4, H4 oder so...
Hier noch mal der aktuelle Code:
Sub Vergleichen()
Dim WkShQ As Worksheet
Dim WkShZ As Worksheet
Dim iWks As Integer
Dim lLetzte As Long
Dim lZeile As Long
Dim bGefu As Boolean
Dim sAbfra As String
Dim iSpalte As Integer
Const strPath As String = _
"C:\Documents and Settings\Rde14287x\Desktop"
'' Dateinname Eingabeformular
Const strFile As String = "Seba-1.xls"
On Error Resume Next
bGefu = False
Workbooks.Open Filename:=strPath & strFile
Sheets("Tabelle1").Activate
lLetzte = IIf(Range("A1") <> "", 65536, Range("A65536").End(xlUp).Row)
On Error GoTo 0
Set WkShQ = Workbooks("Seba-1.xls").Worksheets("Tabelle1")
Set WkShZ = Workbooks("Seba-2.xls").Worksheets("Tabelle1")
For lZeile = 1 To lLetzte
If WkShZ.Range("A1").Value = WkShQ.Range("A" & lZeile).Value Then
bGefu = True
Exit For
End If
Next lZeile
If bGefu = True Then
MsgBox "Die Kundennummer wurde " _
& Chr(10) & "in Zeile " & lZeile & " gefunden.", _
64, " Der Kunde ist bereits angelegt."
sAbfra = MsgBox("Wollen Sie die Daten des Kunden aktualisieren?", _
vbQuestion + vbOKCancel, " Bitte entscheiden Sie sich.")
If sAbfra = "1" Then ' OK angeklickt ?
For iSpalte = 2 To 10
WkShZ.Cells(1, iSpalte).Value = WkShQ.Cells(lZeile, iSpalte).Value
Next iSpalte
End If
Else
lZeile = lLetzte + 1
MsgBox "Zeile " & lZeile & " ist die erste leere Zeile.", _
64, " die erste leere Zeile hinter den Daten"
For iSpalte = 2 To 10
WkShZ.Cells(1, iSpalte).Value = WkShQ.Cells(lZeile, iSpalte).Value
Next iSpalte
End If
End Sub