Registriert seit: 09.07.2015
Version(en): 2010
Hallo liebes Excel-Forum,
und zwar habe ich folgendes Problem. Ich habe eine Excel-Liste, in der Name, Produktnummer und der Preis enthalten sind. Wöchentlich bekomme ich eine Liste mit aktualisierten Preisen bzw neuen Produkten.
Jetzt würde ich gerne ein Makro haben, dass die wöchentliche Liste (kann auch manuell dementsprechend formatiert werden) importiert wird. Daraufhin wird anhand der Produktnummer nach Duplikaten geprüft. Wenn die Produktnummer noch nicht vorhanden ist, wird eine Zeile hinzugefügt mit dem entsprechenden Namen, Produktnummer und Preis. Sollte die Produktnummer schon vorhanden sein, wird nur der Preis aktualisiert. Ist das technisch umsetzbar mit Makros und vba?
Bin langsam am Verzweifeln! :)
Vielen Dank im Voraus und beste Grüße,
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi, (09.07.2015, 15:34)tobestar2702 schrieb: Ist das technisch umsetzbar mit Makros und vba? ja, das geht. Fang schon mal an und starte die Makroaufzeichnung, dann mache ein Mal den ganzen Vorgang, beende die Aufzeichnung und dann poste das Makro hier, dann können wir es gemeinsam verallgemeinern und von Überflüssigkeiten befreien.
Registriert seit: 09.07.2015
Version(en): 2010
09.07.2015, 15:56
(Dieser Beitrag wurde zuletzt bearbeitet: 09.07.2015, 15:57 von tobestar2702.)
und wie soll ich das per Makroaufzeichnung machen? Ich habe da doch eine Verzweigung "if-else" enthalten - entweder ist die Produktnummer enthalten oder nicht. Oder soll ich zwei separate Makros dann aufzeichnen?
Gruß,
Tobias
Registriert seit: 16.04.2014
Version(en): xl2016/365
Hola,
verlink doch bitte deine Beiträge in den verschiedenen Foren untereinander, damit niemand doppelt arbeiten muss.
Danke.
Gruß, steve1da
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Tobias, (09.07.2015, 15:56)tobestar2702 schrieb: Oder soll ich zwei separate Makros dann aufzeichnen? ja, z.B.
Registriert seit: 09.07.2015
Version(en): 2010
(09.07.2015, 19:02)Rabe schrieb: Hi Tobias,
(09.07.2015, 15:56)tobestar2702 schrieb: Oder soll ich zwei separate Makros dann aufzeichnen? ja, z.B. Habe nebenbei noch Hilfe aus einem anderen Forum bekommen. Sub Daten_sammeln() Windows("Daten.xls").Activate 'anpassen If Workbooks.Count > 2 Then MsgBox "Es darf nur eine Quelldatei offen sein!", vbCritical, " _ Datei schliessen": Exit Sub If Workbooks.Count = 1 Then MsgBox "Bitte Quelldatei öffnen!", vbInformation, "Datei öffnen": _ Exit Sub For wkb = 1 To Workbooks.Count If Not Workbooks(wkb).Name = ActiveWorkbook.Name Then Set wb = Workbooks(wkb).Sheets(1) ' _ Name Quelldatei setzen, da nicht bekannt Next wkb For i = 2 To wb.Cells(Rows.Count, 1).End(xlUp).Row ' bis Ende Quelldatei Prod = Cells(i, 1) Set p = Columns(1).Find(What:=Prod, LookIn:=xlValues, LookAt:=xlWhole) If Not p Is Nothing Then Cells(p.Row, 3) = wb.Cells(i, 3) ' Spalte 3 Else nz = Cells(Rows.Count, 1).End(xlUp).Row + 1 ' neue Zeile Cells(nz, 1) = wb.Cells(i, 1) ' Spalte 1 Cells(nz, 2) = wb.Cells(i, 2) ' Spalte 2 Cells(nz, 3) = wb.Cells(i, 3) ' Spalte 3 End If Next i End Sub Meine Antwort dazu: Wenn ich wie du sagst beide Dateien offen habe und das Makro ausführe, sagt er mit "Es darf nur eine Quelldatei offen sein!" aus deinem Script. Wenn ich nur eine Datei geöffnet habe und dein Makro ausführe, sagt er mir: "Run-Time error 9: Subscript out of range". Ich muss doch lediglich in der zweiten Zeile den Namen der Datei einbinden, die die neuen Daten enthält. Zeile 9 - Name Quelldatei setzen, da nicht bekannt - Was muss ich dafür genau ändern?
Registriert seit: 10.04.2014
Version(en): 2016 + 365
10.07.2015, 12:01
(Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2015, 12:10 von Rabe.)
Hi Tobias, (10.07.2015, 09:21)tobestar2702 schrieb: Zeile 9 - Name Quelldatei setzen, da nicht bekannt - Was muss ich dafür genau ändern? das ist ein Kommentar. mit dem Zeichen "_" wird ein Zeilenumbruch in der Code-Darstellung erzeugt. Der Code heißt eigentlich mit entfernten Zeilenumbrüchen so: Sub Daten_sammeln() Windows("Daten.xls").Activate 'anpassen If Workbooks.Count > 2 Then MsgBox "Es darf nur eine Quelldatei offen sein!", vbCritical, " Datei schliessen": Exit Sub If Workbooks.Count = 1 Then MsgBox "Bitte Quelldatei öffnen!", vbInformation, "Datei öffnen": Exit Sub For wkb = 1 To Workbooks.Count If Not Workbooks(wkb).Name = ActiveWorkbook.Name Then Set wb = Workbooks(wkb).Sheets(1) ' Name Quelldatei setzen, da nicht bekannt Next wkb For i = 2 To wb.Cells(Rows.Count, 1).End(xlUp).Row ' bis Ende Quelldatei Prod = Cells(i, 1) Set p = Columns(1).Find(What:=Prod, LookIn:=xlValues, LookAt:=xlWhole) If Not p Is Nothing Then Cells(p.Row, 3) = wb.Cells(i, 3) ' Spalte 3 Else nz = Cells(Rows.Count, 1).End(xlUp).Row + 1 ' neue Zeile Cells(nz, 1) = wb.Cells(i, 1) ' Spalte 1 Cells(nz, 2) = wb.Cells(i, 2) ' Spalte 2 Cells(nz, 3) = wb.Cells(i, 3) ' Spalte 3 End If Next i End Sub
VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel Code erstellt und getestet in Office 15 Und so zur besseren Übersichtlichkeit: Sub Daten_sammeln() Windows("Daten.xls").Activate 'anpassen If Workbooks.Count > 2 Then MsgBox "Es darf nur eine Quelldatei offen sein!", vbCritical, "Datei schliessen" Exit Sub End If If Workbooks.Count = 1 Then MsgBox "Bitte Quelldatei öffnen!", vbInformation, "Datei öffnen" Exit Sub End If For wkb = 1 To Workbooks.Count If Not Workbooks(wkb).Name = ActiveWorkbook.Name Then Set wb = Workbooks(wkb).Sheets(1) ' Name Quelldatei setzen, da nicht bekannt End If Next wkb For i = 2 To wb.Cells(Rows.Count, 1).End(xlUp).Row ' bis Ende Quelldatei Prod = Cells(i, 1) Set p = Columns(1).Find(What:=Prod, LookIn:=xlValues, LookAt:=xlWhole) If Not p Is Nothing Then Cells(p.Row, 3) = wb.Cells(i, 3) ' Spalte 3 Else nz = Cells(Rows.Count, 1).End(xlUp).Row + 1 ' neue Zeile Cells(nz, 1) = wb.Cells(i, 1) ' Spalte 1 Cells(nz, 2) = wb.Cells(i, 2) ' Spalte 2 Cells(nz, 3) = wb.Cells(i, 3) ' Spalte 3 End If Next i End Sub
VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel Code erstellt und getestet in Office 15 Ich würde auf jeden Fall oben drüber "Option Explicit" schreiben und dann alle verwendeten Variablen deklarieren ("Dim wkb As Integer", ...)., Dann fallen Variablenfehler schneller auf.
Registriert seit: 09.07.2015
Version(en): 2010
(10.07.2015, 12:01)Rabe schrieb: Hi Tobias,
Ich würde auf jeden Fall oben drüber "Option Explicit" schreiben und dann alle verwendeten Variablen deklarieren ("Dim wkb As Integer", ...)., Dann fallen Variablenfehler schneller auf. Ich habe den Code leider nicht selber geschrieben. Kann ich den so nicht verwenden? Bei mir meckert er immer im vba anhand eines gelben Pfeils und gelb gefärbtem Hintergrund bei Windows("Daten.xls").Activate 'anpassen
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
Hi Tobias, Zitat:Ich habe den Code leider nicht selber geschrieben. Kann ich den so nicht verwenden? Bei mir meckert er immer im vba anhand eines gelben Pfeils und gelb gefärbtem Hintergrund bei Windows("Daten.xls").Activate 'anpassen da wäre interessant, die Fehlermeldung zu kennen. Deine Angaben lesen sich aber so, als würde die Datei "Daten.xls" nicht gefunden werden. Ist der Name vielleicht ein anderer? Sind beispielsweise Leerzeichen vorhanden? Ist die Pfadangabe richtig? usw. ...
Registriert seit: 09.07.2015
Version(en): 2010
10.07.2015, 13:01
(Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2015, 13:02 von tobestar2702.)
Also die Datei heißt daten.xlsx
Reicht es dann daten.xlsx anzugeben
oder muss ich den kompletten Pfad angeben? C:\Programme\...\daten.xlsx ?
edit:
Fehlermeldung lautet:
Run-time error '9':
Subscript out of range
|