無法變更、新增或刪除 Office Access 2003 或 Access 2002 資料表中連結至 Excel 活頁簿的資料

文章翻譯 文章翻譯
文章編號: 904953 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

在 Microsoft Office Access 2003 或 Microsoft Access 2002 中,您無法變更、新增或刪除資料表中連結至 Microsoft Excel 活頁簿的資料。

此外,當下列任何一個條件成立時,可能就會發生這個問題:
  • 您建立查詢,從連結至 Excel 活頁簿的資料表中擷取資料。
  • 您建立表單,從連結至 Excel 活頁簿的資料表中存取資料。
  • 您使用 DAO 或 ADO,以程式設計方式更新連結至 Excel 活頁簿的資料表。
當您執行查詢以更新所連結之 Excel 活頁簿中的記錄時,收到下列訊息:
Operation must use an updateable query (操作必須使用可更新的查詢)
當您使用 DAO 以程式設計方式更新連結至 Excel 活頁簿的資料表時,收到下列訊息:
Runtime Error '3027' Cannot update.Database or object is read-only. (發生執行階段錯誤 '3027',無法更新。資料庫或物件為唯讀)
當您嘗試在 ADO 中更新連結的資料時,出現相同的訊息,但錯誤代碼可能類似下列:
-2147217911 (80040e09)
當您執行查詢將記錄插入 Excel 活頁簿時,即使 Excel 活頁簿未連結到 Access 資料庫,您也會收到下列錯誤訊息:
Operation must use an updateable query (操作必須使用可更新的查詢)

發生的原因

當下列其中一種情況成立時,就會發生這個預期問題:
  • 您已經安裝 Microsoft Office 2003 Service Pack 2 (SP2) 或 Office 2003 SP2 之後發行的所有 Access 2003 更新。

    如需有關 Microsoft Office 2003 Service Pack 2 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    887616 Office 2003 Service Pack 2 說明
  • 您已經安裝 2005 年 10 月 18 日的 Access 2002 更新 (KB904018)。

    如需有關 Access 2002 更新 (KB904018) 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    904018 Description of the update for Access 2002:2005 年 10 月 18 日
  • 您已經安裝包含 Microsoft Office 2003 Service Pack 2 (SP2)、Office 2003 SP2 之後發行的任何 Access 2003 更新或 2005 年 10 月 18 日 (含) 以後發行之 Access 2002 更新 (KB904018) 的 Access 執行時間應用程式。
    如需有關如何使用 Access 執行時間應用程式加入 Office 更新檔案的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    916176 The wizard uses the run-time files that are included with the release version of Access when you create an installation package for an application in Access 2003 or in Access 2002

其他可行方案

如果要解決這個預期問題,請使用下列其中一種方法。

方法 1:使用 Microsoft Excel

在 Microsoft Excel 中開啟連結的 Excel 活頁簿,然後在其中進行想要的變更。完成並儲存變更後,關閉活頁簿。

方法 2:使用 Access 2003 或 Access 2002

將連結的 Excel 活頁簿匯入 Access,然後對資料進行想要的變更。完成變更後,將資料匯出為 Excel 的 .xls 檔案。

如果要將 Access 的資料表匯出到 Excel,請在 Access 中執行下列程式碼。
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>"
    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
注意 在這個程式碼範例中,取代下列預留位置:
  • <AccessPath>
  • <ExcelPath>
  • <MyQuery>
    <MyQuery> 是您對 Access 資料庫中的資料表執行查詢的預留位置。查詢結果會匯出到 Excel 活頁簿。
  • <WorkSheets>
    <WorkSheets> 是您要匯出結果的 Excel 活頁簿之預留位置。
如果要執行這個程式碼範例,請按下 CTRL+G 以開啟 [即時運算] 視窗,輸入 WorkArounds,然後按下 ENTER。

其他相關資訊

基於法律問題,Microsoft 已經停用 Access 2003 及 Access 2002 中,可讓使用者變更指向 Excel 活頁簿某個範圍之連結資料表中的資料之功能。然而,當您直接在 Excel 活頁簿中進行變更時,所做的變更會出現在 Access 的連結資料表中。

屬性

文章編號: 904953 - 上次校閱: 2006年9月14日 - 版次: 5.1
這篇文章中的資訊適用於:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Access 2002 Runtime
  • Microsoft Office Access 2003 Runtime
關鍵字:?
kbexpertiseadvanced kbdatabase kbtshoot kbprb KB904953
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com