Ich habe auch schon die Xlodbc.xla geladen, aber es steht immer nur #NV da.
Wenn jemand ein funktionierendes Beispiel posten würde, wäre ich sehr dankbar!
versuch es doch mal mit DAO z.B.:
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q240401&
Gruß
Micha
hier sind 3 beispiele wie ich eine datenbank-abfrage hingekriegt habe: per query, dao und ado (die entsprechenden verweise/bibliotheken müssen eingebunden werden).
du kannst die öffnen-ereignisroutine deines excel-dokuments überschreiben, dass er automatisch bei jedem öffnen der datei erst den pfad deiner datenbank abfrägt und danach eine neue abfrage an die datenbank ausführt (und evtl. noch die daten weiterverarbeitet/einpflegt).
leider hab ich noch rausgefunden wie man schreibend zugreift, d.h. mit sql-insert oder -update-funktionen haben so nicht funktioniert. wenn du das weisst, gib bescheid ;-)
mfg
*****************************************************************
Sub dbaccessquery()
Dim tbmycro As Worksheet
Application.DisplayAlerts = False
Excel.Workbooks.Open ("O:\berichte\projekte\ul-makro\mytable.xls")
ActiveWindow.WindowState = xlMinimized
Set tbmycro = Workbooks("mytable.xls").Worksheets(1)
tbmycro.Activate
With ActiveSheet.QueryTables.Add(Connection:=Array("ODBC;DSN=MS Access 97-Datenbank;DBQ=H:\DATA\Eigene Dateien\access\rmdbtest.mdb;"), Destination:=Range("A1"))
.Sql = "SELECT * FROM `H:\Data\Eigene Dateien\access\rmdbtest`.tbltime tbltime WHERE time>100 ORDER BY time"
.FieldNames = True
.RefreshStyle = xlInsertDeleteCells
.RowNumbers = True
.FillAdjacentFormulas = False
.RefreshOnFileOpen = True
.HasAutoFormat = True
.BackgroundQuery = True
.Refresh BackgroundQuery:=True
.Recordset = DBEngine.OpenDatabase("h:\data\eigene dateien\access\rmdbtest.mdb").OpenRecordset("tbltime")
.Refresh
End With
Excel.Workbooks("mytable.xls").Close True
End Sub
*****************************************************************
Private Const Pfad = "h:\data\eigene dateien\access\dbtest.mdb"
Sub dbaccessDAO()
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i%
Dim app As Access.Application
Set app = CreateObject("Access.Application")
app.OpenCurrentDatabase (Pfad)
Set db = app.CurrentDb
strSQL = "Select * from tbltime where name = 'hans'"
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If rs.RecordCount = 0 Then
MsgBox "Es wurden keine Entsprechungen gefunden."
Exit Sub
End If
ActiveSheet.Range("A1") = "name"
ActiveSheet.Range("B1") = "date"
ActiveSheet.Range("C1") = "client"
ActiveSheet.Range("D1") = "vbez"
ActiveSheet.Range("E1") = "ltype"
ActiveSheet.Range("F1") = "time"
ActiveSheet.Range("G1") = "comment"
ActiveSheet.Range("H1") = "recID"
i = 2
Do While Not rs.EOF
ActiveSheet.Range("A" & i) = rs.Fields("name")
ActiveSheet.Range("B" & i) = rs.Fields("date")
ActiveSheet.Range("C" & i) = rs.Fields("client")
ActiveSheet.Range("D" & i) = rs.Fields("vbez")
ActiveSheet.Range("E" & i) = rs.Fields("ltype")
ActiveSheet.Range("F" & i) = rs.Fields("time")
ActiveSheet.Range("G" & i) = rs.Fields("comment")
ActiveSheet.Range("H" & i) = rs.Fields("recID")
i = i + 1
rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set ws = Nothing
Set db = Nothing
app.Quit acQuitSaveNone
End Sub
*****************************************************************
Private Const Pfad = "h:\data\eigene dateien\access\dbtest.mdb"
Sub dbaccessADO()
Dim oConn As ADODB.Connection
Dim oRS As ADODB.Recordset
Set oConn = CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
Pfad & ";Persist Security Info=False"
Set oRS = oConn.Execute("SELECT * FROM tbltime")
ActiveSheet.Range("A2") = oRS.GetString(adClipString, -1, vbTab)
Set oConn = Nothing
Set oRS = Nothing
End Sub