2017-03-29 18 views
0

VBAを使用してリンク内の特定のテキストに基づいてExcelのリンクを更新するにはどうすればよいですか? オフィスを利用する2016VBAを使用してリンク内の特定のテキストに基づいてExcelのリンクを更新するにはどうすればよいですか?

私はそれぞれの場所に独立したサーバーを持つ40の場所を持っています。

ファイル名はすべて、各場所で同じで、同じフォルダに保存され、場所名のみが異なります。例えば

Store 1\Schedules\2017\04_01_17.xlxb 
Store 2\Schedules\2017\04_01_17.xlxb 
Store 3\Schedules\2017\04_01_17.xlxb 

各場所は、各年の週だけでなく、いくつかの前の年のスケジュールを持っています。

問題は、04_01_17週のデータを取得する場合は、リンクを1つずつ編集して、これらのファイルのそれぞれに到達するマスターリキャップファイルを操作する必要があることです。

ファイル全体を有効にする場合は、リンクされたすべてのファイルを1年全体および数年前にプルし、完了するまでに数時間かかることがあります。

私が探していたのは、リンクに含まれているテキストを要求し、一致したすべてのファイルを取得するVBAコードでした。例

"Contains" 
Answer=04_01_17 

については

アドバンス

に感謝

ブラッド

答えて

0

は以下のこれらの2つのサブルーチンは、操作/ファイル内のリンクを表示する方法を示しています。 あなたが探している重要な部分は、ActiveWorkbook.LinkSources(xlExcelLinks)で、リンクのリストで配列を取得し、ActiveWorkbook.ChangeLinkにリンクを変更します。

Sub gen_links() 
aLinks = ActiveWorkbook.LinkSources(xlExcelLinks) 
If Not IsEmpty(aLinks) Then 
    For i = 1 To UBound(aLinks) 
     MsgBox "Link " & i & ":" & Chr(13) & aLinks(i) 
    Next i 
End If 
End Sub 

Sub swap_links1() 
aLinks = ActiveWorkbook.LinkSources(xlExcelLinks) 
If Not IsEmpty(aLinks) Then 
    For i = 1 To UBound(aLinks) 
    If aLinks(i) = "C:\tests\2017(1)\Test1.xlsx" Then 
     ActiveWorkbook.ChangeLink "C:\tests\2017(1)\Test1.xlsx", "C:\tests\2017(2)\Test2.xlsx", xlExcelLinks 
    End If 
    If aLinks(i) = "C:\tests\2017(2)\Test2.xlsx" Then 
     ActiveWorkbook.ChangeLink "C:\tests\2017(2)\Test2.xlsx", "C:\tests\2017(1)\Test1.xlsx", xlExcelLinks 
    End If 
    MsgBox "Link " & i & ":" & Chr(13) & aLinks(i) 
    Next i 
End If 
End Sub 

ChangeLink documentation
LinkSources documentation

は、あなたはすべての可能なオプションの場合、テストを構築する、またはそれ以上の分別、変数を作成し、IF-ないテストを行うことで、これを利用することができます。例えば。

My_Store_Name = "Store 1" 
My_Year_Name = "2017" 
My_File_Name = "04_01_17" 
My_Test_file = My_Store_Name & "\Schedules\" & My_Year_Name & "\" & My_File_Name & ".xlxb" 
If aLinks(i) <> My_Test_file Then 
+0

上記の両方を試しました。それぞれが毎回店舗を変えてポップアップしてくれました。しかし、何も更新されていない、私はすべての場所を通過するために "OK"を40回ヒットする必要があった。私は場所ごとに1つのファイルだけを見ていたテストファイルでこれを実行しました。もし私がマスターファイルでそれを実行したとすれば、ファイル内でいつでもどこにいても "OK"を選択してリンクする必要があると私は信じています。ファイルを更新する必要があるかどうかをファイルが尋ねる方法を探します。 –

+0

例は*の例として提供されています*。あなたは自分の目的のためにコードを適合させることを意図しています。フォローアップのための公式文書へのリンクが提供されています。あなたはリンクを更新する方法を尋ねました - 答えました。あなたはどのリンクを更新する必要があるかをテストする方法を尋ねました。ユーザー入力を取得する方法を知りたい場合は、これを行うさまざまな方法があります。質問3の3になります。これは、回答の2番目の部分で既に部分的に回答しています。テスト文字列。 – Alan

+0

たとえば、ワークシート内のセルに格納された位置を持つことができます。この場合、My_file_nameはセル参照を指します。ワークシートにフォームコントロールを含めることができます。この場合、変数はコントロールをポイントします。入力ボックス(この例ではmsgboxに似ています)を使用して、名前をポップアップして取得することができます。オンザフライでのユーザーのやりとりは複雑な問題であり、これを達成する方法については非常に具体的である必要があります。 – Alan

関連する問題