クラス MWUtil
MWUtil クラスには、配列処理とアプリケーションの初期化で使用される一連の静的ユーティリティ メソッドが含まれています。このクラスはシングルトン (Microsoft® Excel® のインスタンスごとに、このクラスの唯一のグローバル インスタンス) として内部実装されます。この型の変数を、使用される各モジュール内のグローバル スコープで 1 つ宣言するのが最も効率的です。MWUtil のメソッドを以下に示します。
関数プロトタイプは Visual Basic® 構文を使用します。
Sub MWInitApplication(pApp As Object)
Microsoft Excel の現在のインスタンスでライブラリを初期化します。
パラメーター
| 引数 | 型 | 説明 |
|---|---|---|
|
|
| 現在の Excel アプリケーションへの有効な参照 |
戻り値
なし。
注意
この関数は、MATLAB® Compiler™ によって作成された COM コンポーネントを使用する Excel の各セッションで 1 回呼び出されなければなりません。MATLAB Compiler SDK™ の任意の COM コンポーネントのメンバー クラスに対してメソッド呼び出しが行われ、ライブラリが初期化されていない場合、エラーが生成されます。
例
この Visual Basic サンプルは MWComUtil ライブラリを Excel の現在のインスタンスで初期化します。Object 型の MCLUtil という名前のグローバル変数は、MWUtil クラスのインスタンスを保持し、Boolean 型の bModuleInitialized という名前の別のグローバル変数は、初期化プロセスの状態を格納します。プライベート サブルーチン InitModule() は MWComUtil クラスのインスタンスを作成し、MWInitApplication メソッドを引数 Application で呼び出します。この関数が正常に完了すると、それ以降のすべての呼び出しはオブジェクトを再作成せずに終了します。
Dim MCLUtil As Object
Dim bModuleInitialized As Boolean
Private Sub InitModule()
If Not bModuleInitialized Then
On Error GoTo Handle_Error
If MCLUtil Is Nothing Then
Set MCLUtil = CreateObject("MWComUtil.MWUtil")
End If
Call MCLUtil.MWInitApplication(Application)
bModuleInitialized = True
Exit Sub
Handle_Error:
bModuleInitialized = False
End If
End Sub
メモ
複数のバージョンの MATLAB と MWComUtil.dll で同時に開発している場合、たとえば、次の構文を使用すると、アップグレードのたびに COM モジュールを再コンパイルする必要があります。
Set MCLUtil = CreateObject("MWComUtil.MWUtil")MWUtil モジュールの呼び出しをバージョン固有にします。ここで、x.x は固有のバージョン番号です。Set MCLUtil = CreateObject("MWComUtil.MWUtilx.x")Sub MWInitApplicationWithMCROptions(pApp As Object, [mcrOptionList])
MATLAB Runtime のオプションを指定して MATLAB Runtime を起動します。mclInitializeApplication (MATLAB Compiler SDK)と同様です。
パラメーター
| 引数 | 型 | 説明 |
|---|---|---|
|
|
| Excel アプリケーションから呼び出されるときのみ有効な参照 非 Excel COM クライアントは |
戻り値
なし。
注意
この関数を呼び出して MATLAB Runtime のオプション (nojvm、logfile など) を渡します。この関数をプロセスごとに 1 回呼び出します。
例
この Visual Basic サンプルは MWComUtil ライブラリを Excel の現在のインスタンスで初期化します。Object 型の MCLUtil という名前のグローバル変数は、MWUtil クラスのインスタンスを保持し、Boolean 型の bModuleInitialized という名前の別のグローバル変数は、初期化プロセスの状態を格納します。プライベート サブルーチン InitModule() は MWComUtil クラスのインスタンスを作成し、引数 Application とオプションを含む string 配列で MWInitApplicationWithMCROptions メソッドを呼び出します。この関数が正常に完了すると、それ以降のすべての呼び出しはオブジェクトを再作成せずに終了します。この関数が正常に実行されると、MATLAB Runtime は JVM® なしで logfile.txt という名前のログファイルと共に開始します。
Dim MCLUtil As Object
Dim bModuleInitialized As Boolean
Private Sub InitModule()
If Not bModuleInitialized Then
On Error GoTo Handle_Error
If MCLUtil Is Nothing Then
Set MCLUtil = CreateObject("MWComUtil.MWUtil")
End If
Dim mcrOptions(1 To 3) as String
mcrOptions(1) = "-nojvm"
mcrOptions(2) = "-logfile"
mcrOptions(3) = "logfile.txt"
Call MCLUtil.MWInitApplicationWithMCROptions(Application, mcrOptions)
bModuleInitialized = True
Exit Sub
Handle_Error:
bModuleInitialized = False
End If
End Sub
メモ
Excel を使用しない場合は、MWInitApplicationWithMCROptions に Application ではなく Nothing を渡します。
Function IsMCRJVMEnabled() As Boolean
MATLAB Runtime が JVM と共に起動している場合は true を返し、そうでない場合は false を返します。
パラメーター
なし。
戻り値
Boolean
Function IsMCRInitialized() As Boolean
MATLAB Runtime が初期化されている場合は true を返し、そうでない場合は false を返します。
パラメーター
なし。
戻り値
Boolean
Sub MWPack(pVarArg, [Var0], [Var1], ... ,[Var31])
Variant 引数の可変長リストを単一の Variant 配列にパックします。この関数は一般的に個別の入力のリストから varargin セルを作成するために使用されます。リスト内の各入力は、空ではない場合、または不足していない場合にのみ配列に追加されます。(Visual Basic では、不足しているパラメーターは Variant 型で値が &H80020004 の vbError として表されます)。
パラメーター
| 引数 | 型 | 説明 |
|---|---|---|
|
|
| 結果の配列を受け取ります。 |
[Var0], [Var1], ... |
| 配列にパックする |
戻り値
なし。
注意
この関数はリストを処理する前に必ず pVarArg の内容を解放します。
例
この例では、数式関数で MWPack を使用して varargin セルを作成し、次のシグネチャをもつ MATLAB 関数からコンパイルされたメソッドに入力パラメーターとして渡します。
function y = mysum(varargin)
y = sum([varargin{:}]);
この関数は varargin 内の要素の合計を返します。この関数がバージョン 1.0 の mycomponent という名前のコンポーネントに含まれている myclass という名前のクラスのメソッドであるとします。Visual Basic 関数は最大 10 個の入力を許可し、結果 y を返します。エラーが発生すると、関数はエラー メッセージを返します。この関数は MWInitApplication が以前に呼び出されていることを前提としています。
Function mysum(Optional V0 As Variant, _
Optional V1 As Variant, _
Optional V2 As Variant, _
Optional V3 As Variant, _
Optional V4 As Variant, _
Optional V5 As Variant, _
Optional V6 As Variant, _
Optional V7 As Variant, _
Optional V8 As Variant, _
Optional V9 As Variant) As Variant
Dim y As Variant
Dim varargin As Variant
Dim aClass As Object
Dim aUtil As Object
On Error Goto Handle_Error
Set aClass = CreateObject("mycomponent.myclass.1_0")
Set aUtil = CreateObject("MWComUtil.MWUtil")
Call aUtil.MWPack(varargin,V0,V1,V2,V3,V4,V5,V6,V7,V8,V9)
Call aClass.mysum(1, y, varargin)
mysum = y
Exit Function
Handle_Error:
mysum = Err.Description
End Function
Sub MWUnpack(VarArg, [nStartAt As Long], [bAutoResize As Boolean = False], [pVar0], [pVar1], ..., [pVar31])
Variant の配列を個々の Variant 引数にアンパックします。この関数は MWPack の逆の機能を提供し、通常 varargout セルを処理して個々の Variant にするために使用されます。
パラメーター
| 引数 | 型 | 説明 |
|---|---|---|
|
|
| 処理する |
|
|
| 処理を開始する配列の開始インデックス (0 ベース) (オプション)。既定値 = |
|
|
| オプションの自動サイズ変更フラグ。このフラグが |
|
|
|
|
戻り値
なし。
注意
この関数は、nStartAt パラメーターを使用して、単一の呼び出しで、あるいは複数の呼び出しを通じて Variant 配列を処理できます。
例
この例では MWUnpack を使用して、各範囲を自動でサイズ変更しながら、varargout セルを処理していくつかの Excel 範囲にしています。varargout パラメーターは MATLAB 関数からコンパイルされたメソッドから提供されます。
function varargout = randvectors
for i=1:nargout
varargout{i} = rand(i,1);
end
この関数は i 番目のベクトルの長さが i に等しい一連の nargout 乱数列ベクトルを作成します。この関数が含まれている myclass という名前のクラスは、バージョンが 1.0 で mycomponent という名前のコンポーネントに含まれているとします。Visual Basic サブルーチンは引数を取らず、結果を Excel の A1、B1、C1 および D1 から始まる列に配置します。エラーが発生すると、メッセージ ボックスにエラー テキストが表示されます。この関数は MWInitApplication が以前に呼び出されていることを前提としています。
Sub GenVectors()
Dim aClass As Object
Dim aUtil As Object
Dim v As Variant
Dim R1 As Range
Dim R2 As Range
Dim R3 As Range
Dim R4 As Range
On Error GoTo Handle_Error
Set aClass = CreateObject("mycomponent.myclass.1_0")
Set aUtil = CreateObject("MWComUtil.MWUtil")
Set R1 = Range("A1")
Set R2 = Range("B1")
Set R3 = Range("C1")
Set R4 = Range("D1")
Call aClass.randvectors(4, v)
Call aUtil.MWUnpack(v,0,True,R1,R2,R3,R4)
Exit Sub
Handle_Error:
MsgBox (Err.Description)
End Sub
Sub MWDate2VariantDate(pVar)
MATLAB からの出力日付を Variant 日付に変換します。
パラメーター
| 引数 | 型 | 説明 |
|---|---|---|
|
|
| 変換する |
戻り値
なし。
注意
MATLAB は、0/0/00 00:00:00 を 0.0 で表現する倍精度浮動小数点数として日付を扱います。既定では、コンパイルされた MATLAB 関数からの出力パラメーターである数値の日付は、COM 日付バイアスによるデクリメントと COM 日付への型強制の必要がある Double として渡されます。MWDate2VariantDate メソッドはこの変換を実行し、さらに、文字ベクトル形式の日付を COM 日付型に変換します。
例
この例では MWDate2VariantDate を使用して次の MATLAB 関数からコンパイルされるメソッドが返す数値の日付を処理します。
function x = getdates(n, inc)
y = now;
for i=1:n
x(i,1) = y + (i-1)*inc;
end
この関数は長さ n で現在の日付と時刻で始まる日付を表す数値の列ベクトルを作成します。各要素は inc 日ずつインクリメントされています。この関数が含まれている myclass という名前のクラスは、バージョンが 1.0 で mycomponent という名前のコンポーネントに含まれているとします。サブルーチンは Excel 範囲と Double を入力として取り、生成された日付を指定された範囲に配置します。エラーが発生すると、メッセージ ボックスにエラー テキストが表示されます。この関数は MWInitApplication が以前に呼び出されていることを前提としています。
Sub GenDates(R As Range, inc As Double)
Dim aClass As Object
Dim aUtil As Object
On Error GoTo Handle_Error
Set aClass = CreateObject("mycomponent.myclass.1_0")
Set aUtil = CreateObject("MWComUtil.MWUtil")
Call aClass.getdates(1, R, R.Rows.Count, inc)
Call aUtil.MWDate2VariantDate(R)
Exit Sub
Handle_Error:
MsgBox (Err.Description)
End Sub