• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル保存終了時間が長い為の問題)

Excel保存終了時間の問題とは?

このQ&Aのポイント
  • ExcelVBAで作成したファイルを使用している際に、保存終了する際に時間がかかり、操作が二重に行われることがあります。
  • この問題により、ファイルが壊れる可能性もあります。
  • 終了処理中の別の終了処理要求を受け付けない方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

Application.Visible = False これで、Excel自体が見えなくなります。(つまり、操作不可能) 保存が済んだらVisibleプロパティをTrueにします。 もし、Excel2003等で、Excel本体のウィンドウハンドルが入手できれば GetWindowLong、SetWindowLongでウィンドウをDISABLEにすることも できます。(DISABLE中は可視状態だが、操作を受け付けない)

tt246
質問者

お礼

ありがとうございます。 DISABLEに出来れば良いのですが、ウィンドウハンドルの知識はありません。 Visibleプロパティを色々試行しました。 作成したExcelVBAは、親Bookが複数の子BookをOpenする形をしています。 Visible=Falseにすると、開いている全てのBookが見えなくなってしまう為、各Bookを次の様にしました。 Private Sub Workbook_Deactivate()   UserForm1Menu.Hide ''←既存処理です   If (Workbooks.Count = 1) Then   ActiveWorkbook.Application.Visible = False   End If End Sub これで上手く動作しました。 難点は砂時計が表示されなくなったので、保存して終了した事を目視できないと云う事です。 次の段階では、せめて親Bookだけでも、変更有無に関わらず保存終了にしようかと色々試してみようと思っています。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

DISABLEの方法 Declare Function SetWindowLongA& Lib "user32" _   (ByVal H&, ByVal S&, ByVal L&) Declare Function GetWindowLongA& Lib "user32" _   (ByVal H&, ByVal S&) Const GWL_STYLE = -16 Const WS_DISABLED = &H8000000 Sub 無効化() 'DISABLEにする Dim H&, S& H = Application.hwnd S = GetWindowLongA(H, GWL_STYLE) S = S Or WS_DISABLED SetWindowLongA H, GWL_STYLE, S End Sub Sub 有効化() 'ENABLEにする Dim H&, S& H = Application.hwnd S = GetWindowLongA(H, GWL_STYLE) S = S And (Not WS_DISABLED) SetWindowLongA H, GWL_STYLE, S End Sub

tt246
質問者

お礼

ありがとうございます。 Workbook_Activate()において有効化() Workbook_Deactivate()において無効化() を試みました。 (他の箇所での挿入タイミングはわかりませんので) Excel本体を終了する分には良いのですが、Bookを終了させると、残ったExeclに対して何も操作出来ないと云う問題が生じました。 故に、当面はApplication.Visibleの方法で進めたいと思います。 保存終了時のWorkbook_Deactivate()ですが、Excel本体終了時は直ぐにイベントが発生しますが、Bookのみの終了時は、長い時間保存処理を行なってから最後の方でイベントが発生する様です。 Disable/Enableのハンドラは別の部分で応用したいと思います。 ただしプログラムの意味は大雑把しか分かりませんので、ハンドラのDLLを入手して、実行時にリンクする形式に持っていきたいと思います。 10年以上前にCプログラマーを引退しました。もうDLLを作る意欲と体力はありませんので、フリーソフトをVBにくっ付けて動かせれば良いかなあと思っています。

関連するQ&A

専門家に質問してみよう