Hallo Carsten
Da es sich um ein Ereignismakro handelt, werden die
Daten jedesmal beim Anklicken übertragen.
Soll das denn so sein, oder wäre Dir ein Button für diese
spezielle Aufgabe lieber?
Das Ereignis Activate wäre mir lieber.
Ich kenne den genauen Zweck der Übertragung nicht, aber ich
behaupte einfach mal pauschal, daß es schneller geht, alle
Artikel aus Tabelle1 einfach „drüberzubügeln“, als eine
Vergleichsprozedur durchlaufen zu lassen.
Bei einem Ereignismakro geht das nicht, weil dann bei jedem Anklicken der Tabelle alle Artikel aus Tabelle1 (Stammdaten) kopiert werden und ich die Daten dann mehrfach habe. Zum Zweck der Übertragung: ich brauche die Artikkel-Nr. damit in der Tabelle 2 die Einnahmen pro Artikel ermittelt werden können. Die Formeln dazu habe ich schon. Ich denke um die Prüfung der Artikel komme ich nicht herum, so dass immer nur neu angelegte Artikel aus Tabelle 1 übertragen werden. Was hälst du von diesem Code für diese Aufgabe
If
Tab2.Cells(y, 3).Value Tab1.Cells(i, 4).Value Then
Tab2.Cells(y, 3).Value = Tab1.Cells(i, 4).Value
End If
Das Makro muss dazu erkennen, wo es die neuen Artikel einfügen
soll.
Geht es hierbei um eine numerische oder alphabetische
Sortierung?
Die zu übertragenden Artikel sind nummerisch, müssen aber nicht sortiert werden. Das wichtige ist, dass das Makro erkennt in welcher Zeile der Spalte 3 die neuen Artikel aus Tabelle 1 eingefügt werden sollen.
Laut Deinem ersten Posting ab Zeile 15. Ist es denn zwingend
notwendig, daß die Daten an dieser Stelle stehen oder könnten
sie auch in einer anderen Spalte stehen?
Die Spalte 3 ist zwingend einzuhalten.
Wenn nun in Tabelle1 mehr als neun Artikel-Nr. stehen und
deswegen beim Übertragen Zeilen eingefügt werden sollen,
müssen dann auch Zeilen gelöscht werden, sofern weniger als
neun Artikel übertragen werden sollen?
Die Tabelle1 (maßgebende Tabelle) und Tabelle2 müssen immer die selben Artikel haben (Datensynchronisation), d.h. wenn aus Tabelle1 Artikel entfernt werden, dann muss in der Tabelle2 die Zeile mit diesem Artikel, die aus einer früheren Übertragung stammt, wieder gelöscht werden.
Wenn Zeilen nun auch gelöscht werden sollen, sollen dann die
nicht zu überschreibenden Daten wieder „nach oben geholt“
werden?
Wenn komplette Zeilen gelöscht werden, springen die Daten von unten automatisch nach oben. Für diese Aufgabe ist somit kein eigener Code erforderlich.
Das Beste wird sein, Du schickst mal eine Beispiel-Datei.
Wenn nach diesem Beitrag immer noch nicht klar ist, was ich meine, komme ich dem nach.
Der folgende Code fügt schon mal Zeilen ein:
Private Sub
Worksheet_Activate()
Dim Tab1 As Worksheet
Dim Tab2 As Worksheet
Dim y As Long
Dim i As Long
Set Tab1 = ActiveWorkbook.Worksheets(„Tabelle1“)
Set Tab2 = ActiveWorkbook.Worksheets(„Tabelle2“)
i = 10
y = 6
Do
If y >= 15 Then
Tab2.Rows(y).EntireRow.Insert
End If
Tab2.Cells(y, 3).Value = Tab1.Cells(i, 4).Value
i = i + 1
y = y + 1
Loop While Tab1.Cells(i, 4) „“
End Sub
Soweit erstmal
Der Code funktioniert so weit, dass Daten korrekt übertragen werden und auch die richtige Anzahl von Zeilen eingefügt wird. Leider werden bei jedem Anklicken der Tabelle2 Daten übertragen, obwohl sie schon aus einer früheren Übertagung da sind, d.h. hier muss noch code her, der vor der übertragung in Tabelle1 nachschaut, ob dort Artikel-Nr. drin sind, die nicht in Tabelle2 da sind. Nur dies sollen übertragen werden. Falls keine neuen Artikel da sind, soll gar nichts übertragen werden.
Gruß
Denis