Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ADODB.Connection Fehlermeldung

1,515 views
Skip to first unread message

Clarckkent

unread,
Feb 4, 2009, 7:48:01 AM2/4/09
to
Hallo Zusammen,
wenn ich dieses Marco ausführe bekomme ich folgende Fehlermeldung.
- Fehler beim kompilieren, Benutzerdefinierter type nicht definiert-. Diesen
code habe ich aus einem Forum einfach in ein Modul kopiert. Warscheinlich
fehlt da noch eine Einstellung. Ich weiss nur nicht welche. Vielen DAnk im
Voraus.

Sub GetSheetNames()
Dim cn As ADODB.Connection ' Hier hält das Programm an. Fehlermeldung s.
oben.
Dim cat As ADOX.Catalog
Dim t As ADOX.Table

Set cn = New ADODB.Connection
cn.Open "Provider=MSDASQL.1;Data Source=Excel Files;" _
& "Initial Catalog=X:\1_Business_Blueprint\AP1_Material\KTR 010
Materialstamm\CE_010_neu.xls" 'change path name here
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = cn
For Each t In cat.Tables
Debug.Print t.Name
Next t
Set cat = Nothing
cn.Close
Set cn = Nothing
End Sub
--
Best regards
CK

stefan onken

unread,
Feb 4, 2009, 8:01:14 AM2/4/09
to
On 4 Feb., 13:48, Clarckkent <Clarckk...@discussions.microsoft.com>
wrote:

hallo CK,
dir fehlt ein Verweis. Im VBA-Editor auf Extras/Verweise, dort einen
Haken setzen bei Microsoft ActiveX Data Objects x.x Library.
Meist sind da mehrere Versionen (x.x sind dann verschiedene Zahlen).
Du kannst die höchste nehmen, es sei denn, du willst die Excel-Datei
an jemanden weitergeben. Der hat evtl diese Version nicht und du musst
eine niedrige nehmen.

Gruß
stefan

Clarckkent

unread,
Feb 4, 2009, 9:02:36 AM2/4/09
to
Welche Einstllungen muß ich bei folgender Beschreibung im VBA Editor vornehmen?
Set references to ActiveX Objects 2.x and ADO Ext 2.x for DDL and Security
--
Best regards
CK

stefan onken

unread,
Feb 4, 2009, 9:25:11 AM2/4/09
to
On 4 Feb., 15:02, Clarckkent <Clarckk...@discussions.microsoft.com>
wrote:

> Welche Einstllungen muß ich bei folgender Beschreibung im VBA Editor vornehmen?
> Set references to ActiveX Objects 2.x and ADO Ext 2.x for DDL and Security
> --
> Best regards
> CK
>
hallo CK,
wie beschrieben, gehe in den VBA-Editor (Alt+F11) und dort auf Extras/
Verweise.
Es erscheint ein Dialog. In der Liste findest du die Einträge
Microsoft ActiveX Data Objects 2.8 Library
Microsoft ADO Ext.

bei beiden markierst du das Kästchen davor, dadurch werden sie
aktiviert
Ok, VBA-Editor beenden.

Gruß
stefan

Clarckkent

unread,
Feb 4, 2009, 9:52:01 AM2/4/09
to
Hallo Stafan,
vielen Dank für die Infor. Allerdings bekomme ich immer eine Fehlermeldung
in der Zeile, in der der Phad und Dateiname stehen.

Laufzeitfehler '-2147467259 (800004005):
[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden,
und es wurde kein standardtreiber angegeben.

Hast Du eine Idee?
Ziel: Ich will aus einer geschlossenen Excel Datei alle Tabellenname auslesen.

Gruß
--
Best regards
CK

stefan onken

unread,
Feb 4, 2009, 12:20:59 PM2/4/09
to
On 4 Feb., 15:52, Clarckkent <Clarckk...@discussions.microsoft.com>
wrote:

> Hallo Stafan,
> vielen Dank für die Infor. Allerdings bekomme ich immer eine Fehlermeldung
> in der Zeile, in der der Phad und Dateiname stehen.
>
> Laufzeitfehler '-2147467259 (800004005):
> [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden,
> und es wurde kein standardtreiber angegeben.
>
> Hast Du eine Idee?
> Ziel: Ich will aus einer geschlossenen Excel Datei alle Tabellenname auslesen.
>
hallo CK,
du musst im Code

X:\1_Business_Blueprint\AP1_Material\KTR 010
Materialstamm\CE_010_neu.xls
ersetzen durch den Pfad/Dateinamen zu deiner Datei. Aber bei mir
läufts dann auch nicht, der Provider MSDASQL.1 ist unbekannt.
Probier mal diesen Code (Dateinamen bei DATEI ändern!):

Sub GetSheetNames()
Dim cn As ADODB.Connection

Dim cat As ADOX.Catalog
Dim t As ADOX.Table

Datei = "C:\test\mappe1.xls"


Set cn = New ADODB.Connection

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Datei & _
";Extended Properties=Excel 8.0;"


Set cat = New ADOX.Catalog
Set cat.ActiveConnection = cn
For Each t In cat.Tables

MsgBox Replace(t.Name, "$", "")


Next t
Set cat = Nothing
cn.Close
Set cn = Nothing
End Sub

Bei mir taucht am Ende der Tabellennamen jeweils ein $ auf, das kann
man mit Replace ersetzen.

Übrigens wird die Datei auch mit ADO durchaus geöffnet, denn man kann
auf die Datei, aus der die Tabellennamen ausgelesen werden, während
der Abfrage nicht zugreifen (zumindest bei obigem Code nicht, es gibt
für den Open-Befehl weitere Parameter, wie die Datei zu öffnen ist. Da
kenne ich mich aber weniger gut aus...)

Gruß
stefan

Clarckkent

unread,
Feb 6, 2009, 4:38:01 AM2/6/09
to
Hallo Stefan,
vielen Dank für die Infos. Scheint zu laufen.
Allerdings werden nicht nur die reinen Tabellennamen ausgelesen sondern auch
Sachen wie "Druckbereiche",...
Aber das kriege ich schon irgendwie hin. Nochmals vielen Dank.

Wo und wie lernt man eigentlich solche Sachen? Gibt es spezielle Bücher oder
Kurse darüf?
Gruß

--
Best regards
CK

stefan onken

unread,
Feb 6, 2009, 6:02:00 AM2/6/09
to
On 6 Feb., 10:38, Clarckkent <Clarckk...@discussions.microsoft.com>
wrote:

> Hallo Stefan,
> vielen Dank für die Infos. Scheint zu laufen.
> Allerdings werden nicht nur die reinen Tabellennamen ausgelesen sondern auch
> Sachen wie "Druckbereiche",...
> Aber das kriege ich schon irgendwie hin. Nochmals vielen Dank.
>
> Wo und wie lernt man eigentlich solche Sachen? Gibt es spezielle Bücher oder
> Kurse darüf?
> Gruß
>
> --
> Best regards
> CK
>
hallo CK,
stimmt, Druckbereich werden auch als Table angesehen. es gibt hier
http://support.microsoft.com/kb/257819/de einen Ansatz (OpenSchema),
wie man nur die Tabellennamen ausliest, aber das funktioniert wohl nur
mit älterem Versionen, bei mir (Vista/Office2007) jedenfalls nicht.
ich habe von ADO aber nur rudimentäre Kenntnisse. Ich weis nicht, ob
es eine ADO-Newsgroup gibt , ansonsten würde ich bei der Access-NG
fragen.
Behelfen kann man sich, indem man mit der Funktion InStr() prüft, ob
Druckbereich im "Tabellennamen" vorkommt.

For Each t In cat.Tables

If Not InStr(t.Name, "Druckbereich") > 0 Then


MsgBox Replace(t.Name, "$", "")

End If
Next t

Es gibt für solche Sachen Bücher und Kurse, ich hatte 'VBA lernen
leicht gemacht' oder so ganz am Anfang. Den Rest habe ich mir durch
regelmäßige Beteiligung an dieser NG beigebracht.

Gruß
stefan

0 new messages