Excelmacros来更新其他电子表格的链接

我正在尝试创build一个可以应用于我的工作表的macros。

场景:我有一个像摘要页面的工作簿。 它链接到其他工作簿的硬编码数字。 在许多情况下,文件夹已被移动或表格可能被重命名/删除等。链接最终失败,并导致许多#REF错误。 这是因为多人可以操作共享networking驱动器上的电子表格。

我想通过创build一个故障安全来解决这个问题。 本质上,一个“更新”button可以将所有已更新的引用的副本保存到名为“更新数据”的新工作表中,并将时间戳添加到执行上次更新的时间。 只有在参考文件发生变化时,这些数据才会改变。 例如,如果在星期一,单元格A1引用一个工作簿的单元格A1并返回$ 1234.56的值,则会将引用存储在一个单独的工作表中。 现在,星期二我点击更新,并且参考A1工作簿已被移动或删除。 我仍然会返回$ 1234.56,而不是#REF。 最后,有更新失败的通知会很棒,也许会突出显示单元格。

感谢您阅读并提供您的见解。

如果你想走下validationpath,那么我build议你:

  1. 使用下面的代码来validation每个链接是否完好无损。 此代码片段会缩进链接的文件不在“摘要文件”所在的目录中
  2. 您可以添加后续部分来更新有效的链接工作簿,并跳过错误
  3. 如果工作表已被重命名,但链接源有效,则Excel将提示您select要链接到的工作表
  4. 这仍然让您接触到在送纸器中移动数据的人,尤其是在可以插入或删除行和列的情况下。
  5. 防止这个问题比故障安全好得多 。 最好的方法是在所有的进纸工作簿上使用一张纸来合并要链接到摘要文件的数据,然后将这张纸全部导入到摘要文件中。 这意味着人们可以
    • 重命名/移动/添加工作表
    • 添加/删除列/行

而不会影响综合数据表

代码来识别缺失的链接

'看起来确定源文件不在摘要文件所在的目录中

Dim vLinkArr() Dim lngLink As Long Dim strMsg As String Dim strGoodMsg As String On Error Resume Next vLinkArr = ThisWorkbook.LinkSources On Error GoTo 0 If IsEmpty(vLinkArr) Then Exit Sub For lngLink = 1 To UBound(vLinkArr) If Left$(vLinkArr(lngLink), InStrRev(vLinkArr(lngLink), "\") - 1) <> ThisWorkbook.Path Then If InStr(Left$(vLinkArr(lngLink), InStrRev(vLinkArr(lngLink), "\") - 1), ThisWorkbook.Path) = 0 Then strMsg = strMsg & vLinkArr(lngLink) & vbCrLf Else strGoodMsg = strGoodMsg & vLinkArr(lngLink) & Chr(10) End If Else strGoodMsg = strGoodMsg & vLinkArr(lngLink) & Chr(10) End If Next If strMsg <> vbNullString Then MsgBox strMsg