如何使用VBA根据链接中的特定文本更新excel中的链接? 使用Office 2016
我有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周的数据,则必须一次编辑一个链接,以便当前处理这些文件中的每个文件的主记录文件。
如果要启用整个文件,它会在整年和前几年拉出每个链接文件,并需要数小时才能完成。
我正在寻找的是VBA代码,它会询问链接中包含的文本并提取所有匹配的文件。
例如
"Contains"
Answer=04_01_17
先谢谢
布拉德
答案 0 :(得分:0)
下面这两个子程序向您展示了如何查看/操作文件中的链接。
您要查找的关键部分是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-test,或者更明智地创建变量并执行if-not-test来利用它。 E.g。
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