2

Excel 2003 VBA プロジェクトで、MSCOMCTL.OCX の TreeCtrl を使用しています。コントロールをアプリケーションのフォームに動的に追加します (以下のコードを参照)。

TreeCtrl の NodeClick イベントを処理したいと思います。

コントロールは動的に追加されるため、TreeCtrl_NodeClick を使用するだけでは機能しないようです。また、コンパイル時に不明な型では機能しないように見えるため、WithEvents アプローチを使用できません。

'Does not work. WithEvents probably only works on known data types that have events.
'private WithEvents treeCtrl As Object 

'This code adds the control to the form
Private Sub UserForm_Initialize()
    Dim treeCtrl As Object
    Set treeCtrl = Me.Controls.Add("MSComctlLib.TreeCtrl.2", "MyTreeCtrl")
    'Does not work: AddHandler is not available in VBA.
    'AddHandler TreeCtrl.NodeClick, AddressOf UserForm1.MyTreeCtrl_NodeClick 
End Sub

'This is supposed to be the event handler but it does not get called.
Private Sub MyTreeCtrl_NodeClick(ByVal Node As Object) 
    MsgBox "Node clicked"
End Sub

MSCOMCTL.OCX を動的にロードする必要があることに注意してください。VBA プロジェクトに静的参照として配置することはできません (プロジェクトは異なるバージョンの Excel で実行する必要があるため)。

4

1 に答える 1

3

MS からのこの応答によると、「Excel VBA を使用してランタイムに追加された TreeView コントロールのイベントを処理することはできません」とありますが、VB6(!) を使用した回避策が提案されています。

設計時にコントロールを追加し、オプションが必要になるまで非表示にしますか?

于 2012-12-27T14:16:12.713 に答える