• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CreateEventProc()2回目実行するとEXCELが落ちる)

CreateEventProc()2回目実行するとEXCELが落ちる

このQ&Aのポイント
  • EXCELが落ちてしまう現象が解決できずに困っています。詳しい方がいらっしゃったら教えて下さい。
  • vInsertButton()の下側をコメントアウトしてボタンを1つだけ配置すると正常に処理が完了します。vInsertButton()の処理に問題がありましたら教えていただけませんでしょうか?
  • CreateEventProc()あたりに問題がありそうなのですが分かりません。VISTA&EXCEL2007では、この現象は発生しませんでした。WinXP&EXCEL2000とWinXP&EXCEL2003でこの現象が再現しました。OfficeUpdateでは最新と表示されました。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >VISTA&EXCEL2007では、この現象は発生しませんでした。 バージョンに関わらず、そのコードでは、上手くできているとは思えません。一つのオブジェクトを入れるだけのコードだったはずです。 あくまでも、個人が使うものだと了解しています。もしも、他者の環境で使う場合は、フォームツールのほうが安全かと思います。(決して、ハングするのが原因ではありませんが、セキュリティの関係で、Application Extensibilityを入れる方法が好まれません。) さて、コードのほうですが、原因は、イベントコード追加の時に、VBEditor に書き込むときに、Sheet1 モジュールが、Activate してしまい、その上にコードが走ろうとするので、ハングするのではないかと思います。 以下の場合は、二つに別けて、Control名を確保して、モジュールに一気にコードを書けばよいと思います。 '----------------------------------------- Dim arNames(1) As String Dim i As Long Private Sub Main1() i = 0 Erase arNames() Call vInsertButton("button1", 2, 1) Call vInsertButton("button2", 2, 2) Call AddLines End Sub Private Sub vInsertButton(ByVal strButtonName As String, ByVal iRow As Integer, ByVal iCol As Integer)   ' ボタン追加 Dim clButtonRange As Range Dim objButton As OLEObject   With Worksheets("Sheet1")     Set clButtonRange = .Range(.Cells(iRow, iCol), .Cells(iRow, iCol))     Set objButton = .OLEObjects.Add(classtype:="Forms.CommandButton.1", _     link:=False, displayasicon:=False, _     Left:=clButtonRange.Left, Top:=clButtonRange.Top, _     Width:=clButtonRange.Width, Height:=clButtonRange.Height)     objButton.Object.TakeFocusOnClick = False     objButton.Object.Caption = strButtonName   End With   arNames(i) = objButton.Name   Set objButton = Nothing   i = i + 1 End Sub Sub AddLines()   'クリックイベントコード追加    Dim iLineCounter As Long    Dim objName As Variant   For Each objName In arNames   With ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule     iLineCounter = .CreateEventProc("Click", objName)     .InsertLines iLineCounter + 1, "MsgBox ""abc"""   End With   Next objName End Sub

sola32
質問者

お礼

無事動きました。 ありがとうございました。