2016-12-29 70 views
1

Excelのuserformのツリービューを作成しています。私は、フォームのユーザーが任意のノードの名前を編集できるようにし、labeleditプロパティが必要であることを理解したいと思いますが、コードを書く方法がわかりません。どんな形の助けでも感謝しています。excelでノードを編集するTreeView VBA

答えて

1

あなたは時代にさかのぼるマイクロソフトからActiveXコントロールをする必要がありますVisual Basic 6.0の

でこの

https://msdn.microsoft.com/en-us/library/ms172635(v=vs.90).aspx

一つは、場所制御を試してみてください(VBAはVB6のバリアントです)コントロールツールボックスに移動してリストから追加のコントロールを選択してフォームを作成するMicrosoft TreeView Control, version 6.0

オブジェクトブラウザを使用してTreeViewクラスを選択すると、あなたが使用する必要がある方法や出来事に関する調査。 LabelEditプロパティをtvwAutomaticに設定し、システムが編集を処理できるようにするか、またはAfterLabelEditまたはLabelEditプロパティを1つ設定してtvwManualに設定し、ノードをダブルクリックした場合、これをトラップしてDoubleClickイベントで手動で捕捉する必要があります。 StartLabelEditを呼び出し、AfterLabelEditを使用して編集を検証します。

いくつかのリンク:

LabelEdit Property

VB Coding Tip Treeview - Label-Editing

いくつかのサンプルコード

Option Explicit 


Private Sub TreeView1_DblClick() 
    Dim nodSelected As MSComctlLib.Node 
    Set nodSelected = TreeView1.SelectedItem 
    If nodSelected.Text <> "root" Then 
     TreeView1.StartLabelEdit 
    End If 
End Sub 

Private Sub UserForm_Initialize() 

    TreeView1.Style = tvwTreelinesPlusMinusText 
    TreeView1.LabelEdit = tvwManual 

    'Add some nodes to the TreeView 
    Dim nodRoot As MSComctlLib.Node 
    Set nodRoot = TreeView1.Nodes.Add(Key:="root", Text:="root") 

    ' 
    Dim nodChildren(1 To 2) As MSComctlLib.Node 
    Set nodChildren(1) = TreeView1.Nodes.Add(nodRoot, tvwChild, "child 1", "child 1") 
    Set nodChildren(2) = TreeView1.Nodes.Add(nodRoot, tvwChild, "child 2", "child 2") 

    Dim nodGrandChildren(1 To 3) As MSComctlLib.Node 
    Set nodGrandChildren(1) = TreeView1.Nodes.Add(nodChildren(1), tvwChild, "grandchild 1", "grandchild 1") 
    Set nodGrandChildren(2) = TreeView1.Nodes.Add(nodChildren(2), tvwChild, "grandchild 2", "grandchild 2") 
    Set nodGrandChildren(3) = TreeView1.Nodes.Add(nodChildren(2), tvwChild, "grandchild 3", "grandchild 3") 

End Sub 

Private Sub TreeView1_AfterLabelEdit(Cancel As Integer, NewString As String) 
    ' Make sure that we have a value in the Label 
    If Len(NewString) < 1 Then 
     ' The Label is empty 
     MsgBox "Error! You must enter a value" 
     Cancel = True 
    Else 
     MsgBox "You successfully edited label to " & NewString 
    End If 
End Sub 

注:(明白ではない)子ノードを展開するルートをクリックしてください。

+0

第4節で説明したように、ユーザーフォームにTreeViewコントロールを追加しますか? –

+0

あなたのユーザーフォームに移動します。トップメニューからView-> Toolboxに移動します。その後、グレーの空白領域の新しいウィンドウで右クリックし、ポップアップメニューから追加コントロールを選択し、リスト内で「Microsoft TreeView Control、version 6.0」をクリックし、「OK」をクリックします。新しいツリービューアイコンが表示されたら、クリックして、これをフォームにドラッグします。コントロールのデフォルト名はTreeview1になります。 –

+0

既にツリービューをお持ちの場合は、コードを修正すると思います。私はテキストのコンパイルエラーに困惑しています。あなたのTools-> Referencesに 'Microsoft Windows Common Controls 6.0(SP6)'がありますか? –

関連する問題