Board logo

標題: [發問] 請教 ListBox1.List 之Column疑問? [打印本頁]

作者: yangjie    時間: 2012-9-28 23:00     標題: 請教 ListBox1.List 之Column疑問?

請教大大
        Set d = CreateObject("Scripting.Dictionary")
                  With Sheets("基本資料")
                      For Each a In .Range(.Cells(2, 4), .Cells(65536, 4).End(xlUp))
                          d(a & "") = Array(a.Value, a.Offset(, -3).Value, a.Offset(, -2).Value)
                      Next
                 End With
       If d.Count = 0 Then Exit Sub
    ListBox1.Visible = True
    ListBox1.List = ?????
1.應如何寫   才能將  Array(a.Offset(, -3).Value, a.Offset(, -2).Value)之內容
   呈現於ListBox1(columncount=3)內且分出3個 column
2.cells(1,1)= 需要得到 ListBox1.column(1)之Data
   cells(1,2)=  需要得到ListBox1.column(2)之Data
   應如何寫
3.當無須ListBox1存在 如何使ListBox1.Visible = False 當focus在其他controls時
   謝謝指導
作者: Hsieh    時間: 2012-9-29 01:01

回復 1# yangjie
試試看
  1. Private Sub ListBox1_Change()  '點選LISTBOX1
  2. With ListBox1
  3. For i = 1 To 3
  4. Cells(1, i) = .List(.ListIndex, i - 1)
  5. Next
  6. End With
  7. End Sub


  8. Private Sub ListBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)  '離開LISTBOX1
  9. ListBox1.Visible = False
  10. End Sub

  11. Private Sub UserForm_Initialize()  '表單初始化
  12.         Set d = CreateObject("Scripting.Dictionary")
  13.                   With Sheets("基本資料")
  14.                       For Each a In .Range(.Cells(2, 4), .Cells(65536, 4).End(xlUp))
  15.                           d(a & "") = Array(a.Value, a.Offset(, -3).Value, a.Offset(, -2).Value)
  16.                       Next
  17.                  End With
  18.        If d.Count = 0 Then Exit Sub
  19. With ListBox1
  20. .List = Application.Transpose(Application.Transpose(d.items))
  21. .ColumnCount = 3
  22. .Visible = True
  23. End With
  24. End Sub
複製代碼

作者: yangjie    時間: 2012-9-29 10:57

感激 Hsieh 版大
   完全解決問題所在  謝了
1.學到了 .List(.ListIndex, i - 1)
2..學會  . List = Application.Transpose(Application.Transpose(d.items))
3.請教何狀況下可用. List = d.items ?
作者: stillfish00    時間: 2012-9-30 02:23

回復 2# Hsieh

想請教這邊
.List = Application.Transpose(Application.Transpose(d.items))
為什麼要做兩次的轉置才能用呢?
是不是跟陣列的維度有關??




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)