[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 を再起動しても維持される。

(なし)

(fusion_place >= 14.1) FP_CallWebApi

Web-API を呼び出す。

WebApiRequest As WebApiRequest
Web-API を実行するための情報

WebApiRequest は以下のプロパティを持つ。

WebApiType As String
実行する Web-API のタイプ

Description As String
Web-API の説明

Parameters As Collection
Web-API のパラメタ
パラメタは addParameter メソッドを用いて追加でき、Name, Key, Value を指定する。

Contents As Collection
リクエスト内容
リクエスト内容の addContents メソッドを用いて追加できる。

WebApiResponse
Web-API の実行結果

WebApiResponse は以下のプロパティを持つ。

WebApiType As String
実行した Web-API のタイプ

Description As String
Web-API の説明

WebApiCode As FP_WebApiCode
Web-API の実行結果のコード

WebApiCodeString As String
Web-API の実行結果のコード (文字列)

Message As String
Web-API の実行結果のメッセージ

StartedAt As String
Web-API の実行開始日時

EndedAt As String
Web-API の実行終了日時

ReturnedContents As Collection
Web-API の実行結果の内容。1 行ずつの内容が格納される。

ResponseXml As String
レスポンスの XML

(fusion_place >= 14.1) FP_CreateWebApiRequest

WebApiRequest オブジェクトを生成する。

WebApiType As String
実行する Web-API のタイプ

Description As String
Web-API の説明

WebApiRequest
Web-API を実行するための情報

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

(3)(fusion_place >= 14.1) FP_CallWebApi, FFP_CreateWebApiRequest

  Sub CallUpdateDimension()
      Dim request As WebApiRequest
      Dim response As WebApiResponse

      ' リクエストオブジェクトの作成
      Set request = FP_CreateWebApiRequest("UPDATE_DIMENSION", "Update SHOHIN dimension")
      ' parameters
      request.addParameter "APPLICATION", "", "DEMO"
      request.addParameter "DIMENSION", "", "SHOHIN"
      request.addParameter "ROLE", "", "DESIGNER"
      ' contents
      request.addContents "ADD_OR_UPDATE_MEMBER,HDR,LABEL,REMOVE_CHILDREN,NAME:en,NAME:ja,P:#MEMBER_TYPE,P:#LEAF,P:#ACTIVE,PARENT,IS_ROOT"
      request.addContents "ADD_OR_UPDATE_MEMBER , DTL, ""T01"", ""TRUE"", """", ""TEST"", ""TEMPLATE"", ""TRUE"", ""TRUE"", ""SHOHIN_KEI"", ""FALSE"""

      ' Web-API 実行
      Set response = FP_CallWebAPI(request)

      If response.WebApiCode = API_SUCCESSFUL Then
          MsgBox "成功しました"
      Else
          MsgBox "失敗しました" & vbCrLf & response.WebApiCodeString & ":" & response.Message
      End If
  End Sub
  Sub CallExportDimension()
      Dim request As WebApiRequest
      Dim response As WebApiResponse

      ' リクエストオブジェクトの作成
      Set request = FP_CreateWebApiRequest("EXPORT_DIMENSION", "Export SHOHIN dimension")
      ' parameters
      request.addParameter "APPLICATION", "", "DEMO"
      request.addParameter "DIMENSION", "", "SHOHIN"

      ' Web-API 実行
      Set response = FP_CallWebAPI(request)

      If response.WebApiCode = API_SUCCESSFUL Then
          MsgBox "成功しました"

          Dim returnedContent As Variant
          For Each returnedContent In response.ReturnedContents
              MsgBox returnedContent
          Next returnedContent
      Else
          MsgBox "失敗しました" & vbCrLf & response.WebApiCodeString & ":" & response.Message
      End If
  End Sub