2013-01-23 127 views
1

我正在嘗試創建一個可應用於我的工作表的宏。Excel宏,用於更新其他電子表格中的鏈接

場景: 我有一個工作簿就像是一個摘要頁面。它鏈接到其他工作簿的硬編碼數字。在許多情況下,文件夾已被移動或者表單可能被重命名/刪除等。鏈接最終失敗,並導致許多#REF錯誤。發生這種情況是因爲多人可以操作共享網絡驅動器上的電子表格。

我想通過創建一個安全失效來解決這個問題。實質上,一個「更新」按鈕可將所有更新的引用副本保存到名爲「更新數據」的新工作表中,並將時間戳添加到執行上次更新的時間。只有在參考文件發生變化時,這些數據纔會發生變化。 例如,如果在星期一,單元格A1引用工作簿的單元格A1,並返回值$ 1234.56,則它會將引用存儲在單獨的工作表中。現在,星期二我點擊更新,並且參考A1工作簿已被移動或刪除。我仍然會返回$ 1234.56而不是#REF。最後,有更新失敗的通知會很棒,可能會突出顯示單元格。

感謝您閱讀並提供您的見解。

+0

你會更好地把圍繞如何管理文件的結構..... – brettdj

回答

0

如果你想下去驗證路徑那麼我建議你:

  1. 使用如下代碼如下,以驗證是否每個環節是否完好。此代碼片段可以縮進鏈接文件與「摘要文件」不在同一目錄中的位置
  2. 您可以添加後續部分以更新有效的鏈接工作簿,並跳過錯誤
  3. 如果工作表具有被重命名,但鏈接源是有效的,Excel將提示您選擇一個表來linkk到
  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 
相關問題