2016-10-25 8 views
2

コンボボックスには複数のイベントが関連付けられています(ComboBox1_Change、Click、GotFocus、LostFocusなど)。私の目的のために、私はActiveXコントロールを使用する必要があります。いくつかの背景についてはVBAイベントを使用したActiveXコントロールの再作成(VBAを使用)

マシンがプロジェクターに接続されたとき、私は、ActiveXコントロールの不具合問題に走りました。他の人たちも同じ問題を抱えていましたが、解決策はありませんでした。私がこの問題を解決するために見つけた最良の方法は、ユーザーがクリックしてActiveXコントロールを削除して再作成する追加のボタンを作成することです。

問題は(そして私の質問)...これを行うと、VBAイベントはもう実行されません。コントロールの名前はまったく同じです。私は設定することができますActiveXコントロールのプロパティなどの簡単な修正があるので、私はVBAコードを削除し、既存のVBAコードを書き換える必要はありません(私は100%も問題を修正することはありません) ?

+0

修正する既存のコードを投稿することができますか? –

+0

コントロールはワークシートまたはユーザーフォームにありますか? – ThunderFrame

答えて

1

これは、ワークシートには、私のために働くようだ:CommandButton1CommandButton2:ワークシート上の2つのコマンドボタンと

スタート。

コードをステップ実行することはできませんが、実行されます。

Option Explicit 

Private Sub CommandButton1_Click() 
    Dim oldObj As OLEObject 
    Dim left As Double, top As Double, width As Double, height As Double 
    Set oldObj = Me.OLEObjects("CommandButton2") 

    With oldObj 
    'Rename the control to detach events 
    .Name = "CommandTEMP" 
    left = .left 
    top = .top 
    width = .width 
    height = .height 
    .Delete 
    End With 

    Dim newObj As Object 

    Set newObj = Me.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _ 
     , DisplayAsIcon:=False, left:=left, top:=top, width:=width, height:=height) 

    newObj.Name = "CommandButton2" 

End Sub 

Private Sub CommandButton2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    Me.CommandButton2.Object.Caption = Timer 
End Sub 
+0

これはうまくいっているようですが、今はコンボボックス、画面「ツイッチ」、カーソルのどこか他の場所をクリックすると問題が発生します。すべてのモジュールにブレークポイントを設定するので、VBAイベントはトリガーされません。この後、画面上のどこでもクリックできません。私はAltキーを押して別のウィンドウにし、Altキーを押してExcelに戻す必要があります。 – ConfusedNoob

+0

@ConfusedNoobは、ブレークポイントがヒットしていないことを確信しません。ある点の後にコードを進めることはできないと言いましたが、いくつかのブレークポイントはその点から無視されることに注意してください。コードがヒットしていることを確認するには 'debug.print'ステートメントを使います。 – ThunderFrame

+0

@ConfusedNoobシートまたはフォーム上のコントロールですか? – ThunderFrame

関連する問題