クラス 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
と同様です。
パラメーター
引数 | 型 | 説明 |
---|---|---|
|
| 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