Excel aus CSV-Datei beim Öffnen aktualisieren

MachtNix

Grünschnabel
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:
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:
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:
Private Sub Workbook_Open() 

    Main 

End Sub



Vieleicht kann mir einer von euch weiter helfen.
Vielen Lieben Dank schon mal
 
Zuletzt bearbeitet:
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 ?
 
Gehört Excel deshalb nicht doch in den Bereich "Office Anwendungen" Egal, wie auch immer.

Hier noch eine andere Lösung:

Code:
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ß Thomas
 
Zuletzt bearbeitet:
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
 
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:

Visual Basic:
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ß Thomas
 
@ 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
 
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:

Visual Basic:
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
 
Zuletzt bearbeitet:
Zurück