V tabulkách propojených s excelovými sešity v Accessu nejde měnit, přidávat ani odstraňovat data.
Původní číslo KB: 904953
Příznaky
V aplikaci Microsoft Office Access 2007, Microsoft Office Access 2003 nebo Microsoft Access 2002 nelze změnit, přidat nebo odstranit data v tabulkách, které jsou propojeny se sešitem aplikace Microsoft Excel.
K tomuto chování může dojít také v případě, že platí některá z následujících podmínek:
- Vytvoříte dotaz pro načtení dat z tabulek, které jsou propojené s excelovým sešitem.
- Vytvoříte formulář, který přistupuje k datům z tabulek propojených s excelovým sešitem.
- Rozhraní DAO nebo ADO slouží k aktualizaci tabulek, které jsou propojeny s excelovým sešitem prostřednictvím kódu programu.
Při provádění dotazu na aktualizaci záznamů v propojeném sešitu aplikace Excel se zobrazí následující zpráva:
Operace musí používat aktualizovatelný dotaz.
Při použití rozhraní DAO k programové aktualizaci tabulek, které jsou propojeny se sešitem aplikace Excel, se zobrazí následující zpráva:
Chyba modulu runtime 3027 nelze aktualizovat. Databáze nebo objekt jsou jen pro čtení.
Při pokusu o aktualizaci propojených dat v ADO je zpráva stejná, ale číslo chyby může být podobné následujícímu:
-2147217911 (80040e09)
Když spustíte dotaz pro vložení záznamů do excelového sešitu, zobrazí se následující chybová zpráva, i když sešit aplikace Excel není propojený s databází aplikace Access:
Operace musí používat aktualizovatelný dotaz.
Příčina
K tomuto očekávanému chování dochází při splnění některé z následujících podmínek:
- Používáte Office Access 2007.
- Nainstalovali jste aktualizaci Microsoft Office 2003 Service Pack 2 (SP2) nebo novější nebo všechny aktualizace aplikace Access 2003 vydané po aktualizaci Office 2003 SP2.
- Nainstalovali jste aktualizaci pro Access 2002 (KB904018), která je datována 18. října 2005.
- Nainstalovali jste aplikaci accessového modulu runtime, která obsahuje aktualizaci Microsoft Office 2003 Service Pack 2 (SP2) nebo novější, všechny aktualizace Accessu 2003 vydané po aktualizaci Office 2003 SP2 nebo aktualizaci pro Access 2002 (KB904018), která je datována 18. října 2005 nebo novější.
Řešení
Chcete-li toto očekávané chování obejít, použijte jednu z následujících metod.
Metoda 1: Použití aplikace Microsoft Excel
Otevřete propojený excelový sešit v Microsoft Excelu a proveďte změny v sešitu. Po dokončení změn změny uložte a pak sešit zavřete.
Metoda 2: Použití Office Accessu 2007, Accessu 2003 nebo Accessu 2002
Importujte propojený excelový sešit do Accessu a proveďte změny dat. Po dokončení změn exportujte data jako excelový .xls soubor.
Pokud chcete exportovat tabulku z Accessu do Excelu, spusťte v Accessu následující kód.
Public Sub WorkArounds()
On Error GoTo Leave
Dim strSQL, SQL As String
Dim Db As ADODB.Connection
Set Db = New ADODB.Connection
Db.CursorLocation = adUseClient
Db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=<AccessPath>"
'Note: In Office Access 2007, use the following line of code:
'Db.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=<AccessPath>"
SQL = "<MyQuery>"
CopyRecordSetToXL SQL, Db
Db.Close
MsgBox "Access has successfully exported the data to excel file.", vbInformation, "Export Successful."
Exit Sub
Leave:
MsgBox Err.Description, vbCritical, "Error"
Exit Sub
End Sub
Private Sub CopyRecordSetToXL(SQL As String, con As ADODB.Connection)
Dim rs As New ADODB.Recordset
Dim x
Dim i As Integer, y As Integer
Dim xlApp As Excel.Application
Dim xlwbBook As Excel.Workbook, xlwbAddin As Excel.Workbook
Dim xlwsSheet As Excel.Worksheet
Dim rnData As Excel.Range
Dim stFile As String, stAddin As String
Dim rng As Range
stFile = "<ExcelPath>"
'Instantiate a new session with the COM-Object Excel.exe.
Set xlApp = New Excel.Application
Set xlwbBook = xlApp.Workbooks.Open(stFile)
Set xlwsSheet = xlwbBook.Worksheets("<WorkSheets>")
xlwsSheet.Activate
'Getting the first cell to input the data.
xlwsSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
y = xlApp.ActiveCell.Column - 1
xlApp.ActiveCell.Offset(1, -y).Select
x = xlwsSheet.Application.ActiveCell.Cells.Address
'Opening the recordset based on the SQL query and saving the data in the Excel worksheet.
rs.CursorLocation = adUseClient
If rs.State = adStateOpen Then
rs.Close
End If
rs.Open SQL, con
If rs.RecordCount > 0 Then
rs.MoveFirst
x = Replace(x, "$", "")
y = Mid(x, 2)
Set rng = xlwsSheet.Range(x)
xlwsSheet.Range(x).CopyFromRecordset rs
End If
xlwbBook.Close True
xlApp.Quit
Set xlwsSheet = Nothing
Set xlwbBook = Nothing
Set xlApp = Nothing
End Sub
Poznámka
V tomto příkladu kódu nahraďte následující zástupné symboly:
<AccessPath>
<ExcelPath>
<MyQuery>
<MyQuery> je zástupný symbol pro dotaz, který spustíte pro tabulky v accessové databázi. Výsledek dotazu se exportuje do excelového sešitu.
<Listy>
<Pracovní listy> jsou zástupné symboly pro list v aplikaci Excel, do kterého chcete exportovat výsledek. Pokud chcete spustit tento příklad kódu, stisknutím kombinace kláves CTRL+G otevřete okno Immediate , zadejte WorkArounds a stiskněte klávesu ENTER.
Další informace
Kvůli právním problémům microsoft zakázal v Accessu 2003 a Accessu 2002 funkci, která uživatelům umožňuje měnit data v propojených tabulkách, které ukazují na oblast v excelovém sešitu. Když ale provedete změny přímo v excelovém sešitu, zobrazí se změny v propojené tabulce v Accessu.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro