1

ワークシートに適用できるマクロを作成しようとしています。

シナリオ: 概要ページのようなワークブックがあります。他のワークブックからハードコーディングされた番号へのリンクがあります。多くの場合、フォルダーが移動されたり、シートの名前が変更されたり、シートが削除されたりします。リンクは最終的に失敗し、多くの #REF エラーが発生します。これは、複数のユーザーが共有ネットワーク ドライブ上のスプレッドシートを操作できるために発生します。

フェイルセーフを作成することで、この問題を解決したいと考えています。基本的に、更新されたすべての参照のコピーを「更新されたデータ」という名前の新しいワークシートに保存し、最後の更新が実行されたときにタイムスタンプを追加する「更新」ボタン。このデータは、参照が変更された場合にのみ変更されます。たとえば、月曜日にセル A1 がワークブックのセル A1 を参照し、値 $1234.56 を返す場合、その参照は別のワークシートに保存されます。さて、火曜日に更新をクリックすると、参照 A1 ワークブックが移動または削除されました。#REF ではなく $1234.56 を返します。最後に、更新が失敗したという何らかの通知があります。これは素晴らしいことであり、セルを強調表示する可能性があります。

読んで洞察を提供してくれてありがとう。

4

1 に答える 1

0

検証パスをたどりたい場合は、次のことをお勧めします。

  1. 以下のようなコードを使用して、各リンクが損なわれていないかどうかを検証します。このコード スニペットは、リンクされたファイルが "Summary FILE" と同じディレクトリにない場所を示しています。
  2. 有効なリンクされたワークブックを更新するフォローアップ セクションを追加すると、エラーがスキップされます。
  3. シートの名前が変更されていてもリンク ソースが有効な場合、Excel はリンク先のシートを選択するように求めます。
  4. これにより、特に行と列を挿入または削除できる場合は、フィーダー シート内でデータを移動する人々にさらされたままになります。
  5. この問題を防ぐことは、フェールセーフよりもはるかに優れています。最適なオプションは、すべてのフィーダー ワークブックで 1 つのシートを使用してデータを統合し、要約ファイルにリンクしてから、このシート全体を要約ファイルにインポートすることです。これは、人々ができることを意味します
    • シートの名前変更/移動/追加
    • 列/行の追加/削除

統合データシートに影響を与えずに

欠落しているリンクを識別するコード

'ソース ファイルがサマリー ファイルと同じディレクトリにない場所を特定しようとします

    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
于 2013-01-23T23:43:23.877 に答える