VB.NETでExcelVBAのマクロを動かす方法は??


草津  2004-09-07 02:03:09  No: 116213

こんにちは、質問お願いします。
ExcelVBAであらかじめ作ってあるマクロをVB.NETで動かすにはどうすればいいでしょうか??

'エクセル起動

        Dim oExcel As Object
        Dim oBook As Object
        Dim oBooks As Object
        Dim oSheets As Object
        Dim oSheet As Object

            lotNo = Trim(txtSeizolot.Text) + "ロット"
            oExcel = CreateObject("Excel.Application")

            oExcel.Visible = False
            oBooks = oExcel.Workbooks
            oBook = oBooks.Open(FilePach) 

”ここに入る処理はなんでしょうか???”

System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheets)
            
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
            oSheet = Nothing
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)
            oBook.Close(False)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
            oBook = Nothing

            oExcel.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
            oExcel = Nothing
            GC.Collect()
            oSheets = oExcel.worksheets
            osheet = oSheets(Trim(lotNo))
            oExcel.UserControl = False


ささ  2004-09-07 03:00:25  No: 116214

RunAutoMacrosって使えたかなぁ〜

' Auto_Openマクロの実行
Workbooks.Open XlsFilePath
Workbooks(XlsBookName).RunAutoMacros xlAutoOpen

たしか、VBAで他のマクロを実行する時には
こうやって走らせることできたけど.Netではどうやるんだろう、ゴミレススマソ。


いな  2004-09-07 03:02:04  No: 116215

Auto_Open関数に記述しておけば
Excel開いた時に走らないかなぁ〜。

マクロを有効にしますか?の確認ダイアログが出るけど・・・。


特攻隊長まるるう  2004-09-07 03:24:02  No: 116216

oExcel.Run("'" & oBook.Name & "'!Macro名")
でいけますが、その Object 型を多用したコードは嫌いですねぇ。
インテリセンス(『.(ピリオド)』を打った時点で入力候補の表示)も
使えませんし、型宣言はキッチリやった方が良くないですか?。


草津  2004-09-07 20:34:52  No: 116217

みなさん返信有難うございます。
返事遅くなって申し訳ありません。

>型宣言はキッチリやった方が良くないですか?
まだ力不足でどうやっていいか分かりません。
これでもきっちりやったつもりなのですが、どうやったらよいのでしょうか??


草津  2004-09-07 20:58:47  No: 116218

マクロの実行なんですが、

oExcel.Run("'" & oBook.Name & "'!Sheet3.Update")
                                      ↑マクロ名
これを実行すると
'System.Runtime.InteropServices.COMException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。

追加情報 : HRESULT からの例外です : 0x800A03EC。

このようなエラーがでてしまいます。

oBook.Nameのところにファイル名を入れても同じエラーがでてしまいます。

なにか間違っているのでしょうか??


葉月  2004-09-07 22:08:11  No: 116219

VB6世界しか知りませんが(調べたら.Netでもそうでした)

型宣言は、文字列ならString
整数ならLong や Integerという型があるように
エクセルにもExcel.Applicationというオブジェクトや
Excel.Workbookなどというオブジェクトなど、専用の宣言が用意されています
(参照設定が必要だと思われますが)←要確認!

きっちり型宣言を行うことで間違ったメソッド実行やプロパティの設定を
未然に防ぐこともできます


草津  2004-09-08 01:06:41  No: 116220

返信有難うございます。

返信内容を元に

        Dim oExcel As Excel.Application
        Dim oBook As Excel.Workbook
        Dim oBooks As Excel.Workbooks
        Dim oSheets As Excel.Worksheets
        Dim oSheet As Excel.Worksheet

この用に宣言しなおしました。

これでいいと思うのですがどうでしょう??


草津  2004-09-08 01:32:50  No: 116221

マクロの実行なんですが

①・・・・oExcel.Run("'" & oBook.Name & "'!Sheet1.Update")
②・・・・oExcel.Run("'" & oBook.Name & "'!Sheet2.Update")

①はこの記述でうまくいったのですが、②の処理が別シートのマクロのためうまくいきません。

現在アクティブなシートを切替える方法はどうやるのでしょうか??


葉月  2004-09-08 03:08:23  No: 116222

あれぇぇ?

○○○オブジェクトが
アクティブなシートを切り替える▲▲▲プロパティとかもってなかったっけ?
そのために明示的に宣言したはずなのに・・・

oExcel、oBook、oBooks、oSheets、oSheet 
がエクセル絡みのオブジェクトとして宣言したのだから

特攻隊長まるるうさんが示してるように
ピリオド打ってみればいやでも見つかる気がするんだが・・・

オブジェクトを手当たり次第でも見つかるはず
そういうことって試してみました?
試してメソッドや、プロパティ候補が出なかったから質問してる?
(あえてオブジェクト名とプロパティ名は伏せてみました・・・)


特攻隊長まるるう  2004-09-10 01:56:30  No: 116223

まぁ、エクセルのオブジェクトってごちゃごちゃしてるから
慣れないとぱっと見つけるのは難しい部分はあるかもしれません。
しかし、そーゆー時の為にエクセルには『マクロの記録』なるものが
あるわけです。現在アクティブなシートを切替える方法はこれを使えば
すぐに分かるでしょう。それでもダメな場合はそのコードに対する
ヘルプを読んで下さい。関連したキーワードが見つかるはずです。

『マクロの記録』と『ヘルプ』。あと『オブジェクトブラウザ』を活用すれば、
エクセルに関してはほとんどの事が、それほど苦労せずに調べられると
思いますよ。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加