2009-12-01 4 views
0

Извините за мой Noobness с Excel/Vba ... из мира unix ... Мне нужна помощь!Excel TreeView несколько столбцов

Я пытаюсь построить TreeView в форме Excel из листа Excel с тремя столбцами. Лист ссылается на список кинотеатров, которые уже организованы в «древовидной структуре», где колонка A относится к названию группы кино, колонки B и C относятся к конкретным названиям и информации о кино, например:

A1:Independent Cinemas 
B2:CinemaName1 C2:Cinema1 Infos 
B3:CinemaName2 C3:Cinema2 Infos 
B4:CinemaName3 C4:Cinema3 Infos 
A5:Cineplex Cinemas 
B6:CinemaName4 C6:Cinema4 Infos 
B7:CinemaName5 C7:Cinema5 Infos 
A8:Next Group of Cinemas 
B9:..... etc etc 

После этого описания, я хочу TreeView выглядеть следующим образом:

+-A1 
---+B2,C2 
---+B3,C3 
---+B4,C4 
+-A5 
---+B6,C6 
---+B7,C7 
+-A8 
---+B9,C9 
etc... 

к сожалению для представления его хромым, но вы получите картину ... Вот то, что я до сих пор:

Private Sub TreeView_Populate() 

Dim wbBook As Workbook 
Dim wsZones As Worksheet 
Dim rngZones As Range 
Dim lngRows As Long 

Set wbBook = ThisWorkbook 
Set wsZones = wbBook.Worksheets("Cinemas") 

lngRows = wsZones.Range("A65536").End(xlUp).row 
Set rngZones = wsZones.Range("A1:A" & lngRows) 

Dim lElement As Long 
Dim rCell As Range 

With Me.ZonesTree.Nodes 
     'Clear TreeView control 
     .Clear 

     For Each rCell In rngZones 
      'We have a group name in the A columns so we attach it to the tree 
      If Not rCell.Text = "" Then 
       .Add Key:=rCell.Text, Text:=rCell.Text 
       'THIS IS WHERE I BLOCK!! 
       'Need the range from Columns B and C until the next Value in the A Column 
       'in order to add the children nodes.... 
         .Add relative:=CinemaName, _ 
          relationship:=tvwChild, _ 
          Key:=CinemaName(here it will be B column), CinemaInfos(C column) 
          Text:=CinemaName(B column) 
      End If 
     Next rCell 
End With 
End Sub 

У меня также есть .ZonesTree.LineStyle = tvwRootLines в моей форме инициализирует подпрограмму, которая создает флажки для каждого элемента дерева. Я бы хотел, чтобы все флажки были выбраны по умолчанию ...

Возможно ли это? Мне в основном нужен «временный» диапазон, содержащий значения из столбцов B et C для создания дочерних узлов ... В коде vba я добавил некоторые комментарии к тому, где Im failing ... Вся помощь/предложение будут очень благодарны!

ответ

0

Спасибо astander, вы меня на пути ...

Здесь мы идем:

Private Sub TreeView_Populate() 

Dim wbBook As Workbook 
Dim wsZones As Worksheet 
Dim rngZones As Range 
Dim rngCinemas As Range 
Dim lngRows As Long 

Set wbBook = ThisWorkbook 
Set wsZones = wbBook.Worksheets("Cinemas") 

lngRows = wsZones.UsedRange.Rows.Count 
Set rngZones = wsZones.Range("A1:A" & lngRows) 

Dim rngBC As Range 
Set rngBC = wsZones.Range("B1:C" & lngRows) 


Dim rCell As Range 
Dim lastCreatedKey As String 
Dim rowCount As Integer 
Dim currentRowRange As Range 
rowCount = 1 
lastCreatedKey = "" 

With Me.ZonesTree.Nodes 
     'Clear TreeView control 
     .Clear 

     For Each rCell In rngZones 
      If Not rCell.Text = "" Then 
       .Add Key:=rCell.Text, Text:=rCell.Text 
       lastCreatedKey = rCell.Text 
      Else 
       Set currentRowRange = rngBC.Rows(rowCount) 
       .Add Relative:=lastCreatedKey, relationship:=tvwChild, Key:=currentRowRange.Cells(, 2).Text, Text:=currentRowRange.Cells(, 1).Text 
      End If 
      rowCount = rowCount + 1 
     Next rCell 
End With 
End Sub 

Я действительно хотел, чтобы значения столбцов C в качестве значений столбца Key и B были как текст ChildrenNode.

Следующая проблема. Я использую режим флажка для этого дерева, это означает, что все узлы можно выбрать. Я хотел бы, что по умолчанию: -все чекбоксы выбраны

-когда вы выберите/отмените родительский узел, все дочерние узлы выбран/невыбранные

-Я хочу, чтобы получить выбранные данные для хранения это где-то

Кто-нибудь знает, как это сделать? С уважением, P

0

Посмотрите на это.

Получите полный диапазон для столбцов a, чтобы закодировать строки. Кроме того, получить диапазон для B, C и использовать счетчик, чтобы указать, какие строки вы на

Private Sub TreeView_Populate() 

    Dim wbBook As Workbook 
    Dim wsZones As Worksheet 
    Dim rngZones As Range 
    Dim lngRows As Long 

    Set wbBook = ThisWorkbook 
    Set wsZones = wbBook.Worksheets("Cinemas") 

    lngRows = wsZones.UsedRange.Rows.Count 
    Set rngZones = wsZones.Range("A1:A" & lngRows) 
    Dim rngBC As Range 
    Set rngBC = wsZones.Range("B1:C" & lngRows) 

    'lngRows = wsZones.Range("A65536").End(xlUp).Row 
    'Set rngZones = wsZones.Range("A1:A" & lngRows) 

    Dim lElement As Long 
    Dim rCell As Range 
    Dim rowCount As Integer 
    rowCount = 1 

    With Me.ZonesTree.Nodes 
      'Clear TreeView control 
      .Clear 

      For Each rCell In rngZones 
       'We have a group name in the A columns so we attach it to the tree 
       If Not rCell.Text = "" Then 
        .Add Key:=rCell.Text, Text:=rCell.Text 
        'THIS IS WHERE I BLOCK!! 
        'Need the range from Columns B and C until the next Value in the A Column 
        'in order to add the children nodes.... 
          .Add relative:=CinemaName, _ 
           relationship:=tvwChild, _ 
           Key:=CinemaName(here it will be B column), CinemaInfos(C column) 
           Text:=CinemaName(B column) 
       End If 
       'this is how to get the bc range 
       Dim currentRowRange As Range 
       Set currentRowRange = rngBC.Rows(rowCount) 
       Dim b As String 
       Dim c As String 
       b = currentRowRange.Cells(, 1) 
       c = currentRowRange.Cells(, 2) 
       rowCount = rowCount + 1 
      Next rCell 
    End With 
    End Sub 
Смежные вопросы