Importierung von Daten / Preislistenänderung

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Importierung von Daten / Preislistenänderung
von: Tobias
Geschrieben am: 09.07.2015 15:38:32

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! Smile
Vielen Dank im Voraus und beste Grüße,

Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Beni
Geschrieben am: 09.07.2015 16:52:53
Hallo Tobias
im Beispiel ist Produktnummer in Spalte 1 Name in Spalte 2 und der Preis in Spalte 3
beide Dateien öffnen und das Makro von der Zieldatei aus starten
Gruss Beni

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


Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Tobias
Geschrieben am: 10.07.2015 09:19:18
Hallo Beni,
vielen Dank für deine Antwort. 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?

Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Beni
Geschrieben am: 10.07.2015 11:06:46
Hallo Tobias
ja, in dem Fall sind mehr als zwei offem
Gruss Beni

Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Tobias
Geschrieben am: 10.07.2015 11:14:19
Ich habe lediglich meine Quelldatei, die Datei mit den frischen Daten und meine personal.xlsb offen.
Windows("Daten.xlsx").Activate --- Hier gebe ich den Dateinamen der neuen Preisliste ein?
For wkb = 1 To Workbooks.Count
If Not Workbooks(wkb).Name = ActiveWorkbook.Name Then Set wb = Workbooks(wkb).Sheets(1) ' -- Hier ersetze ich Name durch den Dateinamen meiner Quelldatei ohne .xlsx Endung? Was ist mit .Sheets(1)? Muss mein Sheet auch genauso heißen?
Vielen Dank im Voraus und schon einmal recht herzlichen Dank für deine bisherige Hilfe.
Gruß,
Tobias

Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Beni
Geschrieben am: 10.07.2015 14:50:47
Hallo Tobias
also sind es drei, personal.xlsb wird auch gezählt.
wenn der Name der Quelldatei immer gleich ist, dann den Teil löschen
If Workbooks.Count > 2 Then MsgBox "Es darf nur eine Quelldatei offen sein!", vbCritical, "Datei schliessen": Exit Sub
dann nur
Set wb = Workbooks("DeineQuelldatei").Sheets(1) ' anpassen
Sheets(1) ist der Tabellenindex, die erste von links
Gruss Beni

Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Tobias
Geschrieben am: 10.07.2015 15:28:51
Ich kann Ihnen leider nicht ganz folgen. Hab es jetzt folgendermaßen probiert, aber es funktioniert nicht.

Sub Daten_sammeln()
   Windows("Daten.xlsx").Activate 'anpassen
           Set wb = Workbooks(test.xlsx).Sheets(1) ' Name Quelldatei setzen, da nicht bekannt
   
   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


Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Beni
Geschrieben am: 10.07.2015 15:47:24
Hallo Tobias
ist Spalte1 ProdkteNr, Spalte2 ProduktName, und Spalte3 der Preis?
das Makro muss von der Zieldatei aus gestartet warden, darum,
Windows("Zieldatei.xlsx").Activate 'anpassen

Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Tobias
Geschrieben am: 13.07.2015 12:16:20
Hallo Beni,
genau so ist es!

Bild

Betrifft: AW: Importierung von Daten / Preislistenänderung
von: Beni
Geschrieben am: 14.07.2015 14:07:33
Hallo Tobias
Die Zieldatei als xlsm-Format speicher und dateiname anpassen, dann müsste eigendlich funktionieren
Beni

 Bild

Beiträge aus den Excel-Beispielen zum Thema "In 2 spalten Vorname und Nachname vergleichen"