Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2019)
VBA内で開いたブックの画面表示について
投稿日時: 23/01/08 11:25:54
投稿者: WinArrow
投稿者のウェブサイトに移動

VBA内で他ブックを開くことは、ごく普通のことですが、
次のような事象が発生しました。
 
環境は
VBSでBOOKA.xlsmを開きます。
BOOKA.xlsm内のSTARTプロシジャをRUNで起動します。
Start終了後、BOOKA.lsmを閉じます。
但し、Excelインスタンスは残したままにします。
 
Start内では、2つのブック(BOOK1.xlsx,BOOK2.xlsx)を開きます.
最初にBOOK1.xlsxを開き、次にBOOK2を開き、BOOK1の内容転記など・・・BOOK2を閉じます。
BOOK1は、内容更新後、手作業の補足があるため、閉じずに
Startを終了します。
 
そうすると、最終的には、BOOK1.xlsxが開いたままの状態になる
と思っていたんだが、
今回の場合は、画面が真っ白(リボン表示なし)、または、ウィンドウが空になったりする
現象になってしまいました。
何れの場合もVBEに画面切り替えて、Windows(1).Activateで表示されます。
なのでVBSにこれを組み込んだが、反応なし。
 
BOOK1.xlsxの更新なしのプロシジャを作成しテストでは、終了後、BOOk1が表示されている。
 
最初は、真っ白状態だったが、弄っているうちに、空白状態(Windows(ブック名).Visible=False)になったしまった。
BOOK1.xlsxには、テーブル機能が組み込んであるので、更新処理内で、テーブル更新をスキップして
テストするも、状況は変わらず。
VBSに戻る直前までは、BOOK!が表示されていると思われる。
 
取り敢えず、Startプロシジャとテストプロシジャを外部連結する形(VBS側)に修正したが、
原因が把握できていません。
 
どなたか、ご存知の方は、レスをお願いします。

回答
投稿日時: 23/01/09 12:19:57
投稿者: MAI-MAI

利用規約に基づき、投稿は削除されました。

回答
投稿日時: 23/01/10 11:44:28
投稿者: Suzu

文章だけで、コードが判らないのですが
 気になった点を。
 
 
1
 これらは別の状態を指している認識で良いですよね?
 ・画面が真っ白(リボン表示なし)、
 ・または、ウィンドウが空になったりする
 ・空白状態(Windows(ブック名).Visible=False
 
2
 一連を、VBS ではなく、VBAで 例えば Wordから呼び出す場合では問題は発生しないでしょうか?
 
 VBS & Excel で 最近体験した事柄として
 VBS にて、 Resume Next の後、Goto 0 の後 WorkBooks.Open にて
 別途取得したパスのブックを開いたつもりで居たのですが
 開いていないにも関わらず、エラーも発生せず 次のステップに進んでいる事がありました。
 いろいろ弄っているうちに、希望通りに動作する様になったので深く調査はしませんでしたが
 (スペースを含むファイルパスに対し、"" で括らずに渡していた事が原因かなぁ〜と)
 
3
 

引用:
テーブル更新をスキップしてテストするも、状況は変わらず。

 これは、「データ」の「データの取得と変換」で設定する外部接続されたテーブルであり
 「データ」「クエリと接続」の 「すべて更新」等の 更新をスキップと言う事でしょうか?
 
 以前あったスレッド
大したVBA処理でもないのに遅くなってしまいます
https://www.moug.net/faq/viewtopic.php?t=81717&highlight=%A5%C6%A1%BC%A5%D6%A5%EB
 
テーブル自体を解除したらどうでしょう?
 
4
 外部がある状態で、その内容を VBS側で処理しようとして、
 ODBC 接続の場合、VBS で呼び出されるのは、OSのビット数に合わせた ODBCになるので
 エラーになります。
 
まさか無いとは思いますが 上位オブジェクトを省略したり、ScreenUpdating=False、では 無いですよね・・

投稿日時: 23/01/10 12:26:48
投稿者: WinArrow
投稿者のウェブサイトに移動

ご連ら宇ありがとうございます。

Suzu さんの引用:

1
 これらは別の状態を指している認識で良いですよね?
 ・画面が真っ白(リボン表示なし)、
 ・または、ウィンドウが空になったりする
 ・空白状態(Windows(ブック名).Visible=False

最初は、「画面が真っ白」の事象が発生し、
Webで、同様の記事がありました。
複数ブックを開いた時に発生したり、
時間のかかる処理でも発生するなど
を参考にして弄ってました。
 
中に「Doevents」を入れたら、というコメントがったので、
取り入れたり、複数のブック開くをやめたりしましたが、
なぜか、途中から、「画面真っ白」がなくなり、
ウィンドウが空になった
という状況です。
「空白状態」は「ウィンドウが空」と同じです。
 
 
 
Suzu さんの引用:

2
 一連を、VBS ではなく、VBAで 例えば Wordから呼び出す場合では問題は発生しないでしょうか?
 
 VBS & Excel で 最近体験した事柄として
 VBS にて、 Resume Next の後、Goto 0 の後 WorkBooks.Open にて
 別途取得したパスのブックを開いたつもりで居たのですが
 開いていないにも関わらず、エラーも発生せず 次のステップに進んでいる事がありました。
 いろいろ弄っているうちに、希望通りに動作する様になったので深く調査はしませんでしたが
 (スペースを含むファイルパスに対し、"" で括らずに渡していた事が原因かなぁ〜と)

VBS以外では試していません。
ステップ実行で、END SUB(VBSに戻る)直前までは、シートは開いていると思われるので
VBSで
Windows(1).Visible = False

WorkBooks(ブック名).ActiVate
を組み込んでも変わりません。
 
 
Suzu さんの引用:

3
 
引用:
テーブル更新をスキップしてテストするも、状況は変わらず。

 これは、「データ」の「データの取得と変換」で設定する外部接続されたテーブルであり
 「データ」「クエリと接続」の 「すべて更新」等の 更新をスキップと言う事でしょうか?
 
 以前あったスレッド
大したVBA処理でもないのに遅くなってしまいます
https://www.moug.net/faq/viewtopic.php?t=81717&highlight=%A5%C6%A1%BC%A5%D6%A5%EB
テーブル自体を解除したらどうでしょう?

テーブル機能は、確かに遅くなることは、確認していますが、
テーブル機能を解除すると、
Excelの初心者(毎年担当者が変わる)が扱うことを想定すると
数式自動複写はありがたいので、テーブル機能は使いたいです。
 
 
Suzu さんの引用:

4
 外部がある状態で、その内容を VBS側で処理しようとして、
 ODBC 接続の場合、VBS で呼び出されるのは、OSのビット数に合わせた ODBCになるので
 エラーになります。
 
まさか無いとは思いますが 上位オブジェクトを省略したり、ScreenUpdating=False、では 無いですよね・・

 
説明が抜けていました。
Excel2019 64Bit版を使用しています。
 
なぜ、VBSを使用しているかといいますと、
直接、xlsmを開くと、「マクロを有効にする」操作が必要になるためです。
担当者が毎年変わる=その都度PCも変わる・・・ということで、
担当者のスキルもいろいろです。
 

回答
投稿日時: 23/01/10 17:17:00
投稿者: Suzu

・Excel2019 32Bit版 で、OSが 64Bit
・複数ファイルをオートメーションで開く
を行うと CPU使用率が高い Print driver host for applications が起動し マクロの速度低下がありますが
64bit との事なので、その心配は無さそうですね。
(Excelが64bitでも、Print driver host for applications は経由せず
 プリンター情報を取りに行くのは取りに行くでしょうから、その分、速度低下は起こるでしょう)
 
 
とりあえず、
・処理中なのかどうなのか タスクマネージャーから
 Excelプロセスの CPU他の 使用状況 の確認
 
・他のOffice製品のVBA で エラーにならないか確認
 
してはどうでしょうか。
コードの問題なのか だけでも 切り分けはできるかと。
 
 
私見ですが、コード等の問題ではなく、特定ファイル固有っぽい気がします。
各シートをひとつづつ削除し、テーブル・外部ファイル接続・印刷設定 等の影響が無いか
原因をつぶして行った方が早そうな気がします。
 
その上で、原因から コードで対策を行えるのか考える順番の方が確実と思いますがいかがでしょうか。

トピックに返信