Excel宏来更新其他电子表格中的链接

时间:2013-01-23 22:15:04

标签: excel excel-vba vba

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

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您想沿着验证路径前进,那么我建议您:

  1. 使用下面的代码验证每个链接是否完好无损。此代码隐藏了链接文件与“摘要文件”不在同一目录中的缩进信息
  2. 您可以添加更新有效链接工作簿的后续部分,并且可以跳过错误
  3. 如果工作表已重命名但链接源有效,Excel将提示您选择要连接到的工作表
  4. 这仍然会让人们看到人们在馈纸页中移动数据,特别是如果可以插入或删除行和列。
  5. 预防问题远比故障安全好。最好的选择是在所有送纸器工作簿上使用单个工作表来合并要链接到摘要文件的数据,然后将此工作表完整导入摘要文件。这意味着人们可以
    • 重命名/移动/添加工作表
    • 添加/删除列/行
  6. 不影响合并数据表

    用于识别缺失链接的代码

    '查找以确定源文件与摘要文件不在同一目录中的位置

        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