14 統合Excelワークブックでのマクロの使用
Oracle Visual Builder Add-in for Excelが統合Excelワークブックのライフサイクルの特定の時点で実行するマクロを構成できます。
この機能を使用するには、Excelマクロ対応ワークブック・タイプ(.XLSM)を使用し、マクロ・モジュールにマクロを作成する必要があります。 マクロの作成の詳細は、Microsoftのドキュメントを参照してください。Excelワークブックでマクロを作成する方法については、このガイドの範囲外です。
マクロが十分にセキュアであるとは思われないため、Excelマクロの使用をブロックしている会社もあります。 マクロを追加する前に、目的のオーディエンスを考慮してください。 マクロの使用に関連するセキュリティ・リスクについても責任を負います。 そのため、統合ワークブックを顧客に提供する前に、リスクを徹底的に調査してください。 マクロを作成した後、予期しない結果や有害な結果をもたらす悪意のある変更や偶発的な変更の両方からマクロを保護するステップを実行します。 マクロの結果がアドインと互換性のない変更になったり、望ましくない動作が発生したりする場合は、この動作を回避するようにマクロを変更します。
「レイアウト・デザイナ拡張」タブには、マクロを指定できる2つのプロパティがあります: ダウンロードの完了後に実行する「ダウンロード後マクロ」およびアップロードの開始前に実行する「アップロード前マクロ」。 これらのプロパティの値としてマクロ名を指定します。 たとえば、アップロード後に実行するリフレッシュ・マクロを作成した場合は、「ダウンロード後マクロ」プロパティの値としてRefreshを入力します。

「図excel-add-macros.pngの説明」
ヒント:
マクロの名前を指定するときにカッコを含めないでください。ユーザーがダウンロードを取り消した場合、表またはフォームが空の場合、または予期しないエラーが発生した場合、「ダウンロード後マクロ」プロパティに指定したマクロは使用されません。 「アップロード前マクロ」プロパティに指定したマクロは、アップロードの直前に使用されます。 マクロがtrue以外の値を返した場合、アップロード操作は終了し、ステータス・ビューアに通知が表示されます。 マクロがtrueを返した場合、通常はアップロードに進みます。 trueまたはfalseの値をマクロから返すには、ブール関数を定義します。 詳細は、Microsoftのドキュメントを参照してください。
IsUploadReady関数のロジックの例を次に示します:Function IsUploadReady() As Boolean
Dim returnVal As Boolean
On Error GoTo ErrHandler:
Dim table As Range
Set table = Sheets("Sheet1").Range("TBL349543489")
' The named range, TBL349543489, is managed automatically by the add-in
returnVal = True
Dim cRows As Long
cRows = table.Rows.Count
Dim currentTableRow As Long
Dim amount As Long
For currentTableRow = 2 To cRows ' start with 2 to skip header row
amount = table(currentTableRow, 10) ' Amount is the tenth column in the table
If amount < 0 Then
returnVal = False
Debug.Print "Found negative amount = "; amount
End If
Next
IsUploadReady = returnVal
Exit Function
ErrHandler:
Dim failureMessage As String
failureMessage = Err.Description
MsgBox failureMessage
IsUploadReady = False
Exit Function
End Functionマクロの実行中にエラーが発生すると、Excelでは、Microsoft Visual Basicウィンドウがユーザーに表示されます。 マクロの実行中にエラーが発生したユーザーに対してウィンドウが有益なメッセージを表示するように、堅牢なエラー処理戦略を実装することをお薦めします。 次に簡単な例を示します。 特定のマクロに適切なエラー処理方針は、マクロのロジックによって異なります。
Sub Refresh()
On Error GoTo ErrHandler:
ActiveWorkbook.RefreshAll
Exit Sub
ErrHandler:
Dim failureMessage As String
failureMessage = Err.Description
MsgBox "Unable to refresh. Details: " & failureMessage
Exit Sub
End Sub
ヒント:
アドインは、データ表の名前付き範囲を作成および保守します。 マクロでは、名前付き範囲は決して変更しないでください。 ただし、マクロは名前付き範囲にアクセスして、動的にデータ表を検索できます。ノート:
マクロの記録は、ダウンロードやアップロードなどのアドイン機能と互換性がなく、サポートされていません。 アドイン機能は記録しないでください。 場合によっては、予期しない例外が表示されることがあります。
「データのダウンロード」または「変更内容のアップロード」を使用するときは、Excelビジュアル基本エディタのブレーク・モードをオンのままにしないでください。 サポートされていないため、予期しない例外が発生する可能性があります。