• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAでユーザーフォームが表示されない)

Excel VBAでユーザーフォームが表示されない

このQ&Aのポイント
  • Excel VBAでユーザーフォームが表示されずエラーが発生している場合、AとBの二つのExcel97-2003形式のxlsファイルが関与している可能性があります。
  • Aを開くとBを読み取り専用で開き、Bを開いたらアドインのモジュールを呼び出すように設定されています。
  • しかし、アドインからAを保存せずに閉じさせ、Bのデータを使用してフォームを表示する際にエラーが発生しているようです。具体的なエラーメッセージは提供されていませんが、この問題を解決するためのよりスマートな手法を探しています。

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

  • ベストアンサー
回答No.1

----------------------- 現在うまく行かない理由 ----------------------- [A.xls].Workbook_Open 【   ・A.XLSを最小化   ・B.XLSを開く   [アドイン.xla].Admin   【     ・A.xlsを閉じる       →→※※ [A.xls].Workbook_Openが終了     ・UserFormを表示       →→※※ 呼び出し元が終了しているので、ここまで辿り着かない   】 】 ----------- 実現方法例 ----------- [A.xls].Workbook_Open 【   ・A.XLSを最小化   ・B.XLSを開く   ・アドインタイマー起動要求   [アドイン.xla].Admin   【     ・A.xlsをアドイン内部で記憶     ・タイマーを開始   】 】 [アドイン.xla].タイマー 【   ・タイマーが複数回起動しないように切断   ・アドイン内部で記憶をしているA.XLSを閉じる   ・UserFormを表示 】 ※~~~以下サンプル 開始~~~ '----------------- '-- A.XLS '-- ThisWorkbook '----------------- Option Explicit Private Sub Workbook_Open()   Dim l_xlsData As Workbook   ActiveWindow.WindowState = xlMinimized   Set l_xlsData = Workbooks.Open("C:\B.xls", ReadOnly:=True)   l_xlsData .Activate   Call Application.Run("'アドイン.xla'!Module_関数.Admin", Me) End Sub '----------------- '-- アドイン.xla '-- Module_関数 '----------------- Option Explicit Private Declare Function SetTimer Lib "USER32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "USER32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Private m_xlsBook As Workbook Private m_lngTimerID As Long Public Sub Admin(p_xlsBook As Workbook)   Set m_xlsBook = p_xlsBook   m_lngTimerID = SetTimer(0&, 31000&, 0&, AddressOf TimerProc) End Sub Public Sub TimerProc()   'タイマーが複数回起動しないように切断   KillTimer 0&, m_lngTimerID   'アドイン内部で記憶をしているA.XLSを閉じる   Call m_xlsBook.Close(False)   'UserFormを表示   UserForm1.Show vbModal End Sub ※~~~以上サンプル 終了~~~ ----- 補足 ----- Aの処理を ・B.xlsを開く ・アドインタイマー起動要求を発行(パラメータはB.xls) ・A.XLSを閉じる というような流れにした方が、機能を簡潔に出来るかもしれませんね。

KRCRE0507
質問者

お礼

ありがとうございます! サンプルマクロを仕様に合わせて入力したところ、こちらの意図したとおりに動いてくれました。 なぜタイマーを使うのだろう?など分からないこともありますが。。。 本当にありがとうございました。

関連するQ&A