Board logo

標題: [發問] ListBox1.ColumnCount = 2時,如何AddItem?如何取出? [打印本頁]

作者: yangjie    時間: 2014-12-6 21:47     標題: ListBox1.ColumnCount = 2時,如何AddItem?如何取出?

請教各位大大
     Dim d As Object, a, b
    Set d = CreateObject("Scripting.Dictionary")
    With .Sheets("基本資料")
                .Visible = True
                For i = 1 To .Cells(65536, 4).End(xlUp).Row
                    d(.Cells(i, 4).Text) = .Cells(i, 5)
                Next
    End  With
    a = d.Keys
    b = d.Items
   ListBox1.ColumnCount = 2
問題是:
1.AddItem時   如何使    ListBox1.List (column(1) )= d.Keys  而  column(2) AddItem是  d.Items
          ListBox1.List= d.Keys  僅是column(1)
2 當  ListBox1_Click()
   如何使        TextBox1 = ListBox1.Value(第一個column)
                       TextBox2= ListBox1.Value(第二個column)
懇請指導    謝謝
作者: GBKEE    時間: 2014-12-7 07:58

本帖最後由 GBKEE 於 2014-12-7 08:01 編輯

回復 1# yangjie
  1. Option Explicit
  2. Private Sub UserForm_Initialize()
  3.     Dim d As Object, a As Integer, i As Long
  4.    ' Set d = CreateObject("Scripting.Dictionary")
  5.     ListBox1.ColumnCount = 2
  6.     With Sheets("基本資料")
  7.          .Visible = True
  8.         For i = 1 To .Cells(65536, 4).End(xlUp).Row
  9.             ListBox1.AddItem
  10.             a = ListBox1.ListCount - 1
  11.             ListBox1.List(a, 0) = .Cells(i, 4)
  12.             ListBox1.List(a, 1) = .Cells(i, 5)
  13.         Next
  14.     End With
  15.    ' a = d.Keys
  16.    ' b = d.Items
  17. End Sub
  18. Private Sub ListBox1_Click()
  19.     Dim a As Integer
  20.     a = ListBox1.ListIndex
  21.     TextBox1 = ListBox1.List(a, 0)
  22.     TextBox2 = ListBox1.List(a, 1)
  23. End Sub
複製代碼

作者: yangjie    時間: 2014-12-8 15:20

本帖最後由 yangjie 於 2014-12-8 15:22 編輯

回復 2# GBKEE
謝謝
不用Dictionary 而達到目的,我受教了。
For i = 1 To .Cells(65536, 4).End(xlUp).Row
            ListBox1.AddItem
            a = ListBox1.ListCount - 1  
            ListBox1.List(a, 0) = .Cells(i, 4)
            ListBox1.List(a, 1) = .Cells(i, 5)
Next
其中
a = ListBox1.ListCount - 1  可能得到 -1值
如何避免?
作者: GBKEE    時間: 2014-12-8 16:20

本帖最後由 GBKEE 於 2014-12-8 16:22 編輯

回復 3# yangjie
ListBox1.ListCount= -1
表示 ListBox1.List是空的陣列
  1. ListBox1.AddItem
  2. '有AddItem: ListBox1.ListCount不會是 -1
  3. a = ListBox1.ListCount - 1
複製代碼

作者: yangjie    時間: 2014-12-23 13:00

回復 2# GBKEE
請教GBKEE版大
因listbox1用additem增加item而不是用.referto作list
(因為資料來源有選擇性(可能是第3,4,8,12,13,14,18.....列)
故如何設定或令使第一列listitem不動,(scrollbars轉動時)
也就是說將第一列設定為標頭columnheads(或類似)
敬請指導  謝謝
作者: GBKEE    時間: 2014-12-24 07:15

回復 5# yangjie

(因為資料來源有選擇性(可能是第3,4,8,12,13,14,18.....列)
你無法將不連續的Range指定給RowSource

可轉個彎, 在(additem)時在指定的Range("xxx")將資料複製下去
ListBox1.RowSource = Range("xxx").Address
作者: yangjie    時間: 2014-12-24 17:26

本帖最後由 yangjie 於 2014-12-24 17:31 編輯

回復 6# GBKEE
謝謝GBKEE版大
ListBox2.Clear
    wb1.Activate
    With Sheets("新生資料")
        If TextBox11 = 0 Then
            row1 = .Cells(65536, 5).End(xlUp).Row
            If row1 < 2 Then Exit Sub
            Dim mystr As String
            With Application.Names.Add("Tmp", .Range(.Cells(2, 1), .Cells(row1 - 5, 11)))
                mystr = .RefersTo
                .Delete
            End With
            With ListBox2
                .ColumnCount = 11
                .RowSource = mystr
                .ColumnHeads = True
            End With
'要加入.Range(.Cells(row1 - 1, 1), .Cells(row1 - 1, 11))
            With ListBox2
                .AddItem
                .RowSource = .Range(.Cells(row1 - 1, 1), .Cells(row1 - 1, 11))
            End With
      End With
偵錯說:沒有此成員或....無法加入 或移除部分
另有一問題  當ListBox2_Click
MsgBox ListBox2.List(ListIndex, 3)
MsgBox ListBox2.List(ListIndex, ?)如何可找出該列的 Row?
作者: GBKEE    時間: 2014-12-25 07:07

回復 7# yangjie
ListBox2.List(ListIndex, ?)如何可找出該列的 Row?
這 ? 應該是欄, Row= ListIndex + 1
  1. 'ListBox2.Clear 'RowSource給位置後這.Clear會有錯誤
  2.     ListBox2.RowSource = ""
  3.     wb1.Activate
  4.     With Sheets("新生資料")
  5.         If TextBox11 = 0 Then
  6.             row1 = .Cells(65536, 5).End(xlUp).Row
  7.             If row1 < 2 Then Exit Sub
  8.             Dim MYSTR As String
  9.             With Application.Names.Add("Tmp", .Range(.Cells(2, 1), .Cells(row1 - 5, 11)))
  10.                 MYSTR = .RefersTo
  11.                 .Delete
  12.             End With
  13.             With ListBox2
  14.                 .ColumnCount = 11
  15.                 .RowSource = MYSTR
  16.                 .ColumnHeads = True
  17.             End With
  18.             ListBox2.RowSource = .Range(.Cells(row1 - 1, 1), .Cells(row1 - 1, 11))
  19.          End If
  20.       End With
複製代碼





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