AW: Benötige Hilfe für Aktualisierung einer Tabell
29.05.2006 17:36:54
Franz
Hallo Nicole,
ich hab mit folgendem Code mal versucht dein Problem zu lösen. Am besten speicherst du das Makro in einer eigenen Arbeitsmappe oder in der persönlichen Makro-Arbeitsmappe. Da das Makro auch das öffnen der Dateien steuert, müssen vor dem Start des Makros die Aufstellungs und die MASSE-Datei geschlossen sein. Dadurch ist beim Ablauf des Makros sichergestellt, dass die Dateien jeweils korrekt angesprochen werden. Wichtig ist, das die Positionen in Tabelle DATEN und Tabelle Rechnung auf gleiche Weise sortiert sind!
Sub MASSE_Rechnung_aktualisieren()
'Aktualisiert die Tabelle Rechnung mit Daten aus der Tabelle DATEN
Dim wbMASSE As Workbook, wbAufstellung As Workbook, wksRechnung As Worksheet, wksDaten As Worksheet
Dim ZeileR As Long, ZeileD As Long, Datei
MsgBox "Als nächstes bitte Arbeitsmappe MASSE xxx öffnen"
If Application.Dialogs(xlDialogOpen).Show = False Then Exit Sub
Set wbMASSE = ActiveWorkbook
Set wksDaten = wbMASSE.Worksheets("DATEN")
MsgBox "Als nächstes bitte Arbeitsmappe Aufstellung öffnen"
If Application.Dialogs(xlDialogOpen).Show = False Then Exit Sub
Set wbAufstellung = ActiveWorkbook
Set wksRechnung = wbAufstellung.Worksheets("Rechnung")
If MsgBox("Rechnung aktualisieren?", vbYesNo + vbQuestion, "Masse in Rechnung übertragen") _
= vbNo Then Exit Sub
ZeileR = 24 ' Startzeile der Einträge in Rechnung
ZeileD = 4 ' Startzeile der Einträge in DATEN
Do Until ZeileD = wksDaten.UsedRange.Row + wksDaten.UsedRange.Rows.Count
With wksRechnung
If IsEmpty(.Cells(ZeileR, 1)) Then 'in Rechnung noch keine Daten vorhanden
.Cells(ZeileR, 1).Value = wksDaten.Cells(ZeileD, 1).Value
.Cells(ZeileR, 2).Value = wksDaten.Cells(ZeileD, 2).Value
.Cells(ZeileR, 3).Value = wksDaten.Cells(ZeileD, 3).Value
ZeileR = ZeileR + 1
ZeileD = ZeileD + 1
Else
If .Cells(ZeileR, 1).Value = wksDaten.Cells(ZeileD, 1) Then ' Pos.Nr. ist in Rechnung vorhanden
ZeileR = ZeileR + 1
ZeileD = ZeileD + 1
Else
Do Until .Cells(ZeileR, 1).Value = wksDaten.Cells(ZeileD, 1)
.Cells(ZeileR, 1).EntireRow.Insert ' Leerzeile in Rechnung einfügen
.Cells(ZeileR, 1).Value = wksDaten.Cells(ZeileD, 1).Value
.Cells(ZeileR, 2).Value = wksDaten.Cells(ZeileD, 2).Value
.Cells(ZeileR, 3).Value = wksDaten.Cells(ZeileD, 3).Value
ZeileR = ZeileR + 1
ZeileD = ZeileD + 1
If ZeileD = wksDaten.UsedRange.Row + wksDaten.UsedRange.Rows.Count Then Exit Do
Loop
End If
End If
End With
Loop
End Sub
Gruß
Franz