[Excel-Link] の機能をマクロから使うための VBA プロシジャが提供されています。

1.前準備

(事前にExcel-Link をアドイン登録しておいてください)

マクロから [Excel-Link] の機能を使うには、使う側のマクロを含むブックから [Excel-Link] のアドインファイルを参照できるよう、「参照設定」を行う必要があります。

Microsoft Excel のメニューを用いて Visual Basic Editor を開き、メニューから ツール  参照設定 を選び、表示されたダイアログボックスの「参照可能なライブラリファイル」一覧上にある「FP_EXCEL_LINK」の左のチェックボックスをオンにしてください。

2.VBA プロシジャの解説

(1)fusions メニューの各機能をマクロから呼び出すためのプロシジャ

fusions メニューの各項目に対応してそれぞれ VBA のプロシージャ(Sub)が用意されています。いずれのプロシジャも引数はありません。これらのプロシジャを用いると、たとえば、シート上にボタンを配して、そのボタンをクリックしたときに各機能が実行されるようにすることができます。

プロシジャ

内容

対応する fusions メニュー項目

FP_Retrieve

現在選択されているシートについて、データ取得処理を実行する。

「データ取得」

FP_Reflect

現在選択されているシートについて、データ反映処理を実行する。

「データ反映」

FP_Clear

現在選択されているシートについて、シートクリア処理を実行する。

「データクリア」

FP_RetrieveReflect

現在選択されているシートについて、データ取得・反映処理を実行する。

「データ取得・反映」

FP_BatchRetrieve

現在選択されているブックに含まれ、シート名が「FP_」で始まるシートを対象に、前から順にデータ取得処理を実行する。

「一括処理」>「データ取得」

FP_BatchReflect

現在選択されているブックに含まれ、シート名が「FP_」で始まるシートを対象に、前から順にデータ反映処理を実行する。

「一括処理」>「データ反映」

FP_BatchClear

現在選択されているブックに含まれ、シート名が「FP_」で始まるシートを対象に、前から順にデータクリア処理を実行する。

「一括処理」>「データクリア」

FP_BatchRetrieveReflect

現在選択されているブックに含まれ、シート名が「FP_」で始まるシートを対象に、前から順にデータ取得・反映処理を実行する。

「一括処理」>「データ取得・反映」

FP_PivotQuery

ピボット検索を実行する。

「ピボット検索」

FP_ChangeLocales

表示言語を切り替えるためのダイアログボックスを表示する。

「Language」

FP_ConfigureConnection

接続先を設定するためのダイアログボックスを表示する。

「接続の設定」

FP_ConfigureRegions

リンク領域を設定するためのダイアログボックスを表示する。

「リンク領域の設定」

FP_CreateSpecifications

リンク領域の設定内容を仕様書として出力する。

「リンク領域仕様書の作成」

FP_PasteMember

セル、単一行内の範囲、あるいは単一列内の範囲を選択して実行すると、メンバ選択画面を表示し、そこでのユーザの指定に従って、対象セル・範囲にメンバラベルを貼り付ける。

「メンバ貼り付け」

FP_ConfigureSheetAttributes

(リンク領域に対してではなく)シートに対して適用される処理要領を設定するためのダイアログボックスを表示する。

「シート処理要領の設定」

FP_ProtectSheet

登録された Excel-Link シートパスワードでシートを保護する。

「シートの保護」

FP_ChangePassword

Excel-Link シートパスワードを登録/変更するためのダイアログボックスを表示する。

「シートパスワード変更」

FP_ToggleLicenseReminder

ライセンスのお知らせの表示/非表示を切り替える。

「ライセンスのお知らせを表示しない」

FP_About

「バージョン情報」ダイアログボックスを表示する。

「バージョン情報」

[Excel-Link] 自体の設定内容を取得し、変更するために使用できるプロシジャです。

プロシジャ 内容 引数 返り値

FP_GetLocale

現在選択されている表示言語を取得します。

(なし)

日本語の場合:ja

英語の場合:en

FP_SetLocale

表示言語を設定します。

Locale As String

日本語の場合:ja

英語の場合:en

(なし)

FP_SetPassword

Excel-Link シートパスワードを設定します。

実効前にシートの保護は解除しておいて下さい。実行後はシートは保護されます。

Sheet As Worksheet
処理対象のシート

Password As String
パスワード

(なし)

FP_IsLicenseReminderDisabled

ライセンスのお知らせの表示/非表示状態を取得します。

(なし)

表示時: False

非表示時:True

FP_SetLicenseReminderDisabled

ライセンスのお知らせの表示/非表示状態を設定します。

IsLicenseReminderDisabled As Boolean

表示時: False

非表示時:True

(なし)

FP_CopyConfigurations

あるシートの Excel-Link 設定情報のすべてを別のシートにコピーします。

SourceSheet As Worksheet
コピー元シート

DestinationSheet As Worksheet
コピー先シート

(なし)

(3)複雑な処理のためのプロシジャ

fusions メニューから データ取得/反映 を実行した場合、現在選択されているシートのみが対象となります。一方、そうではなく、様々な条件に応じて複数のシートを一括して処理したい場合もあります。その場合には以下のプロシジャを用いれば、条件に応じて対象シートを取捨選択して処理するマクロを作成することができます。

単に複数シートを一括処理したい場合には、マクロを書かなくとも、メニューから実行できる 一括処理 機能でご対応頂けます。

プロシジャ 内容 引数 返り値

FP_RetrieveSilently

引数で指定されたシートについて、データ取得処理を実行する。

Sheet As Worksheet
処理対象のシート

シート上に処理対象リンク領域が存在する場合、True。
存在しない場合、False

FP_ReflectSilently

引数で指定されたシートについて、データ反映処理を実行する。

(同上)

(同上)

FP_RetrieveReflectSilently

引数で指定されたシートについて、データ取得・反映処理を実行する。

(同上)

(同上)

FP_ClearSilently

引数で指定されたシートについて、データクリア処理を実行する。

(同上)

(同上)

FP_AdvancedPasteMember

セル、単一行内の範囲、あるいは単一列内の範囲を指定して実行すると、メンバ選択画面を表示し、そこでのユーザの指定に従って、対象セル・範囲にメンバラベルを貼り付ける。

TargetRange As Range
メンバラベル貼り付け対象範囲

以下、省略可能引数

ApplicationLabel As String

アプリケーションラベル IsApplicationSelectable As Boolean
メンバ選択画面上でアプリケーションの選択を許すなら True(省略時デフォルト値)。許さないなら False。

DimensionLabel As String
ディメンションラベル

IsDimensionSelectable As Boolean
メンバ選択画面上でディメンションの選択を許すなら True(省略時デフォルト値)。許さないなら False。

NamePastingMode As Integer
ラベルとともにメンバの名称も貼り付けるかどうか、また貼り付け方法を指定する。

0 : 貼り付けない。
1 : 名称貼り付け範囲のセルがブランクなら貼り付ける(省略時デフォルト値)。
2: 名称貼り付け範囲のセルがブランクでなくとも貼り付ける。

(なし)

FP_GetParticipatsForCurrentUser

指定されたアプリケーションにおいて、現在使用中のユーザが担当している業務責任単位の一覧を返す。

ApplicationLabel As String

アプリケーションラベル

Collection

要素は: FP_Descriptor
クラス 同クラスは以下の 2 つのプロパティを持つ。

Label
Name

それぞれ、業務責任単位のラベルと名称を保持する。

FP_ShowMenu

メニューの表示/非表示を切り替える。

Show As Boolean
表示するときには True、 非表示とするときには False とする。設定内容は Excel を再起動すると失われる(再起動後の初期状態ではメニューは表示される)。

(なし)

FP_ShowRibbon

リボンの表示/非表示を切り替える。

Show As Boolean
表示するときには True、 非表示とするときには False とする。設定内容は Excel を再起動しても維持される。

(なし)

3.コードサンプル

(1)サイレントプロシジャ

上表のプロシジャのうち、末尾に「Silently」と付されたもの(以下 サイレントプロシジャと呼びます)は、先に挙げた FP_Retrieve, FP_Reflect, FP_RetrieveReflect, FP_Clear (以下、インタラクティブプロシジャと呼びます)と、以下の点で異なっています。

  1. 対象シートを引数で指定するようになっている。

    インタラクティブプロシジャでは、常に、現在選択されているシートが処理対象です。

  2. 返り値があります(すなわち Function プロシジャです).

    インタラクティブプロシジャには、返り値がありません(すなわち Sub プロシジャです)。

  3. 処理完了を報告するメッセージボックスを表示しない。

    インタラクティブプロシジャでは、処理完了時にメッセージボックスが表示されますが、サイレントプロシジャでは表示されません。これは、複数シートを処理する際に、ひとつのシートの処理終了ごとにメッセージボックスが表示され処理が中断されるのは都合が悪いためです。

  4. シート設定内容に誤りがある時にはメッセージボックスを表示せず、エラーを発生する。

    インタラクティブプロシジャでは、シート設定内容に誤りがある時にはメッセージボックスが表示されますが、サイレントプロシジャでは、メッセージボックスは表示されず、かわりにエラーが発生します。
    呼び出す側のマクロでは On Error ステートメントでエラー処理をすることができるので、メッセージボックスでエラーを表示するだけでなく、無視して次のシートの処理を続けるなど柔軟な対応が可能です。
    なお、エラーが発生した場合には、その内容を説明するメッセージが、Err.Description に設定されています。

全シート一括処理を行うマクロのサンプルを以下に示します:

  '
  ' 全シート一括取得
  '
  Public Sub Retrieve()
      Dim Sheet As Worksheet

      On Error GoTo ERR_HANDLER

      For Each Sheet In ActiveWorkbook.Worksheets
          FP_RetrieveSilently Sheet
      Next
      Exit Sub

  ERR_HANDLER:
      MsgBox "シート " & Sheet.Name & " で、エラーが発生しました:" & vbCrLf & vbCrLf & Err.Description, vbOKOnly + vbExclamation
  End Sub

  '
  ' 全シート一括反映
  '
  Public Sub Reflect()
      Dim Sheet As Worksheet

      On Error GoTo ERR_HANDLER

      For Each Sheet In ActiveWorkbook.Worksheets
          FP_ReflectSilently Sheet
      Next
      Exit Sub

  ERR_HANDLER:
      MsgBox "シート " & Sheet.Name & " で、エラーが発生しました:" & vbCrLf & vbCrLf & Err.Description, vbOKOnly + vbExclamation
  End Sub

(2) FP_GetParticipatsForCurrentUser

「DEMO」というラベルを持つアプリケーションに含まれ、現在のユーザが実行権限を持っている業務責任単位のラベルと名称をデバッグウィンドウに出力する。

  Sub PrintParticipants()
      Dim Participants As Collection
      Dim Participant As FP_Descriptor

      Set Participants = FP_GetParticipatsForCurrentUser("DEMO")

      For Each Participant In Participants
          Debug.Print Participant.Label & " - " & Participant.Name
      Next

  End Sub