3.8k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo, brauch mal wieder eure hilfe ) wäre super wenn es klappen
würde.

Ich habe eine Excel Datei namens Lagerverwaltung, nun möchte ich
aus einer HTML Datei die Daten ins Tabellen Blatt 2 ab A2 einfügen.
( mit einem Makro ) im Makro sollte der Pfad der HTML Datei
angegeben werden mit nahmen der Datei.

als nächstest möchte ich die Daten die in Tabelle 2 A2 eingefügt
worden sind mit der Tabelle1 ab A2 vergleichen. aufbau der
Tabellen sieht in etwar so aus.

Spalte A2:A10000 sind die Artikelnummern
Spalte B2:B10000 sind die Stückzahlen
wobei die Artikelnumern aus Tabelle2 nicht die gleiche reienfolge
hat wie Tabelle1.
nun möchte ich die Stückzahlen aus Tabelle2 in Tabelle1
übernehmen, und die zuordnung soll anhand der Artikelnumer
geschehen.
wenn das geschehen ist soll er mir die Tabelle2 wieder lehren.

Ich hoffe ich habe mich verständlich ausgedrückt...?

wäre super von euch wenn ihr mir dabei helfen köntet !!!!

Schon ein mal recht herzlichen dank an euch !!
gruß nero

PS. Die HTML Datei entsteht durch einen Barcode Scanner.

13 Antworten

0 Punkte
Beantwortet von
sorry leute ich habe etwas verwechselt.....

es ist keine HTML Datei sondern ein XML-Dokument
0 Punkte
Beantwortet von
hat noch keiner eine lösung für mich...? :(

oder habe ich es nicht deutlich beschrieben ??

bin für jede hilfe dankbar !!
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Nero!

Ich glaube der Knackpunkt liegt an Deinen beiden vorhandenen Dateien. Hier hat niemand Lust sich die Dateien, die Du ja bereits hast, nachzubauen, um dann das entsprechende Makro zu erstellen. Wenn Du also Deine beiden Dateien, also die Lagerhaltungsdatei und die XML-Datei, mal z.B. bei http://www.file-upload.net hochladen und uns den Link, den Du erhältst uns hier mitteilen würdest, dann glaube ich, wird auch jemand eine Lösung erarbeiten. Sollten in den beiden Dateien sich so geheime Artikelnummern und Stückzahlen befinden, so dass diese uns nichts angehen dürfen, so ersetze diese bitte durch Dummydaten (es müssen auch keine 10.000 Datensätze sein, 20 reichen auch).

Bis dann,
Oliver
0 Punkte
Beantwortet von
hallo coros, sorry das ich mich jetzt erst melde aber ich hatte ziemlich
viel stress.

anbei eine test Datei mit meiner XML Datei die ich in meiner Lagerliste
importieren möchte und aus dieser den Aktuellen Lager bestand
übernehmen möchte in meiner Tabelle.

http://www.file-upload.net/download-8753702/LAGER.XML.html
http://www.file-upload.net/download-8753704/Test-01.xlsm.html


Danke schon ein mal für eure hilfe.
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Nero!

nachfolgendes Makros sollte das machen, was Du Dir vorgestellt hast. Füge das Makro in ein StandardModul ein und starte es z.B. über eine Befehlsschaltfläche.

Option Explicit

Sub Datenabgleich()
Dim varPath As Variant
Dim wkbQuelldatei As Workbook
Dim wksLagerdaten As Worksheet
Dim wksQuelldaten As Worksheet
Dim rngBereich As Range
Dim lngLastRow As Long
Dim lngRow As Long
Dim strSuche As String

varPath = Application.GetOpenFilename("XML-Dateien (*.xml), *.xml")

If varPath = "" Or varPath = False Then Exit Sub

With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.ErrorCheckingOptions.BackgroundChecking = False
End With

Set wksLagerdaten = ThisWorkbook.Sheets("Lager")
Set wkbQuelldatei = Workbooks.Open(varPath)
Set wksQuelldaten = wkbQuelldatei.Sheets(1)

lngLastRow = wksQuelldaten.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Row
wksLagerdaten.Columns("D:D").NumberFormat = "0"

For lngRow = 3 To lngLastRow
strSuche = wksQuelldaten.Cells(lngRow, 4)

Set rngBereich = wksLagerdaten.Columns("D:D").Find(What:=strSuche, _
LookAt:=xlPart, LookIn:=xlValues, MatchCase:=False)

If Not rngBereich Is Nothing Then
wksLagerdaten.Cells(rngBereich.Row, 7) = wksQuelldaten.Cells(lngRow, 1)
End If

Next

wkbQuelldatei.Close

Set wksLagerdaten = Nothing
Set wkbQuelldatei = Nothing
Set wksQuelldaten = Nothing
Set rngBereich = Nothing

With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.ErrorCheckingOptions.BackgroundChecking = True
.Calculate
End With

End Sub


Bei dem Makro wird zunächst ein Dialogfenster zur Auswahl der XML-Datei geöffnet. Danach werden die Barcodenr. verglichen und die Stückzahlen abgeglichen.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von nero022 Mitglied (179 Punkte)
Hallo Coros, ganz herzlichen dank an dir !!!

das war genau das was ich gesucht habe !!!!
0 Punkte
Beantwortet von
hallo Coros, ist es auch möglich ein verzeichnis pfad anzugeben wo er die datei
auslesen kann...?
und das er sie wenn mann die datei öffnet sich automatisch die daten holte??

Gruß Nero
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Nero!

Nachfolgendr (ungetestet) Code sollte das machen, was Du Dir vorgestellt hast. Fügen den Code in das VBA-Projekt "DieseArbeitsmappe" ein.

Option Explicit

Private Sub Workbook_Open()
Dim varPath As Variant
Dim wkbQuelldatei As Workbook
Dim wksLagerdaten As Worksheet
Dim wksQuelldaten As Worksheet
Dim rngBereich As Range
Dim lngLastRow As Long
Dim lngRow As Long
Dim strSuche As String

'Hier den Pfad und Dateinamen mit Dateiendung eintragen. _
Achtung! Der Pfad und Dateiname gehört zwischen die _
Anführungszeichen
varPath = "C:\Pfad\Dateiname.xml"

With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.ErrorCheckingOptions.BackgroundChecking = False
End With

Set wksLagerdaten = ThisWorkbook.Sheets("Lager")
Set wkbQuelldatei = Workbooks.Open(varPath)
Set wksQuelldaten = wkbQuelldatei.Sheets(1)

lngLastRow = wksQuelldaten.Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Row
wksLagerdaten.Columns("D:D").NumberFormat = "0"

For lngRow = 3 To lngLastRow
strSuche = wksQuelldaten.Cells(lngRow, 4)

Set rngBereich = wksLagerdaten.Columns("D:D").Find(What:=strSuche, _
LookAt:=xlPart, LookIn:=xlValues, MatchCase:=False)

If Not rngBereich Is Nothing Then
wksLagerdaten.Cells(rngBereich.Row, 7) = wksQuelldaten.Cells(lngRow, 1)
End If

Next

wkbQuelldatei.Close

Set wksLagerdaten = Nothing
Set wkbQuelldatei = Nothing
Set wksQuelldaten = Nothing
Set rngBereich = Nothing

With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.ErrorCheckingOptions.BackgroundChecking = True
.Calculate
End With

End Sub


Du musst den Pfad und den Dateinamen noch anpassen.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
super ich danke dir coros !! es geht...!!

kannst du mir noch eins sagen... wenn ich jetzt aus der datei z.b noch mehr daten
übernehmen möchte wo und wie kann ich das machen und was müßte ich noch
ändern...?

gruß nero
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Nero!

Der Bereich, der für das Kopieren der Daten zuständig ist, ist folgende Zeile:
wksLagerdaten.Cells(rngBereich.Row, 7) = wksQuelldaten.Cells(lngRow, 1)
Wenn Du noch weitere Daten kopieren möchtest, dann musst Du diese Zeile kopieren, eine Zeile tiefer einfügen und die Spaltenindexzahlen anpassen. Dabei steht die Zahl 1 für Spalte A, die Zahl 2 für Spalte B usw.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
...