DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB6,VB.NETからエクセルを開いたときにアドインが有効にならない

環境/言語:[WindowsXP]
分類:[.NET]

2006/09/14(Thu) 18:05:59 編集(投稿者)
2006/09/14(Thu) 17:36:06 編集(投稿者)

ご存知の方がいれば是非情報頂きたいです。
VB6,VB.NET環境において、以下のようにExcelを開いた場合、「ツール」→「アドイン」で追加している「分析ツール」の関数が使用できなくなります。

(ソースはVB6です)
☆=====================ソース======================☆
Dim loBook As Excel.Workbook

Set loBook = Excel.Workbooks.Add
loBook.Application.Visible = True

'ここでブレイクしてExcelシートを参照すると、「分析ツール」の関数が有効になっていません
☆=====================ソース======================☆

Excelを手起動した場合はそのようにはなりませんが、VBから開いたときだけこの現象になるようです。

VBから起動した場合も、一度「ツール」→「アドイン」で「分析ツール」のチェックをはずしたあと、もう一度有効にすると関数が使えるようになります。
ですがVBのソースで以下のようにしても関数が使えるようにはなりません。

☆=====================ソース======================☆
loBook.Application.AddIns("分析ツール").Installed = False
loBook.Application.AddIns("分析ツール").Installed = True
☆=====================ソース======================☆

なんとか関数を使える方法はあるのでしょうか。

具体的に使えなくなる関数は、
EDate,EoMonth
です。

ご存知の方おられましたら、ご教授のほどよろしくお願い申しあげます。

検索サイトなどで、「EoDate VBA」とかで検索すれば、ぞろぞろ出てきますが。
あきひろ様

お返事ありがとうございました。
VBAでうまく行くのは分かっておりますが、今回はVB6,VB.NETでうまくいかないのです。
当方で引き続き調べましたが、ActiveXからの呼び出しではアドインが読み込まれないとのことでした。かといって、

loBook.Application.AddIns("分析ツール").Installed = True

ではうまくいかなかったのですが、以下のコードを実行することによりVB6の環境では分析ツールが組み込まれることが分かりました。

Call loBook.Application.RegisterXLL(loApp.LibraryPath & "\" & "Analysis\ANALYS32.XLL")

ですが、VB.NET(2003)環境で実行すると上記の箇所で、

☆=====================エラー======================☆
'System.Runtime.InteropServices.COMException' のハンドルされていない例外が WindowsApplication6.exe で発生しました。
追加情報 : サーバーによって例外が返されました。
☆=====================エラー======================☆

が返されてしまいます。
全く同じ環境で実行しているのですが・・・。

EXCELのバージョンは特に限定していませんが、現在は2003を使用しております。
2006/09/15(Fri) 13:35:33 編集(投稿者)

自己レスです。

VB.NET環境で

Call loBook.Application.RegisterXLL(loApp.LibraryPath & "\" & "Analysis\ANALYS32.XLL")

でエラーになりますが、Try Catchでエラーを無視するとうまく分析ツールは読み込まれているみたいです。エラーになるのは、

【CreateObject コマンド を使用する場合、アドインを読み込まないでください。】
http://support.microsoft.com/kb/213489/JA/
に書かれている、「原因」の箇所が関係あるような気もします。

もしくは、Excelのマクロで上記のソースを書き、それをVB.NETから呼び出す、とするとエラーも起こりません。

あまり気持ちよくない方法ですが、一応は目的の動作ができました。
お調べ頂いた皆様、ありがとうございます。
よりよい方法があるような気もしますが、とりあえずこの方法実装したいと思います。
解決済み!
無理して分析ツールの関数を使わなくても、別の手で回避すればいいと思って返答したのですが、そういう訳にもいかないのですかね。解決されているようですが、参考までに、以下手元のExcel2000とVS2005で動いているソースです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim o As Excel.Application
Dim r As Double

o = CreateObject("Excel.Application")
o.Visible = True

o.Workbooks.Open(o.LibraryPath & "\analysis\atpvbaen.xla")
o.Workbooks("atpvbaen.xla").RunAutoMacros(1)

r = o.Run("atpvbaen.xla!edate", Now(), 1)
MsgBox(DateTime.FromOADate(r).ToString())

o.Workbooks.Close()
End Sub

いけね。解決済みの記事にレスをつけたら、トピック表示の際に「解決済み」が表示されませんね。てことで、解決済みにチェックを入れておきます、ごめんなさい。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板