Workbook.LinkSourcesメソッド(Excel)

Workbook.LinkSourcesメソッド

何気なくggっていたら、WorkbookオブジェクトのLinkSourcesメソッドというものを見つけた。

MicrosoftOffice VBA Reference:Workbook.LinkSources Method (Excel) のページによると、

Returns an array of links in the workbook. The names in the array are the names of the linked documents, editions, or DDE or OLE servers. Returns Empty if there are no links.

とのこと。

ブック内のリンクを配列で返してくれるメソッドらしい。

対象のWorkbookオブジェクト内にリンクがなければ、Empty値が返る模様。

使ってみる

f:id:akashi_keirin:20180819201135j:plain

このように、他ブック「test.xlsm」へのリンクを含んだブックを作る。

んで、次のコードで実験。

リスト1 標準モジュール
Public Sub testLinkSourcesMethod()
  Dim a As Variant
  a = ActiveWorkbook.LinkSources(xlExcelLinks)    '……(1)'
  If IsEmpty(a) Then Exit Sub    '……(2)'
  Dim i As Long
  For i = 1 To UBound(a)    '……(3)'
    Debug.Print a(i)
  Next
End Sub

(1)の

a = ActiveWorkbook.LinkSources(xlExcelLinks)

で、Variant型の変数a(投げやりな変数名ですまん。)にLinkSourcesメソッドの返り値をぶち込む。引数のxlExcelLinksについては、コチラのXlLink Enumeration (Excel)のページをどうぞ。

対象のブックにリンクがなかった場合、LinkSourcesメソッドはEmpty値を返すので、(2)の

If IsEmpty(a) Then Exit Sub

で、配列aEmptyだったら処理を抜けるようにしている。

あとは、(3)からの3行

For i = 1 To UBound(a)    '……(3)'
  Debug.Print a(i)
Next

で配列aの要素を取り出してイミディエイトに表示させる。

ちなみに、For i = 1としていることからもおわかりのように、実は配列のインデックスがなぜか1始まりになるので注意。

VBAVariantの配列を返す関数・メソッドって、なぜかインデックスが1始まりになるやつがちょいちょいあるので困る。

実行

イミディエイトには、

f:id:akashi_keirin:20180819201143j:plain

このように表示された。

リンク元のフルパスが返された模様。

おわりに

で、何の役に立つのやら。