Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Symptome
Wenn Sie ein Excel-Arbeitsblatt über ADO und ODBC bearbeiten, wird möglicherweise die folgende Fehlermeldung angezeigt, wenn Sie ein ADO DataControl-Objekt verwenden:
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Wenn Sie ein Recordset-Objekt verwenden, das mit ADO-Code generiert wird, wird möglicherweise die folgende Fehlermeldung angezeigt, wenn Sie ein Excel-Arbeitsblatt über ADO und ODBC bearbeiten:
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Ursache
Dieses Problem tritt auf, wenn Sie versuchen, ein Arbeitsblatt zu bearbeiten, das als ReadOnly gespeichert oder geöffnet wird.
Hinweis
ReadOnly ist die Standardeinstellung für eine ODBC-Verbindung mit Excel mit oder ohne Datenquellennamen (Data Source Name, DSN). Daher muss der Benutzer diese Einstellung immer ändern, um Daten zu bearbeiten.
Beschluss
Verwenden Sie die folgenden Methoden, um dieses Problem zu beheben:
Stellen Sie sicher, dass die LockType-Eigenschaft des Recordset-Objekts nicht auf ReadOnly festgelegt ist.
Stellen Sie sicher, dass die Datei, die Sie öffnen möchten, nicht als ReadOnly gespeichert ist.
Wenn Sie eine Verbindung über einen DSN herstellen, führen Sie die folgenden Schritte aus:
- Öffnen Sie die Systemsteuerung, und wählen Sie dann DEN ODBC-Datenquellenadministrator aus.
- Doppelklicken Sie auf Ihren DSN.
- Wählen Sie im Dialogfeld "ODBC Microsoft Excel Setup" die Option "Optionen" aus.
- Stellen Sie sicher, dass das Kontrollkästchen "ReadOnly" entfernt ist.
Wenn Sie eine DSN-less-Verbindung verwenden, stellen Sie sicher, dass Sie die Option "ReadOnly=0" in die Verbindungszeichenfolge einschließen. Beispiel:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Der Status
Dieses Verhalten ist beabsichtigt.
Mehr Informationen
Schritte zum Reproduzieren des Verhaltens
Erstellen Sie ein neues Standard EXE-Projekt in Visual Basic.
Wählen Sie im Menü "Projekt" die Option "Verweise" aus, und fügen Sie dann einen Verweis auf die Microsoft ActiveX-Datenobjektbibliothek hinzu.
Hinzufügen einer Befehlsschaltfläche zu Form1.
Fügen Sie den folgenden Code zu Form1 hinzu:
Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Private Sub Form_Load() Command1.Caption = "Edit" End Sub Private Sub Command1_Click() Dim DocPath As String DocPath = App.Path & "\Test.xls" Set cn = New Connection Set rs = New Recordset cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1" rs.LockType = adLockOptimistic rs.Open "TB1", cn rs.AddNew rs.Fields(1).Value = "New Value" rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
Speichern Sie die Anwendung.
Erstellen Sie ein neues Excel-Arbeitsblatt, und speichern Sie das Arbeitsblatt dann als Test.xls.
Zeigen Sie im Menü "Einfügen" auf "Name", und wählen Sie dann "Definieren" aus.
Erstellen Sie eine neue Tabelle im Excel-Arbeitsblatt, und benennen Sie dann die Tabelle TB1.
Speichern Sie das Arbeitsblatt im selben Ordner wie die Visual Basic-Anwendung.
Drücken Sie F5, um die Anwendung auszuführen.
Verweise
Weitere Informationen finden Sie unter Office Space: Tipps und Tricks für Skripterstellung in Microsoft-Office-Anwendungen.