Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listenabgleich zum Update der Datenbank

Listenabgleich zum Update der Datenbank
12.01.2023 15:02:17
Erik
Hallo, ich habe
Datei 1 - Tabelle1
Datei 2 - Tabelle2
und in beiden ist jeweils eine mit einer ProduktID. In Datei 1 stehen die neuen Preise, in Datei 2 stehen die alten Preise (anders sortiert).
VBA soll jetzt abgleichen, wo die ProduktIDs übereinstimmen, und dann die neuen Preise in Datei 2 entsprechend eintragen.
Ein Makro was alle Preise in Datei 2 löscht hab ich schon fertig.
Hier der Code für den ID-Abgleich und Eintrag:

Sub Preisupdate()
Dim PreisSpalteNummer As Integer
Dim IDSpalteNummer As Integer
Dim ID1 As Long
Dim ID2 As Long
Dim Datei1 As Workbook
Dim Datei2 As Workbook
Set Datei1 = ThisWorkbook
Set Datei2 = ("Datei2.xlsx")
PreisSpalteNummer = 11
IDSpalteNummer = PreisSpalteNummer + 3
'Preis für Stempel identifizieren
ThisWorkbook.Worksheets("Tabelle1").Activate
For ID1 = 1 To 500
For ID2 = 1 To 500
If Sheets("Tabelle1").Cells(ID1, IDSpalteNummer).Value = Workbooks("Datei2.xlsx").Sheets("Tabelle2").Cells(ID2, 2).Value Then
Set Workbooks("Datei2.xlsx").Sheets("Tabelle2").Cells(ID2, 6).Value = ThisWorkbook.Sheets("Tabelle1").Cells(ID1, PreisSpalteNummer).Value
End If
Next ID2
Next ID1
End Sub
In der Zeile, wo der Wert in Datei 2 eingetragen werden soll, kriege ich folgenden Fehler:
Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler
Irgendwelche Ideen?
Vielen Dank im Voraus

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
lösch das 'Set'. owT
12.01.2023 16:02:52
Rudi
AW: lösch das 'Set'. owT
13.01.2023 13:28:02
Erik
Guter Tipp, dumm übersehen.
Der Fehler bleibt aber derselbe leider.
AW: lösch das 'Set'. owT
13.01.2023 18:29:12
Rudi
Set Datei2 = WorkBooks ("Datei2.xlsx")
Muss geöffnet sein.
Gruß
Rudi
AW: Listenabgleich zum Update der Datenbank
13.01.2023 14:39:14
Yal
Hallo Erik,

Set Datei2 = ("Datei2.xlsx")
Du versuchst damit einen String einem Objekt-Variable zu zuweisen. Mag VBA nicht.
Variablen, die sich nicht ändern kann man als Konstant ablegen.
Je kürzer die Variablenname, desto lesbarer den Code (man sollte aber nicht übertreiben)
Wenn schon Objekt-Variable ("Datei1",..), dann konsequent diese verwenden.
Warum Workbook in einer Variable, wenn eigentlich je nur ein Blatt pro Wb verwendet wird? Nutze Worksheet-Objektvariablen.
Sprechende Variablennamen zahlen sich aus: Q für Quelle, Z für Ziel.
Wenn man das Einrücken sauber hält, braucht keine/kaum Leerzeilen. Diese haben dann desto mehr Bedeutung.
Dein Code könnte so aussehen:

Sub Preisupdate()
Dim Q As Long
Dim Z As Long
Dim wsQ As Worksheet
Dim wsZ As Worksheet
Const spPreis = 11
Const spID = 14
Set wsQ = ThisWorkbook.Worksheets("Tabelle1")
Set wsZ = Workbooks("Datei2.xlsx").Worksheets("Tabelle2")
'Preis für Stempel identifizieren
wsQ.Activate 'eigentlich nicht notwendig.
For Q = 1 To 500
For Z = 1 To 500
If wsQ.Cells(Q, spID).Value = wsZ.Cells(Z, 2).Value Then wsZ.Cells(Z, 6) = wsQ.Cells(Q, spPreis).Value
Next Z
Next Q
End Sub
VG
Yal
Anzeige
AW: Listenabgleich zum Update der Datenbank
18.01.2023 16:30:57
Erik
Hi,
danke, das hat mir gezeigt, wie ich vorgehen kann, und ich habs von da aus alles zum Laufen gebracht.
Ich hatte das beim Debuggen erstmal alles vereinfacht um hier von vorne aus nachzufragen. Ohne Arrays und do-Loops zu arbeiten ist wahrscheinlich nicht die eleganteste Lösung aber ich hab jetzt For-Schleifen und die enthaltenen If's alle mit 'If Not IsEmpty'-Bedingung und jetzt läuft das alles zügig durch.
Beste Grüße,
Erik

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige