在 Access 中链接 Excel 表出现只读错误

Linking Excel Tables in Access Gives Read-Only Error

我有几个 Excel 2010 文件映射并链接到 Access 2010 数据库。我需要添加另一个文件,以便映射三个而不是两个。我从 导入和 外部数据库 下的 Link 选项卡链接了 excel 文件。好像还可以但是当我 运行 重新映射 excel 文件的代码时,它给我一个 运行 读取文件或数据库的时间错误 3027: Database or Object is read only. None - 仅。

这是从新位置(例如从 X 驱动器到邮件 W 驱动器)重新映射文​​件的代码,这也会添加新的 excel 文件。是否应该在这里添加一些东西让我添加新文件?

Private Sub cmdAcceptPath_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim strPath As String
Dim strFileName As String
Dim strSourceDB As String
Dim strTableName As String
Dim sList As String
Dim gMsgBoxTitle As String
On Error GoTo Error_Handler:

DoCmd.SetWarnings False
strSourceDB = Me.tExcelPath.Value
Set db = CurrentDb
strSQL = "update tblBackendFiles set setting=" & setData(strSourceDB) & " where code='SourceExcel'"
DoCmd.RunSQL strSQL

'-- Verify linked tables by refreshing
strSQL = "select setting, ExcelPath, ExcelRange from tblBackendFiles where code='SourceExcelWB'"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

'Open remapprogress
DoCmd.OpenForm "frmReMapProgress"

sList = ""
rs.MoveFirst
While Not rs.EOF
    strTableName = rs!Setting
    sList = sList & vbNewLine & "Deleting Table: " & strTableName
    Forms!frmReMapProgress.tbProgress = sList
    If TableExists(strTableName) Then
        DoCmd.DeleteObject acTable, strTableName
    End If
    rs.MoveNext
Wend

sList = ""
'-- Relink inventory database
rs.MoveFirst
While Not rs.EOF
    sList = sList & vbNewLine & "Linking Table: " & strTableName
    Forms!frmReMapProgress.tbProgress = sList
    Forms!frmReMapProgress.Refresh
    strTableName = rs!Setting
    strPath = strSourceDB & "\" & rs!ExcelPath
    Debug.Print strPath
    DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, strTableName, strPath, True, rs!ExcelRange
    rs.MoveNext
Wend
rs.Close
MsgBox "Re-Mapping Excel Links is Complete!"

GoTo exit_sub:

'If error occurs
Error_Handler:
    MsgBox Err.number & ": " & Err.Description, vbInformation + vbOKOnly, gMsgBoxTitle

exit_sub:
Set db = Nothing
Set rs = Nothing
DoCmd.SetWarnings True

DoCmd.Close acForm, "frmReMapProgress"
DoCmd.Close acForm, "frmReMapExcel"


End Sub

您不需要删除并重新创建 link 到 Excel 文件。只需关闭 linked table(如果打开)并用新副本替换 Excel 文件。

当您打开 linked table 时,它将从新文件中读取。