• 締切済み

matlabで作成したdllをVBAで使用する/MWcomutil.dll, MWstruct

このカテゴリでよいのか自信がありませんが質問です。 matlabで作成したdllをエクセルVBAで使用しようとしています。dotnettoolでcom objectを作成しています。使用するPCにはmatlabはインストールされておらずMCRinstallerを実行してMWstruct等の構造体(というのでしょうか)を使用可能になるようにしています。 あるPC(PC#1)では全く問題なく使用できていましたが、他のPC(PC#2)で同様のプロセス(MCRinstallerの実行、使用dllのレジスター(regsvr32を使用))を辿ってもどうしても使用することができません。 VBAを実行するとMWstructを使用するところで停止し、エラーメッセージは、「can't find project or library」です。tools->referencesを見るとMWComUtilはversion 7.4と7.3があるようですが、どちらを使用しても同じ結果でした。matlab関係と思われるものは、プログラムのdllとMWComUtil以外には参照の必要がないと思うのですが違うのでしょうか?(PC#1では以上の二つの参照がOKであれば動作するようです) 参照可能ライブラリの中に、MWComMgrというのもあるので試しに参照してみましたが同じ結果でした。 実はPC#2以外にも複数のPCに試していますが、同じ結果となっています。何かを見落としているのと思いますが、ヒントをいただければ非常に助かります。 スペック概要: PC#1 windows XP home ed Excel 2003 PC#2 windows XP pro (windows 2000も試してみたが無理であった) Excel 2002 なお、windows update 等はすべて最新のものとしています。

みんなの回答

  • mtblue
  • ベストアンサー率100% (3/3)
回答No.1

MATLABのバージョンはいくつでしょうか? 特にR12とR13以降ではMATLABの拡張APIが再編されているようです(私もこれのためにプログラムを書きなおした経験があります). それと, >使用するPCにはmatlabはインストールされておらず とのことですが,フローティングライセンスになっていると思います.ですから,あるPCで実行できて別のPCでは実行できないのはLANの設定ではないでしょうか? お使いになっているネットワーク環境がわかりませんのでなんともいえないのですが,一度,ネットワーク環境も調査してみてはいかがでしょうか? それと,フローティングライセンスですと,一度に認証サーバにアクセスできるクライアント数も確か制限があったと思います.ひょっとしたらその辺が影響があるかもしれません. 的外れなことをお聞きしていたらご容赦ください.

kyotowim
質問者

お礼

お礼が遅くなってしまい大変失礼いたしました。助言いただいたケースも検証してみましたが、解消されませんでした。 しかしながら、他に原因があることを発見いたしました。参照の設定で、ソルバーの参照が正しくできておりませんでした。ソルバーは実質使用していませんでしたので、参照自体を解除したところ、matlabのdllも問題なく動作するようになりました。エラーメッセージが的外れなものであった、ということのようです。 いずれにせよ助言ありがとうございました。

関連するQ&A

  • DLLを作成してVBAから使用する方法は?

    Visual Basic 2005 Express EditionでDLLを作成して,エクセルVBAから使用する方法を教えてください。 DLLで提供する関数は,仮に Public Function TRIM2(ByVal str1 As String) As String TRIM2 = trim(str1) End Function とします。 DLLの作り方とエクセルVBAでの利用のやり方が判りません。 一応,DLLらしきものを作りエクセルVBAから参照を試みましたが,「指定されたファイルへの参照は登録できません。」というエラーになります。

  • EXCEL VBAで自作DLLを呼び出すには?

    EXCEL VBAで自作DLLを呼び出すことをしています。一応うまくいったのですが、他人のPCで実行すると、「DLLがみつかりません」というエラーになってしまいます。DLLは、C:\Windows\system32 に入れてもだめです。また、c:\Program Files\xxx\yyy.dll にDLLをおき、EXCEL VBAで、Declare Function zzz Lib "c:\Program Files\xxx\yyy.dll" Alias _zzz@8" ( ...) As Long と 絶対パスでDLLを指定してもだめです。自分のPCは、Windows XP SP2です。他人のPCもXPですが、幾分新しいXPのようです。VISTAでもうまくいきません。 これはいったいなぜでしょうか?新しいOSではセキュリティを堅牢にしたたまに、DLLの呼び出しを制限しているのでしょうか? どうやったらDLLを呼び出せるか、教えていただけないでしょうか? よろしくお願いいたします。

  • vc++ dll excel vba

    c++で作成したdllをexcel(vba)で使用する時エラー発生 >>>vs2005 vc++で作成したプロジェクト(プロジェクトはWindowフォームアプリケーションでフォームを使ってあるdllファイルからデータを読み出しポップアップ形でデータを表示する)をdllにした後、作られたdllをexcelに連結し読み出しボタンを押すとdllが実行されるようになっています。 問題はvisual studioがインストールされているパソコンではうまくいくのですが、vsがインストールされてないパソコンで実行すると "実行エラー'53':" "ファイルが見つかりません:xxxxx.dll" が表示され終了されてしまいます。 >>excelのvbaは "Private Declare Function test_func Lib "xyxyxy.dll" Alias "#1" (ByVal test As Integer) As Integer" >>c++のdll作成のほうは "[STAThreadAttribute] __declspec(dllexport) char __stdcall test_f(int dialog_no)" になってます。 ちなみにお客さんのパソコンを使ってテストしているためpath登録や参照登録などができません。 何でも良いのでコメント書いていただければと思います。 大雑把な質問で申し訳ないですが、宜しくお願いいたします。

  • VB2008でのDLL作成方法について

    はじめまして、はじめて投稿します。 初心者なので変な質問をしていたらすいません。VB2008を使用しています。 VBで作成したDLLファイルをLabviewで使用したいと思っています。 ただVB6.0でActiveX DLLを作成する方法はわかるのですが、VB2008で作成する方法がわかりません。 クラスライブラリでプログラムを作成し、DLLにすることはできるのです・ しかしレジストリに登録しようと思い「regsvr32 ファイルのパス**.dll」と入力したところ「**.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした」と出ます。 調べてもVB2008でのActiveX DLL作成方法が見つからなくて困っています!!! わかるかた、よろしくお願いいたします。

  • VBAをDLL化する方法を教えてください。

    Excelの中で、UserFormを使用し、グラフを操作するプログラムをVBAで作成しています。 そこで、VBAのソースを見られないようにするために、全てDLL化してだれにでも配信できるようにしたいと考えていますが、どのようにすれば、DLLにできるのかわかりません。 VBAのパスワードだけでは弱いので、DLL化する方法がありましたら、どなたかその方法をご教授願います。

  • エクセルVBA実行時のエラー:DLLファイルが見つ

    タイトル:エクセルVBA実行時のエラー:DLLファイルが見つかりません  質問させていただきます。どうぞよろしくお願いいたします。 環境:PC1~3の全てが、Excel2010、Win7になります。 初めてVBAから読み込むためのDLLファイルを作成いたしました。    PC1上で動作確認できている2つのファイル(Test4.dll(VC++2013にて作成)と それを呼び出すVBAのついたエクセルファイル)を、 PC2とPC3に移動し、VBAを実行しましたところ 何故かPC3でのみ下記エラーが発生いたします。 >実行時エラー'53' >ファイルが見つかりません。Test4.dll ・2つのファイルは同じフォルダ内で実行しております。 ・VBAのカレントパスは   ChDrive Left(ThisWorkbook.Path, 1)   ChDir ThisWorkbook.Path で変更しております。  試しにC:\Windows\System32と C:\Windows\SysWow64にも Test4.dllをコピペしてみましたが、同じエラーが出てまいります。 ・PC3のみ違うところを探してみましたが、思いつくのは下記くらいでございます。   1.VSが入っておりませんでした。(必要なのでしょうか??)   2.実行しているパスが違います。     PC1とPC2の実行パス:      D:\Users\Administrator\Documents\VBA_TEST     PC3の実行パス:      D:\Documents\VBA_TEST              もし何か原因として思いつかれる事がございましたらお教えいただけないでしょうか。 お詳しい方がいらっしゃいましたら何卒よろしくお願いいたします。

  • VB2010で作成したdllからtlbが作れない

    VB.NETで作成したDLLをExcelのVBAから呼び出すということをやっています。 VB2007のときはよかったのですが、VB2010にしてからうまくいかなくなりました。 具体的には、コンパイルしてClassLibrary1.dllファイルを作成してから C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe ClassLibrary1.dll /tlb:ClassLibrary1.tlb /codebase を実行すると、 ClassLibrary1.dllは有効な.NETアセンブリではないため、読み込めませんでした。 となります。 ClassLibrary1の「アセンブリをCOM参照可能にする」にはチェックを入れています。 おわかりの方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • Matlabを実行しやすくする方法

    Matlabで作成したプログラムを他人に渡す場合や、 過去に自分が作成したプログラムを後から実行したい場合など どこの変数がパラメータになっているか分かりにくい場合がよくあります。 VBAとかVBみたいに、ボタンとかテキストボックスとかを ウインドウ上に作成して、後から実行しやすい方法ってないのでしょうか? あるいはmatlabウインドウ上で指定したパラメータしか変更できないように設定することってできますでしょうか?

  • C++で作成したDLLにVBAから配列渡し

    VC++初心者です。よろしくお願いします。 VC++2008ExpressでWindowsアプリケーションのDLLを作成してみました。 Excel2007VBAにて、そのDLLを呼び出して関数を使用したいのですが VBAの配列を参照渡しで渡すと、配列のデータをうまく渡せません。 コードは以下の通りです。 配列ではないデータはうまくいきますが。。。 配列の場合はもっと他に必要なことがあるのでしょうか? よろしくお願いします。 //VC++ DLLコード #include <windows.h> int APIENTRY Add(int[] a) {    return a[0] + a[1] ; } '''VBAのコード Private Declare Function Add Lib "TEST_DLL.dll" (ByRef a() As Integer) As Integer Dim a(1) As Integer Sub test() a(0) = 1 a(1) = 2 MsgBox (Add(a)) End Sub メッセージボックスには3が表示されるはずですが 変な数字に化けてしまいます。 どなたか、ご存知の方、よろしくお願いします。

  • VBAで作成したボタンが押せない

    WIN2000でEXCEL2000を使用しています。 エクセルのVBAでダイアログを作成しその中に オートシェイプの四角形ボタンを作成しました。 そのボタンを押すとマクロが実行されるように しています。 しかし、私のPCではボタンを押したら実行できるのに 他のPCではボタンを押しても実行されないPCも あります。他のPCもOS、EXCELは同じものです。 なぜこのような事が起きるのか教えてください。

専門家に質問してみよう