Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Importierung von Daten / Preislistenänderung
#1
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,
Antworten Top
#2
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.
Antworten Top
#3
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
Antworten Top
#4
Hola,

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

Danke.

Gruß,
steve1da
Antworten Top
#5
Hi Tobias,

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

ja, z.B.
Antworten Top
#6
(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?
Antworten Top
#7
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.
Antworten Top
#8
(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
Antworten Top
#9
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
Antworten Top
#10
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste