我有一个链接表tblREDEIMPORT
,它被设置为一个特定的路径,只能通过FSO导入过程以编程方式访问,并覆盖前一天的版本。
但是,虽然.xls链接文件的名称总是相同的,但它每天更改的工作表名称给我一个错误,如215380_REDEFILEIMPORTREPORT_230$
不是有效名称,因为那是昨天的工作表name,todays sheetname之前和之后有一组完全不同的数字。
通过链接表管理器,我无法将链接表指向除该表之外的任何内容。如何将链接表路径更改为始终查看工作簿中的第一个(也是唯一的)电子表格,或者至少更改它以将名称动态更新为应指向的工作表?
答案 0 :(得分:3)
作为DoCmd.TransferSpreadsheet acLink, ...
的替代方法,您可以简单地“克隆”现有的TableDef
对象,调整.SourceTableName
属性,并将更新的TableDef
对象替换为现有的DoCmd.TransferSpreadsheet
对象。这种方法的优点是可以保留现有的文件位置,Excel文档类型等,从而使您免于将这些值硬编码到OldSheetName
语句中的诱惑。
例如,我在Access中有一个名为[LinkedTableInExcel]的链表,它指向Excel文档中名为DCount()
的工作表。我可以通过在VBA立即窗口中使用?DCount("*","LinkedTableInExcel")
2
表达式验证链接表是否正常工作
NewSheetName
现在,如果我在Excel中打开文档并将工作表名称更改为Sub UpdateExcelLinkedTable()
Dim cdb As DAO.Database
Dim tbd As DAO.TableDef, tbdNew As DAO.TableDef
Dim n As Long
Const LinkedTableName = "LinkedTableInExcel"
Set cdb = CurrentDb
Set tbd = cdb.TableDefs(LinkedTableName)
Debug.Print "Current .SourceTableName is: " & tbd.SourceTableName
On Error Resume Next
n = DCount("*", LinkedTableName)
Debug.Print "The linked table is " & IIf(Err.Number = 0, "", "NOT ") & "working."
On Error GoTo 0
Set tbdNew = New DAO.TableDef
tbdNew.Name = tbd.Name
tbdNew.Connect = tbd.Connect
tbdNew.SourceTableName = "NewSheetName$"
Set tbd = Nothing
cdb.TableDefs.Delete LinkedTableName
cdb.TableDefs.Append tbdNew
Set tbdNew = Nothing
Set tbd = cdb.TableDefs(LinkedTableName)
Debug.Print "Updated .SourceTableName is: " & tbd.SourceTableName
On Error Resume Next
n = DCount("*", LinkedTableName)
Debug.Print "The linked table is " & IIf(Err.Number = 0, "", "NOT ") & "working."
On Error GoTo 0
Set tbd = Nothing
Set cdb = Nothing
End Sub
,则Access中的链接表将停止工作
但是,我可以按如下方式更新链接表
Current .SourceTableName is: OldSheetName$
The linked table is NOT working.
Updated .SourceTableName is: NewSheetName$
The linked table is working.
结果:
{{1}}