Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Dim xlApp As New Excel.Applicationでエラー
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30959#CommentId86194
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2024/4/10 13:55:23
> xls = GetObject(, "Excel.Application")
これは、
xls = Marshal.GetActiveObject("Excel.Application")
と書いても良いですね。
機能的には同じもので、ROT(Running Object Table) から、
指定した COM オブジェクトの実行中のインスタンスを返します。
COM サーバーとの通信が確立できなければ例外になるので、
Try~Catch する必要があるのも同じ。
ちなみにこれは、Win32 API の GetActiveObject 関数 (oleaut32.dll) を呼び出しているだけです。
https://learn.microsoft.com/ja-jp/windows/win32/api/oleauto/nf-oleauto-getactiveobject?WT.mc_id=DT-MVP-8907
> Tryの分で処理すると時間がかかるような気がするのです。
元の API 自体が、取得失敗時に HRESULT エラー コードを返す実装なので、
例外処理が必要なのは仕方ないです…。
どうしても Try ~ Catch したくないのであれば、.NET の Managed ライブラリではなく、
同等機能の Win32 API を直接 DllImport (あるいは Declare) して呼び出すようにすることで、
HRESULT を例外としてではなく、32bit整数値として直接受け取ることができます。