Board logo

標題: [發問] Listbox欄位顯示的問題 [打印本頁]

作者: lifedidi    時間: 2013-12-12 08:29     標題: Listbox欄位顯示的問題

請問大大 小弟在sheet5有30幾個欄位從D欄位~AN欄位 要顯示在listbox上

但是出現了問題:

[attach]17048[/attach]

第十欄位以後就引述無效,

編碼如下,謝謝。
  1. Dim i As Integer

  2. With Listbox1
  3.     .ColumnCount = 37
  4.     .ColumnWidths = "20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt"
  5. End With

  6. With Sheet5
  7. i = 1
  8. Do While .Cells(i, "A") <> ""
  9.     With Listbox1
  10.     .AddItem
  11.     r = .ListCount
  12.     .List(r - 1, 0) = Sheet5.Cells(i, "D")
  13.     .List(r - 1, 1) = Sheet5.Cells(i, "E")
  14.     .List(r - 1, 2) = Sheet5.Cells(i, "F")
  15.     .List(r - 1, 3) = Sheet5.Cells(i, "G")
  16.     .List(r - 1, 4) = Sheet5.Cells(i, "H")
  17.     .List(r - 1, 5) = Sheet5.Cells(i, "I")
  18.     .List(r - 1, 6) = Sheet5.Cells(i, "J")
  19.     .List(r - 1, 7) = Sheet5.Cells(i, "K")
  20.     .List(r - 1, 8) = Sheet5.Cells(i, "L")
  21.     .List(r - 1, 9) = Sheet5.Cells(i, "M")
  22.     .List(r - 1, 10) = Sheet5.Cells(i, "N")
  23.     .List(r - 1, 11) = Sheet5.Cells(i, "O")
  24.     .List(r - 1, 12) = Sheet5.Cells(i, "P")
  25.     .List(r - 1, 13) = Sheet5.Cells(i, "Q")
  26.     .List(r - 1, 14) = Sheet5.Cells(i, "R")
  27.     .List(r - 1, 15) = Sheet5.Cells(i, "S")
  28.     .List(r - 1, 16) = Sheet5.Cells(i, "T")
  29.     .List(r - 1, 17) = Sheet5.Cells(i, "U")
  30.     .List(r - 1, 18) = Sheet5.Cells(i, "V")
  31.     .List(r - 1, 19) = Sheet5.Cells(i, "W")
  32.     .List(r - 1, 20) = Sheet5.Cells(i, "X")
  33.     .List(r - 1, 21) = Sheet5.Cells(i, "Y")
  34.     .List(r - 1, 22) = Sheet5.Cells(i, "Z")
  35.     .List(r - 1, 23) = Sheet5.Cells(i, "AA")
  36.     .List(r - 1, 24) = Sheet5.Cells(i, "AB")
  37.     .List(r - 1, 25) = Sheet5.Cells(i, "AC")
  38.     .List(r - 1, 26) = Sheet5.Cells(i, "AD")
  39.     .List(r - 1, 27) = Sheet5.Cells(i, "AE")
  40.     .List(r - 1, 28) = Sheet5.Cells(i, "AF")
  41.     .List(r - 1, 29) = Sheet5.Cells(i, "AG")
  42.     .List(r - 1, 30) = Sheet5.Cells(i, "AH")
  43.     .List(r - 1, 31) = Sheet5.Cells(i, "AI")
  44.     .List(r - 1, 32) = Sheet5.Cells(i, "AJ")
  45.     .List(r - 1, 33) = Sheet5.Cells(i, "AK")
  46.     .List(r - 1, 34) = Sheet5.Cells(i, "AL")
  47.     .List(r - 1, 35) = Sheet5.Cells(i, "AM")
  48.     .List(r - 1, 36) = Sheet5.Cells(i, "AN")

  49.     End With
  50.     i = i + 1
  51. Loop

  52. End With
複製代碼

作者: stillfish00    時間: 2013-12-12 09:49

回復 1# lifedidi
見ColumnCount 說明

若將 ColumnCount 設成 0,顯示的行數便是 0;若設成 -1,便顯示所有的資料行。
對一個非資料連結的資料來源而言,最多只能有 10 行 (0 到 9)。
您可用 ColumnWidths 屬性來設定控制項中的資料行寬。
作者: lifedidi    時間: 2013-12-12 09:59

回復 2# stillfish00


    原來如此!了解了!謝謝大大!
作者: stillfish00    時間: 2013-12-12 10:21

回復 3# lifedidi
要破10欄限制,1是從 .RowSource 引用工作表範圍
2是用二維陣列一次給到 .List ,如下
  1. Private Sub UserForm_Initialize()
  2.   Dim ar

  3.   With ListBox1
  4.       .ColumnCount = 37
  5.       .ColumnWidths = "20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt"
  6.   End With
  7.   
  8.   With Sheet5
  9.     ar = .Range(.[a1], .[a1].End(xlDown)).Resize(, 37).Value
  10.   End With
  11.   ListBox1.List = ar

  12. End Sub
複製代碼

作者: lifedidi    時間: 2013-12-12 14:04

回復 4# stillfish00


謝謝大大的方法,

小弟加了一些變數(因為欄位數會一直增加 從第二欄開始抓到最後一欄),但是怎麼改都抓不到值,

請教大大,謝謝。
  1. With Sheet5

  2. i = 2

  3. Do While .Cells(i, "A") <> ""
  4.    
  5. j = ".[A" & i & "]"
  6.    
  7. With Sheet5

  8. ar = .Range(j, j.End(xlDown)).Resize(, 37).Value

  9. End With

  10. Listbox1.List = ar
  11.    
  12. i = i + 1
  13.    
  14. Loop

  15. End With
複製代碼

作者: stillfish00    時間: 2013-12-12 14:44

直接用不行嗎?
  1. Private Sub UserForm_Initialize()
  2.   Dim ar

  3.   With Sheet5
  4.     ar = .Range(.[a2], .[a2].End(xlDown)).Resize(, 37).Value
  5.   End With
  6.   With ListBox1
  7.     .ColumnCount = 37
  8.     .ColumnWidths = "20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt;20 pt"
  9.     .List = ar
  10.   End With  
  11. End Sub
複製代碼
回復 5# lifedidi
作者: lifedidi    時間: 2013-12-12 15:28

回復 6# stillfish00

不好意思 我原始的DATA是COPY同一個欄資料 導致執行後結果都長一樣....

大大,謝謝你~已經解決了!!
作者: lifedidi    時間: 2013-12-17 09:54

本帖最後由 lifedidi 於 2013-12-17 09:56 編輯

回復 6# stillfish00

大大,請教您:

小弟現在用Listbox1的資料點選後 可以將資料庫的資料代到Textbox上

我的Listbox1清單的清單假如有兩筆資料

製造部 陳曉明 工程師 男 6年
生產部 莊宜慧 專員  女 7年

點第一行 Listbox1.value 的值為 製造部
點第二行 Listbox1.value 的值為 生產部

我要抓取"陳曉明" 則 點第一行 Listbox1.value = 資料庫的值 即可抓到開頭

但是下面的情形,則要抓第二欄位的資料才能正確抓到,請問該怎麼抓呢?

製造部 王天才 工程師 男 3年 
製造部 陳曉明 工程師 男 6年
生產部 莊宜慧 專員  女 7年

謝謝!
作者: stillfish00    時間: 2013-12-17 11:14

回復 8# lifedidi
我要抓取"陳曉明" 則 點第一行 Listbox1.value = 資料庫的值 即可抓到開頭

看不懂,附上檔案程式看看
作者: lifedidi    時間: 2013-12-17 11:38

回復 9# stillfish00

    [attach]17068[/attach]

檔案中我要查詢每個人的資料,

但是我這樣的方法只要遇到同部門就會卡在第一位,請大大指教,謝謝。
作者: stillfish00    時間: 2013-12-17 13:24

回復 10# lifedidi
名字會重複嗎? 不會就改用名字判斷
If Sheet1.Cells(i, 2) = ListBox1.List(ListBox1.ListIndex, 1) Then
作者: lifedidi    時間: 2013-12-17 15:30

回復 11# stillfish00


    Dear 大大

名子會有重複的時候 (但是部門 +名子 就不會重複) 我加了一段

If Sheet1.Cells(i, 1) = ListBox1.List(ListBox1.ListIndex, 0) And Sheet1.Cells(i, 2) = ListBox1.List(ListBox1.ListIndex, 1) Then

就可以了(應該...)XD

謝謝大大的幫忙!




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