2Danke
ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
840
840
EMPFEHLEN
-
Hallo,
Ich habe ein für euch mit Sicherheit kleines Problem. Mich bringt es aber langsam aus der Ruhe, da ich mit VB noch nie zu tun hatte.
Ich habe eine csv Datei die aus einer Datenbank heraus erzeugt wird. Die Zeilenanzahl variiert von Monat zu Monat der Rest bleibt gleich.
So die Ausgabe in der csv. Natürlich mit Werten gefüllt. :
0;Artikelnummer;VerkauftMonat;VerkauftVorManat;VerkauftJahr;Artikelbeschreibung;OEM-Nummer
Jetzt habe ich noch eine Excel Datei in der die Artikel ebenfalls auftauchen. Sortiert nach verkaufter Anzahl. Ich möchte wenn die Excel Datei geöffnet wird diese automatisch sich die csv-Datei nimmt und die Verkauft-Werte zur jeweiligen Artikelnummer in die dazugehörenden Felder der Excel einträgt.
Ich habe schon mal angefangen und aus anderen threads teile zusammengesucht und selbst ein wenig probiert.
Modul1 Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
Public arrDaten() As String Sub Main() Dim ReadLine As String Dim Zähler As Long Dim Dummy() As String Dim Datei As Integer Dim i As Long Datei = FreeFile Open "C:\Temp\PREIS11.CSV" For Input As #Datei Zähler = 1 Do ReDim Preserve arrDaten(0 To 8, 1 To Zähler) Line Input #Datei, ReadLine If ReadLine <> "" Then Dummy = Split(ReadLine, ";") For i = 0 To 8 arrDaten(i, Zähler) = Dummy(i) Next Zähler = Zähler + 1 End If Loop Until EOF(Datei) Close #Datei End Sub
Worksheet_Change Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long Dim AktuelleZeile As Long AktuelleZeile = Target.Row If Target.Column = 1 Then For i = 1 To UBound(arrDaten, 2) If UCase(CStr(arrDaten(1, i))) = UCase(CStr(Target.Value)) Then Worksheets(1).Cells(AktuelleZeile, 2) = arrDaten(3, i) Worksheets(1).Cells(AktuelleZeile, 3) = arrDaten(4, i) Worksheets(1).Cells(AktuelleZeile, 4) = arrDaten(5, i) Worksheets(1).Cells(AktuelleZeile, 5) = arrDaten(6, i) Worksheets(1).Cells(AktuelleZeile, 6) = arrDaten(7, i) Exit For End If Next End If End Sub
Workbook_Open Code:
Code :1 2 3 4 5
Private Sub Workbook_Open() Main End Sub
Vieleicht kann mir einer von euch weiter helfen.
Vielen Lieben Dank schon malGeändert von MachtNix (17.05.10 um 14:50 Uhr) Grund: Titel jetzt eindeutiger
-
17.05.10 15:56 #2
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Erst mal ne Gegenfrage: Was hat das jetzt mit Visual Basic 6 zu tun
Warum importierst/kopierst du die zweite Datei nicht einfach in ein separates Blatt in Excel und verknüpfst sie dann mit SVERWEIS ?Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
17.05.10 16:29 #4
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Gehört Excel deshalb nicht doch in den Bereich "Office Anwendungen" Egal, wie auch immer.
Hier noch eine andere Lösung:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Sub Anzahl() Dim Dummy() As String Datei = FreeFile Open "C:\datei2.csv" For Input As #Datei Do Line Input #Datei, ReadLine If ReadLine <> "" Then Dummy() = Split(ReadLine, ";") Set nr = Worksheets(1).Range("B:B").Find(Dummy(0), LookIn:=xlValues) Cells(nr.Row, 1) = Dummy(1) End If Loop Until EOF(Datei) Close End Sub
Bei mir wurden damit alle Stückzahlen aus der Datei "datei2.csv" in die aktuelle geöffnete Datei eingetragen. Den Dateinamen und die Spaltennummern musst du halt noch für deine Datei anpassen.
Gruß ThomasGeändert von tombe (17.05.10 um 16:38 Uhr)
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Hallo.
Erstmal vielen Dank für eure Antwort. Ja Ihr habt recht bei Office-Anwendungen wäre wirklich besser gewesen. Asche auf mein Haupt.
@ tombe
In welchen Teil hast Du den Code eingesetzt oder gegen Welchen getauscht. Im Modul?
Ich habe sogut wie null Ahnung von VB also Sorry falls mal ganz blöde Fragen von mir kommen.
LG
-
18.05.10 08:20 #6
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Hallo,
deinen Code habe ich komplett gelöscht (wußte auch nicht was damit nicht funktioniert).
Du kannst mein Beispiel entweder (wie oben) als eigenständige Prozedur in einem Modul speichern und dann beim Öffnen der Datei (manuell) starten oder du gibst es gleich bei der Prozedur "Workbook_Open" ein. Diese wird dann immer beim Starten ausgeführt und deine Stückzahlen aktualisiert.
Habe das Ganze aber nochmal verändert:
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Dim Dummy() As String 'zuerst die Datei "datei1.csv" einlesen. Datei = FreeFile Open "C:\datei1.csv" For Input As #Datei zeile = 1 Do Line Input #Datei, ReadLine If ReadLine <> "" Then Dummy() = Split(ReadLine, ";") Cells(zeile, 1) = Dummy(0) Cells(zeile, 2) = Dummy(1) Cells(zeile, 3) = Dummy(2) Cells(zeile, 4) = Dummy(3) Cells(zeile, 5) = Dummy(4) Cells(zeile, 6) = Dummy(5) Cells(zeile, 7) = Dummy(6) zeile = zeile + 1 End If Loop Until EOF(Datei) Close 'dann die Datei "datei2.csv" einlesen und die Stückzahlen aktualisieren Datei = FreeFile Open "C:\datei2.csv" For Input As #Datei Do Line Input #Datei, ReadLine If ReadLine <> "" Then Dummy() = Split(ReadLine, ";") Set nr = Worksheets(1).Range("B:B").Find(Dummy(0), LookIn:=xlValues) 'damit wird der aktuelle Wert "VerkauftMonat" in die Spalte "VerkauftVormonat" übertragen 'Cells(nr.Row, 4) = Cells(nr.Row, 3) Cells(nr.Row, 3) = Dummy(1) End If Loop Until EOF(Datei) Close
Da als Vorlage ja eine CSV Datei verwendet wird und in dieser kein Makro gespeichert werden kann, wird obiger Code in einer Excel Datei gespeichert und ausgeführt. Es wird als erstes die Datei "datei1.csv" geöffnet und in das Tabellenblatt eingelesen. Dann wird die Datei "datei2.csv" geöffnet, eingelesen und die neuen Stückzahlen eingetragen.
Gruß ThomasSollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
@ tombe
Einen Riesen Dank für Deinen Einsatz. In einem Punkt haben wir glaube ich beide aneinander vorbeigeredet.
Die Excel-Datei die aktualisiert werden soll ist eine Datei die bereits besteht und nur mit den Daten aus einer Datenbank aktualisiert werden. Die Daten aus der Datenbank werden als csv-file exportiert und müssen dann in der bestehenden xls-Datei aktualisiert werden.
Aber das sollte ja nichts an Deinem code ändern oder?
LG
-
18.05.10 08:42 #8
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ok, dann habe ich wirklich was falsch verstanden.
Wenn bei einer bestehenden Excel Datei nur die Stückzahlen neu eingetragen werden sollen, reicht dieser Code:
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Datei = FreeFile Open "C:\datei2.csv" For Input As #Datei Do Line Input #Datei, ReadLine If ReadLine <> "" Then Dummy() = Split(ReadLine, ";") Set nr = Worksheets(1).Range("B:B").Find(Dummy(0), LookIn:=xlValues) 'damit wird der aktuelle Wert "VerkauftMonat" in die Spalte "VerkauftVormonat" übertragen 'Cells(nr.Row, 4) = Cells(nr.Row, 3) Cells(nr.Row, 3) = Dummy(1) End If Loop Until EOF(Datei) Close
Geändert von tombe (18.05.10 um 09:11 Uhr)
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Ich bekomm immer Fehlermeldungen.

darf ich Dir mal im vertrauen beide Dateien senden.?
-
18.05.10 09:18 #10
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Danke Danke...
Habs gesendet.
-
18.05.10 15:33 #12
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Mir hat das was noch nicht gefallen und zwar das die zu öffnende Datei immer an einem bestimmten Platz mit einem bestimmten Namen vorhanden sein muss. Habe deshalb noch einen "Datei öffnen" Dialog eingebaut:
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Dim Dummy() As String datei = FreeFile dateiname = Application.GetOpenFilename("CSV-Dateien (*.csv), *.csv,Text-Dateien (*.txt), *.txt") If dateiname = False Then Exit Sub Else Open dateiname For Input As #datei End If Do Line Input #datei, ReadLine If ReadLine <> "" Then Dummy() = Split(ReadLine, ";") Set nr = Worksheets(1).Range("D:D").Find(Dummy(6), LookIn:=xlValues) If Not nr Is Nothing Then Cells(nr.Row, 1) = Format(Dummy(3), "Standard") Cells(nr.Row, 2) = Format(Dummy(4), "Standard") Cells(nr.Row, 3) = Format(Dummy(5), "Standard") End If End If Loop Until EOF(datei) Close
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
Ähnliche Themen
-
Problem beim öffnen einer XML mit Excel 2003
Von RE-DIK im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 09.04.10, 09:17 -
[C#] Fehler beim Öffnen von Excel-Datei mit
Von Benschi im Forum .NET CaféAntworten: 2Letzter Beitrag: 28.08.08, 15:22 -
Laufzeitfehler beim Öffnen einer Excel Datei
Von Vitus im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 20.11.06, 11:11 -
probleme beim öffnen von excel datein
Von sheltem im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 27.09.04, 22:50 -
HILFE : Laufzeitfehler '9' beim Öffnen von EXCEL
Von ahackert im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 30.03.04, 14:01





Zitieren



Login





