2016-12-29 7 views
1

Я пишу древовидную форму для пользовательской формы в excel. Я хочу, чтобы пользователь формы мог редактировать любое имя узла и понимать, что свойство labeledit требуется, однако я не уверен, как написать код. Любая форма помощи приветствуется.Редактирование узла в excel TreeView VBA

ответ

1

Вам нужен контроль ActiveX от Microsoft, уходящую в эпоху Visual Basic 6.0 (VBA представляет собой вариант VB6)

Попробуйте

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

Один места контроля по форму, перейдя в панель инструментов управления, а затем выбрав дополнительные элементы управления, а затем из списка Microsoft TreeView Control, version 6.0

Использование Обозревателя объектов и выбор класса TreeView позволяет исследование методов и событий, которые вам необходимо использовать. Нужно либо установить для свойства LabelEdit значение tvwAutomatic и разрешить системе обрабатывать редактирование, а один захватить событие, используя AfterLabelEdit, или один устанавливает LabelEdit свойство на 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

Вы добавляете элемент управления TreeView в пользовательскую форму, как описано в параграфе 4? –

+0

Перейдите к вашей пользовательской форме. Затем из верхнего меню перейдите в меню Вид-> Панель инструментов. Затем в новом окне в серой пустой области щелкните правой кнопкой мыши и выберите из всплывающего меню дополнительные элементы управления, а затем в списке найдите и нажмите «Microsoft TreeView Control, версия 6.0» и нажмите «ОК». Затем появится новый значок дерева, нажмите и удерживайте, а затем перетащите его в свою форму. По умолчанию для управления будет Treeview1. –

+0

Если у вас уже есть Treeview, я думаю, вы адаптируете код. Я озадачен ошибкой компиляции текста. В ваших Инструментах -> Ссылки у вас есть 'Microsoft Windows Common Controls 6.0 (SP6)' checked? –

Смежные вопросы