DetailPage-MSS-KB

Knowledge Base

Artikel-ID: 257819 - Geändert am: Dienstag, 29. Dezember 2009 - Version: 4.6

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt die Verwendung von ActiveX Data Objects (ADO) mit Microsoft Excel-Kalkulationstabellen als Datenquelle. Der Artikel hebt außerdem Excel-spezifische Syntaxprobleme und Einschränkungen hervor. OLAP- und PivotTable-Technologien und andere spezielle Verwendungen von Excel-Daten werden in diesem Artikel nicht behandelt.

Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
303814  (http://support.microsoft.com/kb/303814/DE/ ) Verwenden von ADOX mit Excel-Daten von Visual Basic oder VBA

Weitere Informationen

Einführung

Die Zeilen und Spalten einer Microsoft Excel-Kalkulationstabelle ähneln sehr stark den Zeilen und Spalten einer Datenbanktabelle. Solange Benutzer sich bewusst sind, dass Microsoft Excel kein relationales Datenbankverwaltungssystem ist, und die damit einhergehenden Einschränkungen beachten, macht es oft Sinn, zum Speichern und Analysieren von Daten Excel und seine Tools zu verwenden.

Mit Microsoft ActiveX Data Objects kann eine Excel-Arbeitsmappe behandelt werden, als wäre sie eine Datenbank. Dies wird in diesem Artikel in den folgenden Abschnitten beschrieben: HINWEIS: Die Tests für diesen Artikel wurden mit Microsoft Data Access Components (MDAC) 2.5 auf Microsoft Windows 2000 mit Visual Basic 6.0 Service Pack 3 und Excel 2000 durchgeführt. Dieser Artikel kann nicht im Einzelnen auf die Unterschiede im Verhalten hinweisen oder näher eingehen, die Benutzer bei verschiedenen Versionen von MDAC, Microsoft Windows, Visual Basic oder Excel möglicherweise feststellen.

Herstellen der Verbindung zu Excel mit ADO

ADO kann die Verbindung zu einer Excel-Datendatei mit einem der beiden in MDAC enthaltenen OLE DB-Anbieter herstellen:
  • Microsoft Jet OLE DB-Anbieter -oder-

  • Microsoft OLE DB-Anbieter für ODBC-Treiber

Verwenden des Microsoft Jet OLE DB-Anbieters

Der Jet-Anbieter benötigt nur zwei Angaben, um die Verbindung zu einer Excel-Datenquelle herzustellen: den Pfad, einschließlich des Dateinamens, und die Excel-Dateiversion.

Jet-Anbieter, der eine Verbindungszeichenfolge verwendet
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=Excel 8.0;"
	.Open
End With
				
Anbieterversion: Es ist notwendig, den Jet 4.0-Anbieter zu verwenden; der Jet 3.51-Anbieter unterstützt die Jet ISAM-Treiber nicht. Wenn Sie den Jet 3.51-Anbieter festlegen, wird zur Laufzeit folgende Fehlermeldung angezeigt:
Installierbares ISAM nicht gefunden.
Excel-Version: Legen Sie Excel 5.0 für eine Excel 95-Arbeitsmappe fest (Version 7.0 von Excel) und Excel 8.0 für eine Excel 97-, Excel 2000- oder Excel 2002 (XP)-Arbeitsmappe (Versionen 8.0, 9.0 und 10.0 von Excel).

Jet-Anbieter, der das Dialogfeld "Datenverknüpfungseigenschaften" verwendet

Wenn Sie das ADO-Datensteuerelement oder die Datenumgebung in Ihrer Anwendung verwenden, wird das Dialogfeld Datenverknüpfungseigenschaften angezeigt, um die notwendigen Verbindungseinstellungen zu sammeln.
  1. Wählen Sie auf der Registerkarte Anbieter den Jet 4.0-Anbieter aus; der Jet 3.51-Anbieter unterstützt die Jet ISAM-Treiber nicht. Wenn Sie den Jet 3.51-Anbieter festlegen, wird zur Laufzeit folgende Fehlermeldung angezeigt:
    Installierbares ISAM nicht gefunden.
  2. Gehen Sie auf der Registerkarte Verbindung zu Ihrer Arbeitsmappendatei. Ignorieren Sie die Einträge "Benutzer-ID" und "Kennwort", da diese nicht auf eine Excel-Verbindung zutreffen. (Sie können eine kennwortgeschützte Excel-Datei nicht als Datenquelle öffnen. Mehr Informationen zu diesem Thema finden Sie weiter unten in diesem Artikel.)
  3. Markieren Sie auf der Registerkarte Alle die Option Erweiterte Eigenschaften in der Liste, und klicken Sie anschließend auf Wert bearbeiten. Geben Sie Excel 8.0; ein. Trennen Sie diesen Eintrag mit einem Semikolon (;) von anderen bereits bestehenden Einträgen. Wenn Sie diesen Schritt überspringen, wird Beim Testen der Verbindung eine Fehlermeldung angezeigt, da der Jet-Anbieter eine Microsoft Access-Datenbank erwartet, es sei denn, etwas anderes ist festgelegt.
  4. Gehen Sie zurück zur Registerkarte Verbindung, und klicken Sie auf Verbindung testen. Beachten Sie, dass ein Meldungsfeld angezeigt wird, dass der Vorgang erfolgreich abgeschlossen wurde.
Weitere Verbindungseinstellungen des Jet-Anbieters

Spaltenüberschriften: Es wird standardmäßig davon ausgegangen, dass die erste Zeile Ihrer Excel-Datenquelle Spaltenüberschriften enthält, die als Feldnamen verwendet werden können. Wenn dies nicht der Fall ist, müssen Sie diese Einstellung deaktivieren, ansonsten "verschwinden" die Einträge in der erste Datenzeile und werden als Feldnamen verwendet. Fügen Sie hierzu die optionale Einstellung HDR= zu Erweiterte Einstellungen der Verbindungszeichenfolge hinzu. Standardmäßig lautet die Einstellung HDR=Yes, und muss nicht festgelegt werden. Wenn Ihre Spalten keine Spaltenüberschriften haben, müssen Sie HDR=No festlegen; der Anbieter benennt Ihre Felder F1, F2, usw. Da die Zeichenfolge Erweiterte Eigenschaften jetzt mehrere Werte enthält, muss sie selbst in doppelte Anführungszeichen gesetzt werden, plus ein zusätzliches Paar an doppelten Anführungszeichen, damit Visual Basic erkennt, dass es den ersten Satz an Anführungszeichen als Literalwert behandelt, wie im folgenden Beispiel veranschaulicht (wobei zusätzliche Leerzeichen aus Gründen der Übersichtlichkeit eingefügt wurden).
.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=" " Excel 8.0; HDR=No;" " "
				

Verwenden des Microsoft OLE DB-Anbieters für ODBC-Treiber

Der Anbieter für ODBC-Treiber (in diesem Titel kurz "ODBC-Anbieter" genannt) benötigt nur zwei Angaben, um die Verbindung zu Excel-Datenquellen herzustellen: den Treibernamen sowie Pfad und Dateinamen der Arbeitsmappe.

WICHTIG: Eine ODBC-Verbindung zu Excel ist standardmäßig schreibgeschützt. Die Eigenschaftseinstellung für Ihr ADO-Recordset LockType überschreibt nicht diese Einstellung für die Verbindungsebene. Sie müssen ReadOnly in Ihrer Verbindungszeichenfolge oder Ihrer DSN-Konfiguration auf Falsch setzen, wenn Sie Ihre Daten bearbeiten möchten. Andernfalls wird folgende Fehlermeldung ausgegeben:
Die Operation muss eine aktualisierbare Abfrage verwenden.
ODBC-Anbieter, der eine Verbindungszeichenfolge ohne DSN verwendet
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=C:\MyFolder\MyWorkbook.xls; ReadOnly=False;"
	.Open
End With
				
ODBC-Anbieter, der eine Verbindungszeichenfolge mit einem DSN verwendet
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
	.Provider = "MSDASQL"
	.ConnectionString = "DSN=MyExcelDSN;"
	.Open
End With
				
ODBC-Anbieter, der das Dialogfeld "Datenverknüpfungseigenschaften" verwendet

Wenn Sie das ADO-Datensteuerelement oder die Datenumgebung in Ihrer Anwendung verwenden, wird das Dialogfeld Datenverknüpfungseigenschaften angezeigt, um die notwendigen Verbindungseinstellungen zu sammeln.
  1. Wählen Sie auf der Registerkarte Anbieter die Option Microsoft OLE DB-Anbieter für ODBC-Treiber aus.
  2. Wählen Sie auf der Registerkarte Verbindung den vorhandenen DSN aus, den Sie verwenden möchten, oder wählen Sie Verbindungszeichenfolge verwenden aus. Dadurch wird das Dialogfeld für die standardmäßige DSN-Konfiguration angezeigt, um die notwendigen Verbindungseinstellungen zu sammeln. Vergessen Sie nicht, gegebenenfalls die standardmäßige Schreibschutzeinstellung zu deaktivieren, wie bereits vorher erwähnt.
  3. Gehen Sie zurück zur Registerkarte Verbindung, und klicken Sie auf Verbindung testen. Beachten Sie, dass ein Meldungsfeld angezeigt wird, dass der Vorgang erfolgreich abgeschlossen wurde.
Weitere Verbindungseinstellungen des ODBC-Anbieters

Spaltenüberschriften: Es wird standardmäßig davon ausgegangen, dass die erste Zeile Ihrer Excel-Datenquelle Spaltenüberschriften enthält, die als Feldnamen verwendet werden können. Wenn dies nicht der Fall ist, müssen Sie diese Einstellung deaktivieren, ansonsten "verschwinden" die Einträge in der erste Datenzeile und werden als Feldnamen verwendet. Fügen Sie hierzu die optionale Einstellung FirstRowHasNames= zur Verbindungszeichenfolge hinzu. Standardmäßig lautet die Einstellung FirstRowHasNames=1; hierbei ist 1 = Wahr, und muss nicht festgelegt werden. Wenn Ihre Spalten keine Spaltenüberschriften haben, müssen Sie FirstRowHasNames=0 festlegen; hierbei ist 0 = Falsch. Der Treiber benennt Ihre Felder F1, F2, usw. Diese Option ist im Dialogfeld für die DSN-Konfiguration nicht verfügbar.

Aufgrund eines Fehlers im ODBC-Treiber hat das Festlegen der Einstellung FirstRowHasNames derzeit keine Auswirkungen. Das bedeutet, dass der Excel-ODBC-Treiber (MDAC 2.1 oder höher) die erste Zeile in der festgelegten Datenquelle immer als Feldnamen behandelt. Weitere Informationen zu diesem Fehler bezüglich der Spaltenüberschriften finden Sie in folgendem Artikel der Microsoft Knowledge Base:
288343  (http://support.microsoft.com/kb/288343/DE/ ) Fehler: Der Excel ODBC-Treiber ignoriert "FirstRowHasNames" bzw. die Überschrifteneinstellung
Zu scannende Zeilen: Im Gegensatz zu einer relationalen Datenbank stellt Excel keine ActiveX Data-Objekte (ADO) mit detaillierten Schemainformationen über die enthaltenen Daten bereit. Deshalb muss der Treiber mindestens ein paar Zeilen der vorhandenen Daten scannen, um eine adäquate Schätzung über den Datentyp einer jeden Spalte machen zu können. Die Standardeinstellung für "Zu scannende Zeilen" liegt bei acht (8) Zeilen. Sie können einen Ganzzahlwert von einer (1) bis zu sechzehn (16) Zeilen festlegen, oder Sie können null (0) festlegen, sodass alle vorhandenen Zeilen gescannt werden. Fügen Sie hierzu die optionale Einstellung MaxScanRows= zur Verbindungszeichenfolge hinzu, oder ändern Sie die Einstellung Zu scannende Zeilen im Dialogfeld für die DSN-Konfiguration.

Aufgrund eines Fehlers im ODBC-Treiber hat das Festlegen der Einstellung Zu scannende Zeilen (MaxScanRows) derzeit keine Auswirkungen. Das bedeutet, dass der Excel-ODBC-Treiber (MDAC 2.1 oder höher) immer die ersten 8 Zeilen in der festgelegten Datenquelle scannt, um den Datentyp einer jeden Spalte zu bestimmen.

Weitere Informationen über den Fehler bezüglich der zu scannenden Zeilen sowie eine einfache Problemumgehung für dieses Problem finden Sie in folgendem Artikel der Microsoft Knowledge Base:
189897  (http://support.microsoft.com/kb/189897/DE/ ) Daten werden bei Verwendung des Excel-ODBC-Treibers auf eine Länge von 255 Zeichen gekürzt
Weitere Einstellungen: Wenn Sie Ihre Verbindungszeichenfolge mithilfe des Dialogfelds Datenverknüpfungseigenschaften erstellen, bemerken Sie möglicherweise, dass noch einige andere Erweiterte Eigenschaften-Einstellungen zur Verbindungszeichenfolge hinzugefügt wurden, die nicht zwingend notwendig sind, wie z. B.:
... DefaultDir=C:\WorkbookPath;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;
				
Fehlermeldung "Sortierreihenfolge" im Visual Basic Editor

In der Entwurfsumgebung von Visual Basic mit bestimmten Versionen von MDAC wird möglicherweise folgende Fehlermeldung angezeigt, wenn Ihr Programm zum ersten Mal die Verbindung zu einer Excel-Datenquelle zur Entwurfszeit herstellt:
Die ausgewählte Sortierreihenfolge wird nicht vom Betriebssystem unterstützt.
Diese Meldung wird nur in IDE angezeigt und nicht in der kompilierten Version des Programms. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
246167  (http://support.microsoft.com/kb/246167/DE/ ) PRB: Fehlermeldung bezüglich der Sortierreihenfolge beim ersten Öffnen eines ADODB-Recordsets für eine Excel-XLS

Überlegungen, die für beide OLE DB-Anbieter gelten

Vorsicht bei gemischten Datentypen

Wie bereits erwähnt, muss ADO den Datentyp jeder Spalte im Excel-Arbeitsblatt oder Bereich schätzen. (Zellformatierungseinstellungen in Excel haben darauf keine Auswirkung.) Ein schwerwiegendes Problem kann auftreten, wenn numerische Werte gemischt mit Textwerten in derselben Spalte vorkommen. Sowohl der Jet- also auch der ODBC-Anbieter geben die Daten des Mehrheitstyps zurück, geben jedoch NULL-Werte (leer) für die Minderheit der Datentypen zurück. Wenn beide Datentypen zu gleichen Teilen gemischt in der Spalte vorkommen, bevorzugt der Anbieter numerische Werte gegenüber Text.

Beispiel:
  • Wenn die Spalte fünf (5) numerische Werte und drei (3) Textwerte enthält, gibt der Anbieter in den acht (8) gescannten Zeilen fünf (5) Zahlen und drei (3) Nullwerte zurück.
  • Wenn die Spalte drei (3) numerische Werte und fünf (5) Textwerte enthält, gibt der Anbieter in Ihren acht (8) gescannten Zeilen drei (3) Nullwerte und fünf (5) Textwerte zurück.
  • Wenn die Spalte vier (4) numerische Werte und vier (4) Textwerte enthält, gibt der Anbieter in Ihren acht (8) gescannten Zeilen vier (4) Zahlen und vier (4) Nullwerte zurück.
Wenn Ihre also Spalte gemischte Werte enthält, können Sie Nullwerte nur verhindern, indem Sie numerische Werte in dieser Spalte als Text speichern und sie wenn nötig in der Clientanwendung mithilfe der Visual Basic-Funktion VAL oder einer ähnlichen Funktion zurück in Zahlenwerte zu konvertieren.

Um dieses Problem für schreibgeschützte Daten zu umgehen, aktivieren Sie Importmodus mithilfe der Einstellung "IMEX=1" im Bereich Erweiterte Eigenschaften der Verbindungszeichenfolge. Dies erzwingt die Registrierungseinstellung ImportMixedTypes=Text. Beachten Sie jedoch, dass Updates in diesem Modus möglicherweise unerwartete Ergebnisse zurückgeben. Weitere Informationen zu dieser Einstellung finden Sie in folgendem Artikel der Microsoft Knowledge Base:
194124  (http://support.microsoft.com/kb/194124/DE/ ) PRB: Excel-Werte, die bei Verwendung von DAO-OpenRecordset als NULL zurückgegeben werden
Sie können eine kennwortgeschützte Arbeitsmappe nicht öffnen

Wenn die Excel-Arbeitsmappe durch ein Kennwort geschützt ist, können Sie sie nicht für den Datenzugriff öffnen, selbst wenn Sie das korrekte Kennwort mit Ihren Verbindungseinstellungen eingeben, außer die Arbeitsmappendatei ist bereits in der Microsoft Excel-Anwendung geöffnet. Wenn Sie es versuchen, wird folgende Fehlermeldung angezeigt:
Die Datei konnte nicht entschlüsselt werden.
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
211378  (http://support.microsoft.com/kb/211378/DE/ ) "Datei konnte nicht entschlüsselt werden" bei Kennwortschutz

Abrufen und Bearbeiten von Excel-Daten mit ADO

Dieser Abschnitt behandelt zwei Aspekte der Arbeit mit Ihren Excel-Daten:
  • Auswählen von Daten - und -

  • Ändern von Daten

Auswählen von Daten

Es gibt mehrere Möglichkeiten, Daten auszuwählen, z. B.:

  • Auswählen von Excel-Daten mit Code
  • Auswählen von Excel-Daten mit dem ADO-Datensteuerelement
  • Auswählen von Excel-Daten mit Datenumgebungsbefehlen

Auswählen von Daten mit Code

Ihre Excel-Daten sind in Ihrer Arbeitsmappe in folgender Form enthalten:

  • In einem gesamten Arbeitsblatt
  • In einem benannten Zellbereich auf einem Arbeitsblatt
  • In einem unbenannten Zellbereich auf einem Arbeitsblatt
Festlegen eines Arbeitsblatts

Um ein Arbeitsblatt als Ihre Datenherkunft festzulegen, verwenden Sie den Arbeitsblattnamen, gefolgt von einem Dollarzeichen und umgeben von eckigen Klammern. Beispiel:
	strQuery = "SELECT * FROM [Tabelle1$]"
				
Sie können den Namen des Arbeitsblatts auch mit einem abgeschrägten einzelnen typographischen Anführungszeichen (`) eingrenzen - auf der Taste unterhalb der Tilde (~) zu finden. Beispiel:
	strQuery = "SELECT * FROM `Tabelle1$`"
				
Microsoft bevorzugt eckige Klammern; sie entsprechen der geltenden Konvention für problematische Datenbankobjektnamen.

Wenn Sie das Dollarzeichen und die Klammern oder auch nur das Dollarzeichen weglassen, wird sinngemäß folgende Fehlermeldung angezeigt:
... Das Jet-Datenbankmodul konnte das angegebene Objekt nicht finden.
Wenn Sie das Dollarzeichen verwenden, aber die Klammern weglassen, wird folgende Fehlermeldung angezeigt:
Syntaxfehler in FROM-Klausel.
Wenn Sie versuchen, normale einfache Anführungszeichen zu verwenden, wird folgende Fehlermeldung angezeigt:
Syntaxfehler in Abfrage. Die Abfrage ist unvollständig.
Festlegen eines benannten Bereichs

Um einen benannten Zellbereich als Datenherkunft festzulegen, verwenden Sie den definierten Namen. Beispiel:
	strQuery = "SELECT * FROM EigenerBereich"
				
Festlegen eines unbenannten Bereichs

Um einen unbenannten Zellbereich als Datenherkunft festzulegen, fügen Sie standardmäßige Zeilen/Spalten-Notation für Excel am Ende des Blattnamens in eckigen Klammern an. Beispiel:
	strQuery = "SELECT * FROM [Tabelle1$A1:B10]"
				
Vorsicht beim Festlegen von Arbeitsblättern: Der Anbieter geht davon aus, dass Ihre Datentabelle mit der obersten, ganz links liegenden, nicht leeren Zelle in dem angegebenen Arbeitsblatt beginnt. Das bedeutet, dass Ihre Datentabelle problemlos in Zeile 3, Spalte C beginnen kann. Sie können jedoch z. B. nicht einen Arbeitsblatttitel oberhalb und links der Daten in Zelle A1 eingeben.

Vorsicht beim Festlegen von Bereichen: Wenn Sie ein Arbeitsblatt als Datenherkunft festlegen, fügt der Anbieter neue Datensätze unterhalb der vorhandenen Datensätze in das Arbeitsblatt ein, wie es platztechnisch möglich ist. Wenn Sie einen Bereich festlegen (benannt oder unbenannt), fügt Jet auch neue Datensätze unterhalb der vorhandenen Datensätze in das Arbeitsblatt ein, wie es platztechnisch möglich ist. Wenn Sie jedoch den ursprünglichen Bereich erneut abfragen, bezieht das Ergebnisrecordset die neu hinzugefügten Datensätze außerhalb dieses Bereichs nicht mit ein.

Mit MDAC-Versionen vor Version 2.5 können Sie keine neuen Datensätze jenseits der definierten Grenzen des Bereichs festlegen, wenn Sie einen benannten Bereich festlegen, oder folgende Fehlermeldung wird angezeigt:
Benannter Bereich kann nicht erweitert werden.

Auswählen von Excel-Daten mit dem ADO-Datensteuerelement

Nachdem Sie die Verbindungszeichenfolge für Ihre Excel-Datenquelle im Dialogfeld Eigenschaften für ADO-Datensteuerelemente auf der Registerkarte Allgemein festgelegt haben, klicken Sie auf die Registerkarte Recordsource (Datenherkunft). Wenn Sie "adCmdText" als "CommandType" auswählen, können Sie in das Dialogfeld Befehlstext eine Auswahlabfrage mit der bereits beschriebenen Syntax eingeben. Wenn Sie "adCmdTable" als "CommandType" wählen und den Jet-Anbieter verwenden, zeigt die Dropdownliste die in der gewählten Arbeitsmappe verfügbaren benannten Bereiche und Arbeitsblattnamen an, wobei die benannten Bereiche zuerst aufgelistet werden.

Dieses Dialogfeld fügt das Dollarzeichen ordnungsgemäß an Arbeitsblattnamen an, fügt jedoch nicht die notwendigen eckigen Klammern hinzu. Wenn Sie deshalb einfach einen Arbeitsblattnamen markieren und auf OK klicken, wird später folgende Fehlermeldung angezeigt:
Syntaxfehler in FROM-Klausel.
Sie müssen die eckigen Klammern um den Arbeitsblattnamen manuell hinzufügen. (Dieses Kombinationsfeld kann bearbeitet werden.) Wenn Sie den ODBC-Anbieter verwenden, werden nur benannte Bereiche in dieser Dropdownliste angezeigt. Sie können jedoch einen Arbeitsblattnamen mit den entsprechenden Trennzeichen manuell eingeben.

Auswählen von Excel-Daten mit Datenumgebungsbefehlen

Nachdem Sie die Datenumgebungsverbindung für Ihre Excel-Datenquelle eingestellt haben, erstellen Sie ein neues Objekt des Typs Befehl. Wenn Sie SQL-Anweisung als eine Datenquelle wählen, können Sie eine Abfrage in das Textfeld mithilfe der bereits beschriebenen Syntax eingeben. Wenn Sie Datenbankobjekt als eine Datenquelle, Tabelle in der ersten Dropdownliste auswählen und den Jet-Anbieter verwenden, zeigt die Dropdownliste die in der gewählten Arbeitsmappe verfügbaren benannten Bereiche und Arbeitsblattnamen an, wobei die benannten Bereiche zuerst aufgelistet werden. (Wenn Sie hier einen Arbeitsblattnamen verwenden, müssen Sie nicht wie beim ADO-Steuerelement manuell eckige Klammern um den Arbeitsblattnamen hinzufügen.) Wenn Sie den ODBC-Anbieter verwenden, werden in dieser Dropdownliste nur benannte Bereiche angezeigt. Sie können jedoch manuell einen Arbeitsblattnamen eingeben.

Ändern von Excel-Daten: Bearbeiten, Hinzufügen und Löschen

Bearbeiten

Sie können Excel-Daten mit normalen ADO-Methoden bearbeiten. Recordsetfelder, die Zellen im Excel-Arbeitsblatt entsprechen, die Excel-Formeln (beginnend mit "=") enthalten, sind schreibgeschützt und können nicht bearbeitet werden. Beachten Sie, dass eine ODBC-Verbindung zu Excel standardmäßig schreibgeschützt ist, es sei denn, Sie legen dies in Ihren Verbindungseinstellungen anderweitig fest. Siehe weiter oben unter "Verwenden des Microsoft OLE DB-Anbieters für ODBC-Treiber".

Hinzufügen

Sie können Datensätze zu Ihrer Excel-Datenherkunft hinzufügen, wenn es platztechnisch möglich ist. Wenn Sie jedoch neue Datensätze außerhalb des Bereichs hinzufügen, den Sie ursprünglich festgelegt haben, sind diese Datensätze nicht sichtbar, wenn Sie eine neue Abfrage in der ursprünglichen Bereichsangabe durchführen. Siehe weiter oben unter "Vorsicht beim Festlegen von Bereichen".

Unter bestimmten Umständen, wenn Sie die Methoden AddNew und Update des ADO-Objekts Recordset verwenden, um neue Datenzeilen in eine Excel-Tabelle einzufügen, fügt ADO die Datenwerte möglicherweise in die falschen Spalten in Excel ein. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
314763  (http://support.microsoft.com/kb/314763/DE/ ) KORREKTUR: ADO fügt Daten in die falschen Spalten in Excel ein
Löschen

Es gibt mehr Beschränkungen für das Löschen von Excel-Daten als von Daten aus einer relationalen Datenquelle. In einer relationalen Datenbank bedeutet "Zeile" nur "Datensatz" und kommt auch nur als "Datensatz" vor; in einem Excel-Arbeitsblatt ist das nicht der Fall. Sie können Werte in Feldern (Zellen) löschen. Sie können jedoch nicht:
  1. Einen gesamten Datensatz auf einmal löschen; in einem solchen Fall wird folgende Fehlermeldung angezeigt:
    DISAM unterstützt das Löschen von Daten in einer verknüpften Tabelle nicht.
    Sie können einen Datensatz nur löschen, indem Sie den Inhalt eines jeden einzelnen Feldes löschen.
  2. Den Wert in einer Zelle, die eine Excel-Formel enthält, löschen; in einem solchen Fall wird folgende Fehlermeldung angezeigt:
    Der Vorgang ist in diesem Zusammenhang nicht zugelassen.
  3. Sie können die leere(n) Kalkulationstabellenzeile(n), in der/denen sich die gelöschten Daten befanden, nicht löschen, und Ihr Recordset zeigt weiterhin leere Datensätze an, die diesen leeren Zeilen entsprechen.
Vorsicht beim Bearbeiten von Excel-Daten mit ADO: Wenn Sie Textdaten in Excel mit ADO einfügen, steht vor dem Textwert ein einfaches Anführungszeichen. Dies kann später bei der Arbeit mit diesen neuen Daten zu Problemen führen.

Abrufen der Datenquellstruktur (Metadaten) von Excel

Sie können Daten über die Struktur Ihrer Excel-Datenquelle (Tabellen und Felder) mit ADO abrufen. Die Ergebnisse unterscheiden sich leicht zwischen den beiden OLE DB-Anbietern, obwohl beide mindestens dieselbe kleine Anzahl an hilfreichen Informationsfeldern zurückgeben. Diese Metadaten können mit der Methode OpenSchema des ADO-Objekts Connection abgerufen werden, wodurch ein ADO-Objekt des Typs Recordset zurückgegeben wird. Sie können auch die leistungsstärkere "Microsoft ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX)"-Bibliothek zu diesem Zweck verwenden. Im Falle einer Excel-Datenquelle, in der eine "Tabelle" entweder ein Arbeitsblatt oder ein benannter Bereich und ein "Feld" ein Datentyp aus einer begrenzten Anzahl an generischen Datentypen ist, ist diese zusätzliche Leistung jedoch nicht sinnvoll.

Abfragen von Tabelleninformationen

Von den zahlreichen in einer relationalen Datenbank verfügbaren Objekten (Tabellen, Ansichten, gespeicherte Prozeduren, usw.) bietet eine Excel-Datenquelle nur Tabellenäquivalente, bestehend aus den in der jeweiligen Arbeitsmappe festgelegten Arbeitsblättern und benannten Bereichen. Benannte Bereiche werden als "Tabellen" und Arbeitsblätter als "Systemtabellen" behandelt, und Sie können abgesehen von der Eigenschaft "TABLE_TYPE" nicht viele hilfreiche Tabelleninformationen abrufen. Sie können eine Liste der in der Arbeitsmappe verfügbaren Tabellen mit folgendem Code anfordern:
Set rs = cn.OpenSchema(adSchemaTables)
				
Der Jet-Anbieter gibt ein Recordset mit neun (9) Feldern zurück, von denen er nur vier (4) ausfüllt:

  • table_name
  • table_type ("Tabelle" oder "Systemtabelle")
  • date_created
  • date_modified
Die beiden Datumsfelder für eine gegebene Tabelle zeigen immer denselben Wert an, der der Wert "Zuletzt geändert am" zu sein scheint. D. h. "date_created" ist nicht zuverlässig.

Der ODBC-Anbieter gibt auch ein Recordset mit neun (9) Feldern zurück, von denen er nur drei (3) ausfüllt:

  • table_catalog, der Ordner, in dem sich das Arbeitsblatt befindet.
  • table_name
  • table_type (siehe oben).
Gemäß der ADO-Dokumentation ist es möglich, eine Liste nur aus Arbeitsblättern bestehend abzurufen, z. B. indem Sie die folgenden zusätzlichen Kriterien zur Methode OpenSchema festlegen:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Systemtabelle"))
				
Dies funktioniert nicht für eine Excel-Datenquelle mit MDAC-Versionen höher als 2.0, mit einem der Anbieter.

Abfragen von Feldinformationen

Jedes Feld (Spalte) in einer Excel-Datenquelle entspricht einem der folgenden Datentypen:

  • numerisch (ADO-Datentyp 5, adDouble)
  • Währung (ADO-Datentyp 6, adCurrency)
  • logisch oder boolesch (ADO-Datentyp 11, adBoolean)
  • Datum (ADO-Datentyp 7, adDate, unter Verwendung von Jet; 135, adDBTimestamp, unter Verwendung von ODBC)
  • Text (ein ADO-Datentyp des Typs "ad...Char", wie z. B. 202, adVarChar, 200, adVarWChar o.ä.)
"Numeric_precision" für eine numerische Spalte wird immer als 15 zurückgegeben (die maximale Genauigkeit in Excel); "character_maximum_length" einer Textspalte wird immer als 255 zurückgegeben (die maximale Anzeigebreite, jedoch nicht die maximale Länge von Text in einer Excel-Spalte). Sie können abgesehen von der Eigenschaft data_type nur wenig sinnvolle Feldinformationen abrufen. Sie können eine Liste der in der Arbeitsmappe verfügbaren Felder mit folgendem Code anfordern:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, "Tabellenname", Empty))
				
Der Jet-Anbieter gibt ein Recordset zurück, das 28 Felder enthält, von denen er acht (8) für numerische Felder und neun (9) für Textfelder füllt. Die sinnvollen Felder sind höchstwahrscheinlich folgende:

  • table_name
  • column_name
  • ordinal_position
  • data_type
Der ODBC-Anbieter gibt ein Recordset zurück, das 29 Felder enthält, von denen er zehn (10) für numerische Felder und elf (11) für Textfelder füllt. Die sinnvollen Felder sind dieselben wie oben aufgelistet.

Auflisten von Tabellen und Feldern und ihren Eigenschaften

Visual Basic-Code (wie der in folgendem Beispiel) kann verwendet werden, um Tabellen und Spalten in einer Excel-Datenquelle und die dazugehörigen verfügbaren Informationsfelder aufzulisten. Dieses Beispiel gibt seine Ergebnisse in einem Listenfeld, Liste1, in demselben Formular aus.
Dim cn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim intTblCnt As Integer, intTblFlds As Integer
Dim strTbl As String
Dim rsC As ADODB.Recordset
Dim intColCnt As Integer, intColFlds As Integer
Dim strCol As String
Dim t As Integer, c As Integer, f As Integer
Set cn = New ADODB.Connection
With cn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=" & App.Path & _
"\ExcelSrc.xls;Extended Properties=Excel 8.0;"
	'.Provider = "MSDASQL"
	'.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & App.Path & "\ExcelSrc.xls; "
	.CursorLocation = adUseClient
	.Open
End With
Set rsT = cn.OpenSchema(adSchemaTables)
intTblCnt = rsT.RecordCount
intTblFlds = rsT.Fields.Count
List1.AddItem "Tables:	" & intTblCnt
List1.AddItem "--------------------"
For t = 1 To intTblCnt
	strTbl = rsT.Fields("TABLE_NAME").Value
	List1.AddItem vbTab & "Table #" & t & ":	" & strTbl
	List1.AddItem vbTab & "--------------------"
	For f = 0 To intTblFlds - 1
		List1.AddItem vbTab & rsT.Fields(f).Name & _
vbTab & rsT.Fields(f).Value
	Next
	List1.AddItem "--------------------"
	Set rsC = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, strTbl, Empty))
	intColCnt = rsC.RecordCount
	intColFlds = rsC.Fields.Count
	For c = 1 To intColCnt
		strCol = rsC.Fields("COLUMN_NAME").Value
		List1.AddItem vbTab & vbTab & "Column #" & c & ": " & strCol
		List1.AddItem vbTab & vbTab & "--------------------"
		For f = 0 To intColFlds - 1
			List1.AddItem vbTab & vbTab & rsC.Fields(f).Name & _
vbTab & rsC.Fields(f).Value
		Next
		List1.AddItem vbTab & vbTab & "--------------------"
		rsC.MoveNext
		Next
		rsC.Close
		List1.AddItem "--------------------"
		rsT.MoveNext
Next
rsT.Close
cn.Close
				

Verwenden des Datenansichtsfensters

Wenn Sie eine Datenverknüpfung mit einer Excel-Datenquelle im Visual Basic-Fenster Datenansicht erstellen, werden im Datenansichtsfenster dieselben Informationen angezeigt, die Sie auch wie weiter oben beschrieben programmgesteuert abrufen können. Beachten Sie vor allem, dass der Jet-Anbieter sowohl Arbeitsblätter als auch benannte Bereiche unter "Tabellen" auflistet, wobei der ODBC-Anbieter nur benannte Bereiche anzeigt. Wenn Sie den ODBC-Anbieter verwenden und keine benannten Bereiche festgelegt haben, ist die Liste "Tabellen" leer.

Einschränkungen von Excel

Die Verwendung von Excel als Datenquelle ist durch die internen Limitierungen von Excel-Arbeitsmappen und -Arbeitsblättern eingeschränkt. Darunter fallen u. a.:

  • Arbeitsblattgröße: 65.536 Zeilen x 256 Spalten
  • Zellinhalt (Text): 32.767 Zeichen
  • Blätter in einer Arbeitsmappe: eingeschränkt durch verfügbaren Arbeitsspeicher
  • Namen in einer Arbeitsmappe: eingeschränkt durch verfügbaren Arbeitsspeicher

Informationsquellen

Weitere Informationen über die Verwendung von ADO.NET, um Datensätze in einer Excel-Arbeitsmappe mit Visual Basic.NET abzurufen und zu verändern, finden Sie in einem der folgenden Artikel der Microsoft Knowledge Base:
316934  (http://support.microsoft.com/kb/316934/DE/ ) Verwenden von ADO.NET zum Abrufen und Ändern von Datensätzen in einer Excel-Arbeitsmappe mit Visual Basic .NET
Weitere Informationen finden Sie in folgenden Artikeln der Microsoft Knowledge Base:
295646  (http://support.microsoft.com/kb/295646/DE/ ) Übertragen von Daten aus einer ADO-Datenquelle auf Excel mit ADO
246335  (http://support.microsoft.com/kb/246335/DE/ ) Übertragen von Daten aus einem ADO-Recordset mithilfe der Automatisierung in Excel
247412  (http://support.microsoft.com/kb/247412/DE/ ) Methoden zum Übertragen von Daten von Visual Basic zu Excel
278973  (http://support.microsoft.com/kb/278973/DE/ ) ExcelADO zeigt, wie ADO zum Lesen und Schreiben von Daten in Excel-Arbeitsmappen verwendet wird
318373  (http://support.microsoft.com/kb/318373/DE/ ) Abrufen von Metadaten aus Excel unter Verwendung der Methode "GetOleDbSchemaTable" in Visual Basic .NET

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3
  • Microsoft Visual Basic for Applications 6.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.1 Service Pack 1
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
Keywords: 
kbhowto kbiisam KB257819
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Freigeben
Weitere Supportoptionen
Microsoft Community-Supportforen
Kontaktieren Sie uns direkt
Zertifizierten Partner finden
Microsoft Store
Folgen Sie uns: