Microsoft Access 掲示板

EXCELオートメーション タイムアウト / 7

8 コメント
views
4 フォロー
7

提示のコードですが、行儀のいいコードではないので、下記の手順で修正してください。
そうすることで、不具合の原因を追究しやすくバグの発生しにくいものになります。

  • まず、VBAウィンドウのメニューの[ツール]-[参照設定]をクリックしてMicrosoft Excel 16.0 Object Library(数字部分はバージョンによって異なる)にチェックを入れて[OK]をクリックしてください。

  • [ツール]-[オプション]をクリックして開くダイアログで[編集]タブの[変数の宣言を強制する]にチェックを入れて[OK]をクリック。

  • 提示のコードが記述してあるモジュールの先頭に下記の1行を挿入。(既にある場合はそのままで)

    Option Compare Database
    Option Explicit    'この行の挿入
    

    これの意味は変数を使う場合は必ず宣言することを強制します。

  • ここでメニューの[デバッグ]-[`*****`のコンパイル]をクリックします。(*****はプロジェクト名)
    もし、構文間違いや変数宣言がないとその部分を指摘してくれます。

  • 提示のコードには、xlApp、xlBook の変数宣言がないので、ここでエラーが出るはずです。
    でないなら、モジュールの先頭か、標準モジュールの先頭で宣言しているはずです。
    その変数宣言を削除してください。(そのような場所で宣言する変数をグローバル変数といいますがこれはバグの元ですのでなるべく使用しないようにします。)

  • クリック時のイベントプロシージャの先頭で、この変数の宣言をします。

Private Sub Excel出力_Click()
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook 

    '以下略

Dim xlApp As Object というように宣言することもできますが、上記のように宣言するのを推奨します。
そうすると xlApp.まで入力するとプロパティやメソッドがリスト表示されますので入力が楽になるしタイプミスが減らせます。

  • MyFocus関数はとりあえず削除してください。高速化のためのものですが、今回の処理にはなくても影響は少ないと思います。うまく動作しない場合は、なるべく余計なことはしないようにした方が原因を特定しやすいです。安定して動作するようになってから、処理が重たいと感じたなら、その時に導入すればいいでしょう。

以上、を試してみてください。

通報 ...