*.csv in excel einlesen bzw. suchen

Nun noch mal zusammen gefasst, damit ich Dein Projekt richtig verstehe:

Du willst die CSV-Datei in eine Excel-Datei einlesen (das sollte ja nicht so schwer sein), und dann eine Funktion programmieren, bei der nach Eingabe der Artikelnummer der Rest des Datensatzes erscheint. Habe ich das richtig verstanden?

richtig :)

Und das ganze soll innerhalb von Excel ablaufen? Da kannst Du dann doch eigentlich nur eine Suche machen, denn Excel ist ja keine Datenbank, in der man Felder indizieren kann. Um eine Suche zu machen, da würde ich empfehlen, das ganze einmal manuell durchzuspielen, und dabei den Makrorecorder mit laufen zu lassen. Der erzeugt Dir dann eine VBA-Funktion, die Du entsprechend abwandeln könntest.

Ich hoffe, das hilft Dir erstmal weiter (vorausgesetzt, ich habe richtig verstanden, was Du eigentlich vor hast).

Um eine richtige Artikeldatenbank aufzubauen, ist Excel naturgemäß nur bedingt geeignet, da Excel nun mal eine Tabellenkalkulation, und kein Datenbank-Programm ist, Da müsste man dann z.B. Access einsetzen.

Grüsse
ronaldh

hm .. mit der suche is mir eigentlich auch schon eingefallen aber so richtig umsetzen konnt ich es nicht ..

es hat ja schon einer mal in der arbeit des gemacht.. blöderweise hat der scho vor längerer zeit gekündigt und die programmierteile gelöscht ..

ich hätt ja eine datei die so aufgebaut is (die eben von ihm stammt).. aber ich komm da nur nicht an die makros/vb ran -.- zum teufel

ich hätt ja eher gedacht an sql in VB ^^
aber des geht ja net .. des wäre ja am einfachsten
 
ich bedanke mich erstmals bei dir zvoni für deine mühe :)

leider bringt der mir einen fehler

Fehler beim Kompilieren, Variable nicht defniert
ReDim Preserve arrDaten(0 To 3, 1 To Zähler)

so richtig muss ich mich erstmals in dein programm einarbeiten ^^

Seltsam! Ich habe die Variable extra in einem Modul Public deklariert. Kannst du mal im VB-Editor nachschauen, ob auch alles da ist/am richtigen Platz?
 
Man kann Excel Dateien per SQL in VB abfragen.
In Deinem Fall würde ich allerdings schon gleich die CSV per SQL abfragen.
Ich wollte dazu mal ein Tutorial machen, ist nämlich etwas komplexer... da gibt es einige Feinheiten zu beachten.


Beispiel für Excel:

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\DeineXLSDatei.xls;" & _
"Extended Properties=""Excel 8.0;"""


rs.Open "Select id, datum from [Tabelle1$]", cn, adOpenStatic, adLockOptimistic

Hierbei ist [Tabelle1$] der Name des Tabellenblattes



Für die SQL CSV Kombination wird es ein wenig komplexer... dazu solltest Du Dich mit der schema.ini auseinandersetzen.

myProvider = "Microsoft.Jet.OLEDB.4.0"
PathtoTextFile = App.Path

cn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & ";" & _
"Extended Properties=""text;HDR=YES;FMT=Delimited(;)"""

Rs.Open ("Select * from DeineTXTDatei.txt WHERE id>" & Abfrage_id & ";"), cn2, adOpenKeyset, adLockOptimistic

Hierbei gilt es zu beachten, daß HDR für Header steht... also ob Feldnamen beschriftet sind....



Genauer und umfangreicher kann man das nur in einem richtigen tutorial erklären... Werde im Laufe der nächsten Zeit mal sowas machen...
 
Seltsam! Ich habe die Variable extra in einem Modul Public deklariert. Kannst du mal im VB-Editor nachschauen, ob auch alles da ist/am richtigen Platz?

ich seh halt nur nicht dass des deklariert wird am anfang mit Dim ..

vll. erklärst mir kurz das bedeuten soll?
ReDim Preserve arrDaten(0 To 3, 1 To Zähler)

danke:)
gruß
anulika
 
ich seh halt nur nicht dass des deklariert wird am anfang mit Dim ..

Die Deklaration der Variablen ist in einem separaten Modul als Public, müsste also Workbook-weit gelten. Ist das Modul noch da?

vll. erklärst mir kurz das bedeuten soll?
ReDim Preserve arrDaten(0 To 3, 1 To Zähler)

danke:)
gruß
anulika

dynamisches Vergrössern des Daten-Arrays, je nachdem wieviel Zeilen in der CSV sind.
"Preserve" dient dazu bereits vorhandene Daten in den bisherigen Feldern zu erhalten.

OK, Änderungs-Vorschlag. Gehe in Modul1 und erzeuge unterhalb von "Public arrDaten() as string" eine "Sub Main".
Kopiere den kompletten Code aus Workbook_Open in die Sub Main (in Workbook_Open danach natürlich löschen)

In die Workbook_Open schreibst du dann als einzige Code-Zeile "Main" hinein (Wenn das Workbook geöffnet wird, soll als allererstes "Main" ausgeführt werden. Damit sollte es keine Probleme mehr geben.
 
Zuletzt bearbeitet:
Die Deklaration der Variablen ist in einem separaten Modul als Public, müsste also Workbook-weit gelten. Ist das Modul noch da?



dynamisches Vergrössern des Daten-Arrays, je nachdem wieviel Zeilen in der CSV sind.
"Preserve" dient dazu bereits vorhandene Daten in den bisherigen Feldern zu erhalten.

OK, Änderungs-Vorschlag. Gehe in Modul1 und erzeuge unterhalb von "Public arrDaten() as string" eine "Sub Main".
Kopiere den kompletten Code aus Workbook_Open in die Sub Main (in Workbook_Open danach natürlich löschen)

In die Workbook_Open schreibst du dann als einzige Code-Zeile "Main" hinein (Wenn das Workbook geöffnet wird, soll als allererstes "Main" ausgeführt werden. Damit sollte es keine Probleme mehr geben.

ne ist kein Modul vorhanden, daher wahrscheinlich auch der Fehler :)
 
ne ist kein Modul vorhanden, daher wahrscheinlich auch der Fehler :)

Seltsam, habe eben nochmal bei mir nachgeschaut. Bei mir ist da. Egal, ich gebs dir jetzt so.

die Workbook_Open sieht jetzt so aus:
Code:
Private Sub Workbook_Open()

    Main

End Sub

Im Projektfenster nen Rechstclick - Einfügen - Modul
In dieses Modul folgenden Code reinkopieren:
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
    
    'ToDo --> OpenFile-Dialog
    Open DieseArbeitsmappe.Path & "\20194.csv" For Input As #Datei
    
    Zähler = 1
    
    'On Error Resume Next
    
    Do
    
        ReDim Preserve arrDaten(0 To 3, 1 To Zähler)
        
        Line Input #Datei, ReadLine
        
        If ReadLine <> "" Then
            
            Dummy = Split(ReadLine, vbTab)  'ACHTUNG: Anstatt vbTab kann hier auch ";" stehen
            
            For i = 0 To 3
            
                arrDaten(i, Zähler) = Dummy(i)
            
            Next
            
            Zähler = Zähler + 1
    
        End If
    
    Loop Until EOF(Datei)
    
    Close #Datei

End Sub

Die Worksheet_Change sieht so aus:
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(0, i)
                Worksheets(1).Cells(AktuelleZeile, 3) = arrDaten(2, i)
                Worksheets(1).Cells(AktuelleZeile, 4) = arrDaten(3, i)
            
                Exit For
                
            End If
            
        Next
    
    End If
    
End Sub
 
Danke schön :suspekt:

er zeigt mir zwar jetzt keine Fehler mehr an, aber durchführen tuts er trotzdem nicht ..

wo genau tust du des beschreiben, dass wenn ich die herstellernr eingebe der rest erscheint? ..

verlier grad ein bisschen den überblick :)
 
Danke schön :suspekt:

er zeigt mir zwar jetzt keine Fehler mehr an, aber durchführen tuts er trotzdem nicht ..

wo genau tust du des beschreiben, dass wenn ich die herstellernr eingebe der rest erscheint? ..

verlier grad ein bisschen den überblick :)

Der Code wertet nur Eingaben aus, welche in Spalte A stattfinden, alle anderen Spalten werden ignoriert.

Das wird mit dem

If Target.Column = 1 Then

gesteuert

Gib mal nen gültigen Herstellercode in Zelle A1 ein.

Bei
Worksheets(1).Cells(AktuelleZeile, 2) = arrDaten(0, i)
Worksheets(1).Cells(AktuelleZeile, 3) = arrDaten(2, i)
Worksheets(1).Cells(AktuelleZeile, 4) = arrDaten(3, i)

wird gesagt, wohin er etwas schreiben soll, wenn er was findet.
 
Zurück