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, 14: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, 14:56
(Dieser Beitrag wurde zuletzt bearbeitet: 09.07.2015, 14: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, 14: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, 18:02)Rabe schrieb: Hi Tobias,
(09.07.2015, 14: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, 11:01
(Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2015, 11:10 von Rabe.)
Hi Tobias,
(10.07.2015, 08: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, 11: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. ...
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!
Grüße aus Norderstedt, Peter
Registriert seit: 09.07.2015
Version(en): 2010
10.07.2015, 12:01
(Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2015, 12: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
|