【问题标题】:Linking Excel Tables in Access Gives Read-Only Error在 Access 中链接 Excel 表会导致只读错误
【发布时间】:2015-06-11 21:51:20
【问题描述】:

我有几个 Excel 2010 文件映射并链接到 Access 2010 数据库。我需要添加另一个文件,以便映射三个而不是两个。我从外部数据库下的导入和链接选项卡链接了excel文件。这似乎没问题。但是当我运行重新映射excel文件的代码时,它给了我一个运行时错误3027: Database or Object is read only.所有文件或数据库都不是只读的。

这是从新位置(例如,从 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

【问题讨论】:

    标签: excel ms-access vba ms-access-2010


    【解决方案1】:

    您无需删除并重新创建指向 Excel 文件的链接。只需关闭链接表(如果打开)并用新副本替换 Excel 文件。

    当您打开链接表时,它将从新文件中读取。

    【讨论】:

    • 我可以将DeleteObject 替换为关闭它的东西吗?还是比这更复杂?
    • 你不能那样做。只需确保您的应用程序没有打开表或使用它作为源的查询或表单打开。
    • 没有其他东西是开放的,只是重新映射表格。另外-我不是在替换 Excel 文件,而是在尝试映射一个新文件;三个而不是两个。
    • 它实际上并没有标记错误。它只是对错误处理程序起作用。
    • 是的。注释掉该行:On Error GoTo Error_Handler:.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2021-01-15
    • 1970-01-01
    • 2021-06-25
    • 2019-07-10
    相关资源
    最近更新 更多