Clever-Excel-Forum

Normale Version: Importierung von Daten / Preislistenänderung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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,
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.
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
Hola,

verlink doch bitte deine Beiträge in den verschiedenen Foren untereinander, damit niemand doppelt arbeiten muss.

Danke.

Gruß,
steve1da
Hi Tobias,

(09.07.2015, 14:56)tobestar2702 schrieb: [ -> ]Oder soll ich zwei separate Makros dann aufzeichnen?

ja, z.B.
(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?
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.
(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
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. ...
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
Seiten: 1 2