@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Excelの「オプション」等が開かれているかチェックする方法

1
投稿者投稿内容
マサ
会議室デビュー日: 2006/06/09
投稿数: 3
投稿日時: 2006-06-09 23:06
VB.NET2003からExcelを制御しています。

Excelの「ツール」→「オプション」やグラフウィザードを開いた状態で、
VB.NETからBook操作を実行したりBookのマクロを実行しようとすると、エラーが発生します。

そのため、VB.NETからBookの操作を実行する前にExcelの「オプション」「グラフウィザード」を開いているかチェックし、開いていたらBook操作を保留したいと考えています。

Excelの「オプション」画面や「グラフウィザード」画面が開かれているか、チェックするすべは無いでしょうか?
(もしくは、Excelのメニューバーのどれがクリックされたかなど)

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-10 09:01
引用:

マサさんの書き込み (2006-06-09 23:06) より:

Excelの「オプション」画面や「グラフウィザード」画面が開かれているか、チェックするすべは無いでしょうか?
(もしくは、Excelのメニューバーのどれがクリックされたかなど)


挙げたものに関わらず、ダイアログが表示されていると、HRESULT からの例外が発生します。
確実な回避方法はありません。

以下のように 5 回くらい試行してみるなど、基本は運用カバーになります。

コード:

    While (True)
        Dim exceptionCount As Integer

        Try
            xlRange.Value2 = "MakiMaki"
            Exit While
        Catch ex As Exception When exceptionCount < 5
            exceptionCount += 1
            Application.DoEvents()
            System.Threading.Thread.Sleep(1000)
        End Try
    End While


こういう問題を孕むので、何かをするのであれば Excel を起動した直後にすべきです。
起動して、ユーザーに操作をさせた後で何かをする、という運用はあまりなさそうなのですが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
マサ
会議室デビュー日: 2006/06/09
投稿数: 3
投稿日時: 2006-06-12 02:30
じゃんぬねっとさん、アドバイスありがとうございます。
返答が遅くなって申し訳ありませんm(__)m

VB.NETのアプリケーションから定期的にVBA処理でSheetを自動更新し、VBA実行時以外はユーザーが自由に操作可能なソフトを組んでいるので、こういった問題が発生してます。^^;
起動時に開かれたら困るメニューを非表示にする等の方法は、最終手段として考えているのですが、まずはご提示いただいた例外catchからの認識で、どこまで対処できるか試してみようと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-12 06:56
引用:

マサさんの書き込み (2006-06-12 02:30) より:

VB.NETのアプリケーションから定期的にVBA処理でSheetを自動更新し、VBA実行時以外はユーザーが自由に操作可能なソフトを組んでいるので、こういった問題が発生してます。^^;


そうであれば、Book 側のマクロで実装した方が負荷は少ないですよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
マサ
会議室デビュー日: 2006/06/09
投稿数: 3
投稿日時: 2006-06-14 09:10
>そうであれば、Book 側のマクロで実装した方が負荷は少ないですよ。
若干VB.NETが直接Excelを操作する部分もありますが、メインのVBA更新処理はBookのマクロに実装して、VB.NETからそのマクロを呼び出して処理するようにしています。

最終的には、「オプション」「印刷プレビュー」などを開いた状態でマクロを実行したら例外がでる処理を、メインのマクロを走らす前に実行して例外をCatchし、チェックするようにしました。
ただし、「グラフウィザード」を開いていた場合は、グラフの.SetSouceDataや軸設定等で例外がCatchできましたが、Excelの「グラフウィザード」画面を閉じた瞬間にExcelが例外を起こしてしまうので、グラフウィザードは起動時にボタンを押せなくしました。

じゃんぬねっとさん、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)