Есть ли способ поместить много разных папок в дерево - PullRequest
0 голосов
/ 26 марта 2019

Я новичок в vba, и я хочу заполнить огромный "Microsoft TreeView Control, версия 6.0" 15000 различных папок в Excel в этом формате:

/folderOne
/folderOne/subfolderOne
/folderOne/subfolderTwo
/folderTwo/subfolderOne

Я использовал решение Прадипа Кумара , но оно дает сбой в Excel, если я пытаюсь сделать это с слишком большим количеством строк (хорошо с 1000 строками, но не с 2000 строками), как показано ниже:

Sub Button1_Click()
    LoadTreeView1 TreeView1, 1, 1000
End Sub


Private Sub LoadTreeView1(TV As TreeView, min As Integer, max As Integer)
    Dim i As Integer, RootNode As Node
    TV.Nodes.Clear
    Set RootNode = TV.Nodes.Add(, , "ROOT", "ROOT")
    RootNode.Expanded = True
    For i = min To max
        AddNode TV, RootNode, Cells(i, 1)
    Next
End Sub
Private Sub AddNode(TV As TreeView, RootNode As Node, Path As String)
    Dim ParentNode As Node, NodeKey As String
    Dim PathNodes() As String

    On Error GoTo ErrH
    PathNodes = Split(Path, "/")
    NodeKey = RootNode.Key
    For i = 1 To UBound(PathNodes)
        Set ParentNode = TV.Nodes(NodeKey)
        NodeKey = NodeKey & "/" & PathNodes(i)
        TV.Nodes.Add ParentNode, tvwChild, NodeKey, PathNodes(i)
        ParentNode.Expanded = True
    Next

    Exit Sub
ErrH:
    If Err.Number = 35601 Then
        Set ParentNode = RootNode
        Resume
    End If
    Resume Next
End Sub

Мое древовидное представление выглядит хорошо в Excel, аналогично приведенному ниже, но моя проблема в том, что я не могу поместить в него достаточно данных.

enter image description here

Я экспортировал свой список в доступ, но процесс другой, и я немного растерялся, потому что, как я уже сказал, я новичок в vba.

Спасибо за вашу помощь

1 Ответ

1 голос
/ 25 апреля 2019

Основная стратегия использования элементов управления древовидной структуры - загрузка данных расширенных строк по требованию.

  • во-первых, вы загружаете только высокоуровневые элементы древовидной структуры (список клиентов)
  • после того, как пользователь щелкает узел, метод заполнения соответствующего узла дочерними элементами называется

Идея состоит в том, что никто никогда не будет прокручивать весь список элементов в древовидном представлении.

Эти детали могутбудет сложно, если вы новичок в VBA, поэтому может быть лучше использовать связанные списки.Например,

  • list1: содержит список клиентов
  • list2: содержит даты
  • после выбора элемента в list1, источник записей list2 динамически изменяется для предоставления списка только итолько элементы, которые соответствуют list1

Это решение превышает ограничения памяти для управления древовидным списком и подходит, если у вас есть определенная глубина таксономии ваших объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...