2017-11-19 6 views
0

の代わりにListviewにワークブック名​​とワークシート名を表示すると、上記のコードを使用して、Lisbox1の開いているブック名とListbox2のそれぞれのワークシートをUserフォームで表示します。しかし、Listview1とListview2を代わりに使用したいと思っています。なぜなら、ワークブック名​​とワークシート名のそれぞれの横に、Listview1とListview2で動作するように変更するにはどのような変更が必要かを示したいからです。WB1のListbox

Option Explicit 

Private Sub UserForm_Initialize() 
    Dim wb As Workbook 

    Me.Caption = "Workbooks and Sheets Detail" 

    For Each wb In Application.Workbooks 
     ListBox1.AddItem wb.Name 
    Next wb 

End Sub 


Private Sub ListBox1_Click() 
    Dim sWorkbookname As String 

    sWorkbookname = ListBox1.List(ListBox1.ListIndex) 
    ListWbWorksheets sWorkbookname 

End Sub 

Private Sub ListWbWorksheets(ByVal psWorkbookName As String) 
    Dim targetWb As Excel.Workbook 
    Dim n As Long 

    Set targetWb = Application.Workbooks(psWorkbookName) 
    ListBox2.Clear 

    For n = 1 To targetWb.Sheets.Count 
     ListBox2.AddItem targetWb.Sheets(n).Name 
    Next n 

    Set targetWb = Nothing 
End Sub 

答えて

2

Listviewの使い方については、試行錯誤します。これはあなたに良いスタートを与えるはずです。

enter image description here

Private Sub ListView1_Click() 
    Dim ws As Worksheet 
    Dim item As ComctlLib.ListItem 
    ListView2.ListItems.Clear 

    For Each ws In Workbooks(ListView1.SelectedItem.Text).Worksheets 
     Set item = ListView2.ListItems.Add(Text:=ws.Name) 
    Next 

End Sub 

Private Sub UserForm_Initialize() 
    Dim wb As Workbook 
    Dim item As ComctlLib.ListItem 

    With ListView1 
     .View = lvwReport 
     .MultiSelect = False 
     .ColumnHeaders.Add Text:="Workbooks" 
     .ColumnHeaders.Add Text:="Paths" 
    End With 

    With ListView2 
     .View = lvwReport 
     .MultiSelect = False 
     .ColumnHeaders.Add Text:="Worksheets" 
    End With 

    For Each wb In Workbooks 
     Set item = ListView1.ListItems.Add(Text:=wb.Name) 
     item.SubItems(1) = wb.Path 
    Next 
End Sub