在工作表名称更改时保留指向Excel的链接

时间:2013-10-24 16:12:15

标签: vba ms-access

我有一个链接表tblREDEIMPORT,它被设置为一个特定的路径,只能通过FSO导入过程以编程方式访问,并覆盖前一天的版本。

但是,虽然.xls链接文件的名称总是相同的,但它每天更改的工作表名称给我一个错误,如215380_REDEFILEIMPORTREPORT_230$不是有效名称,因为那是昨天的工作表name,todays sheetname之前和之后有一组完全不同的数字。

通过链接表管理器,我无法将链接表指向除该表之外的任何内容。如何将链接表路径更改为始终查看工作簿中的第一个(也是唯一的)电子表格,或者至少更改它以将名称动态更新为应指向的工作表?

1 个答案:

答案 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中的链接表将停止工作

BadSheetName.png

但是,我可以按如下方式更新链接表

Current .SourceTableName is: OldSheetName$
The linked table is NOT working.
Updated .SourceTableName is: NewSheetName$
The linked table is working.

结果:

{{1}}