'
' 全シート一括取得
'
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
Excel-Link の機能をマクロから使う
[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 |
「バージョン情報」ダイアログボックスを表示する。 |
「バージョン情報」 |
(2) Excel-Link の設定内容の取得と変更のためのプロシジャ
[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。 |
FP_ReflectSilently |
引数で指定されたシートについて、データ反映処理を実行する。 |
(同上) |
(同上) |
FP_RetrieveReflectSilently |
引数で指定されたシートについて、データ取得・反映処理を実行する。 |
(同上) |
(同上) |
FP_ClearSilently |
引数で指定されたシートについて、データクリア処理を実行する。 |
(同上) |
(同上) |
FP_AdvancedPasteMember |
セル、単一行内の範囲、あるいは単一列内の範囲を指定して実行すると、メンバ選択画面を表示し、そこでのユーザの指定に従って、対象セル・範囲にメンバラベルを貼り付ける。 |
TargetRange As Range 以下、省略可能引数 ApplicationLabel As String アプリケーションラベル
IsApplicationSelectable As Boolean DimensionLabel As String IsDimensionSelectable As Boolean NamePastingMode As Integer 0 : 貼り付けない。 |
(なし) |
FP_GetParticipatsForCurrentUser |
指定されたアプリケーションにおいて、現在使用中のユーザが担当している業務責任単位の一覧を返す。 |
ApplicationLabel As String アプリケーションラベル |
Collection 要素は: FP_Descriptor Label それぞれ、業務責任単位のラベルと名称を保持する。 |
FP_ShowMenu |
メニューの表示/非表示を切り替える。 |
Show As Boolean |
(なし) |
FP_ShowRibbon |
リボンの表示/非表示を切り替える。 |
Show As Boolean |
(なし) |
(fusion_place >= 14.1) FP_CallWebApi |
Web-API を呼び出す。 |
WebApiRequest As WebApiRequest WebApiRequest は以下のプロパティを持つ。 WebApiType As String Description As String Parameters As Collection Contents As Collection |
WebApiResponse WebApiResponse は以下のプロパティを持つ。 WebApiType As String Description As String WebApiCode As FP_WebApiCode WebApiCodeString As String Message As String StartedAt As String EndedAt As String ReturnedContents As Collection ResponseXml As String |
(fusion_place >= 14.1) FP_CreateWebApiRequest |
WebApiRequest オブジェクトを生成する。 |
WebApiType As String Description As String |
WebApiRequest |
3.コードサンプル
(1)サイレントプロシジャ
上表のプロシジャのうち、末尾に「Silently」と付されたもの(以下 サイレントプロシジャと呼びます)は、先に挙げた FP_Retrieve, FP_Reflect, FP_RetrieveReflect, FP_Clear (以下、インタラクティブプロシジャと呼びます)と、以下の点で異なっています。
-
対象シートを引数で指定するようになっている。
インタラクティブプロシジャでは、常に、現在選択されているシートが処理対象です。 -
返り値があります(すなわち Function プロシジャです).
インタラクティブプロシジャには、返り値がありません(すなわち Sub プロシジャです)。 -
処理完了を報告するメッセージボックスを表示しない。
インタラクティブプロシジャでは、処理完了時にメッセージボックスが表示されますが、サイレントプロシジャでは表示されません。これは、複数シートを処理する際に、ひとつのシートの処理終了ごとにメッセージボックスが表示され処理が中断されるのは都合が悪いためです。 -
シート設定内容に誤りがある時にはメッセージボックスを表示せず、エラーを発生する。
インタラクティブプロシジャでは、シート設定内容に誤りがある時にはメッセージボックスが表示されますが、サイレントプロシジャでは、メッセージボックスは表示されず、かわりにエラーが発生します。
呼び出す側のマクロでは On Error ステートメントでエラー処理をすることができるので、メッセージボックスでエラーを表示するだけでなく、無視して次のシートの処理を続けるなど柔軟な対応が可能です。
なお、エラーが発生した場合には、その内容を説明するメッセージが、Err.Description に設定されています。
全シート一括処理を行うマクロのサンプルを以下に示します:
(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