tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von tombe
  • 1 Beitrag von tombe
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
840
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MachtNix MachtNix ist offline Rookie
    Registriert seit
    May 2010
    Beiträge
    5
    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 mal
    Geändert von MachtNix (17.05.10 um 14:50 Uhr) Grund: Titel jetzt eindeutiger
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  3. #3
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von tombe Beitrag anzeigen
    Erst mal ne Gegenfrage: Was hat das jetzt mit Visual Basic 6 zu tun
    Weil VBA viel näher bei VB6 wie bei VB.Net ist...
     
    ---------------------------------------------------------------------------------------------------
    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

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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ß Thomas
    Geä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.

  5. #5
    MachtNix MachtNix ist offline Rookie
    Registriert seit
    May 2010
    Beiträge
    5
    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
     

  6. #6
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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ß Thomas
    MachtNix bedankt sich. 
    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.

  7. #7
    MachtNix MachtNix ist offline Rookie
    Registriert seit
    May 2010
    Beiträge
    5
    @ 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
     

  8. #8
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  9. #9
    MachtNix MachtNix ist offline Rookie
    Registriert seit
    May 2010
    Beiträge
    5
    Ich bekomm immer Fehlermeldungen.

    darf ich Dir mal im vertrauen beide Dateien senden.?
     

  10. #10
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Zitat Zitat von MachtNix Beitrag anzeigen
    Ich bekomm immer Fehlermeldungen.

    darf ich Dir mal im vertrauen beide Dateien senden.?
    Klar doch, hab dir ne PN mit meiner eMail Adresse geschickt !!
    MachtNix bedankt sich. 
    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.

  11. #11
    MachtNix MachtNix ist offline Rookie
    Registriert seit
    May 2010
    Beiträge
    5
    Danke Danke...

    Habs gesendet.
     

  12. #12
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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

  1. Problem beim öffnen einer XML mit Excel 2003
    Von RE-DIK im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 09.04.10, 09:17
  2. [C#] Fehler beim Öffnen von Excel-Datei mit
    Von Benschi im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 28.08.08, 15:22
  3. Laufzeitfehler beim Öffnen einer Excel Datei
    Von Vitus im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 20.11.06, 11:11
  4. probleme beim öffnen von excel datein
    Von sheltem im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 27.09.04, 22:50
  5. HILFE : Laufzeitfehler '9' beim Öffnen von EXCEL
    Von ahackert im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 30.03.04, 14:01