ich möchte aus mehreren csv Dateien in einem Verzeichnis jeweils den Mittelwert aus einer Spalte per SQL abfragen. Bislang habe ich mich an einem Beispiel bedient, in dem die Abfrage über eine Schema.ini erfolgt. Da komme ich aber nicht weiter, zwar kann ich für jede abgefragte Datei eine neue Schema.ini erstellen, nur schaffe ich es nicht in der Select from Anweisung einen dynamischen Tabellennamen zu verwenden, der sich aus den einzelnen csv Dateien im Verzeichnis ergibt.
Hier mein bisheriger Code:
Option Explicit
'ADO Treiber für SQL Abfrage einrichten
Const ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
' Pfad für Schema.ini Datei anlegen
Public StrPathToTextFile As String
Sub DateienEinlesen()
'alle *.csv Dateien aus einem Verzeichnis auflisten
Dim objFSO As New Scripting.FileSystemObject
Dim objOrdner As Scripting.Folder
Dim objDatei As Object
Dim objDialog As FileDialog
Dim Zeile, letzteZeile As Long
Dim IDSpalte, IDZeile As Range
Set objDialog = Application.FileDialog(msoFileDialogFolderPicker)
With objDialog
.InitialFileName = "C:\Test\"
.Show
If .SelectedItems.Count = 0 Then
Exit Sub
End If
Set objOrdner = objFSO.GetFolder(.SelectedItems(1))
End With
With Sheets("Zusammenfassung")
.Cells.Clear
Zeile = 2
.Range("A1:C1").Value = Array("ID", "Wert", "Stabw_Wert")
For Each objDatei In objOrdner.Files
'nur csv Dateien listen
If objDatei.Name Like "*.csv" Then
.Range("A" & Zeile).Value = objDatei.Name
Zeile = Zeile + 1
End If
Next objDatei
End With
'ADO Abfrage
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sqlstring As String
sqlstring = objOrdner & "\"
With Sheets("Zusammenfassung")
'ADO Verbindung herstellen
cnt.Open ConnectionString & sqlstring & ";Extended Properties=""text;HDR=No"";"
'sequentielle Abfrage für alle IDs in Spalte A
letzteZeile = Sheets("Zusammenfassung").Cells(Rows.Count, 1).End(xlUp).Row 'zunächst letzte _
_
_
Spalte im Blatt Zusammenfassung nach Abfrage bestimmen
Set IDSpalte = Sheets("Zusammenfassung").Range("A2:A" & letzteZeile) 'Bereich, der _
sequentiell abgearbeitet werden soll definieren
For Each IDZeile In IDSpalte
'Schema.ini Datei mit Importspezifikation anlegen
StrPathToTextFile = objOrdner
Open StrPathToTextFile & "\schema.ini" For Output As #1
Print #1, "[" & IDZeile & "]"
Print #1, "Format=CSVDelimited"
Print #1, "ColNameHeader=false"
Print #1, "decimalsymbol=."
Print #1, "Col1=x long"
Print #1, "Col2=y long"
Print #1, "Col3=Wert double"
Close #1
'Recordset abrufen
rst.Open "SELECT AVG(Wert), StDev(Wert) FROM ['" & IDZeile & "']", cnt, adOpenKeyset, _
_
_
adLockOptimistic
.Range("B2").CopyFromRecordset rst
IDZeile.Value = Left(IDZeile, Len(IDZeile) - 4)
Next IDZeile
'Verbindung schließen
cnt.Close
end with
End Sub
Ich erhalte immer eine Fehlermeldung, "Das MS JET Datenbankmodul konnte das Objekt ... nicht finden. Vielen Dank für eure Hilfe.
Ralf