Board logo

標題: [發問] listbox rowsource用法 [打印本頁]

作者: wang077    時間: 2021-7-16 08:45     標題: listbox rowsource用法

本帖最後由 wang077 於 2021-7-16 08:47 編輯

各位大神們
[attach]33655[/attach]
如圖,我如果不要E欄,該怎麼修改,然後有辦法不要空白儲存格嗎,因為我有合併儲存格,他會抓到空白的
  1. With ListBox1
  2. Set Rng = Worksheets("Sheet1").Range("D2:D100", "F2:F100")
  3. .RowSource = Rng.Address
  4. End With
複製代碼
這是我寫的程式碼
作者: wang077    時間: 2021-7-16 14:25

回復 1# wang077
有人有想法嗎
:'(
作者: singo1232001    時間: 2021-7-17 02:17

本帖最後由 singo1232001 於 2021-7-17 02:19 編輯

回復 2# wang077


綁原始資料來源
就是呈現資料來源

如果要不同的資料呈現
創個新的暫存工作表
把要的資料貼在那張表上
在用ListBox去連結新表

否則抬頭會被切

另外 我沒有試過用陣列綁
如果創表不喜歡
可以試著綁陣列看看
但不確定 我沒綁過

但我印象這個好像是用迴圈+判斷 然後 add 一筆一筆加的?
作者: samwang    時間: 2021-7-17 10:10

回復 1# wang077


資料可先裝入數組,再從數組循環將空白排除就可以了,謝謝。
作者: n7822123    時間: 2021-7-17 14:59

本帖最後由 n7822123 於 2021-7-17 15:11 編輯

回復 1# wang077


RowSource 不能使用離散範圍,只能是連續範圍,通常是寫SQL語法直接連結到某資料庫

要使用  RowSource 只能把你原本的表 經過整理(排除空白),輸出到另一個表,使其變成連續範圍才能引用

上面這一步寫起來反而"繁瑣",所以我通常不會這樣做,我習慣用 "List" 屬性 賦予陣列值

直接改寫你原本程式如下,請試看看~


For Each Rg In [Sheet1!D2:D100,Sheet1!F2:F100].SpecialCells(2)
  xList = xList & " " & Rg
Next
ListBox1.List = Split(Mid(xList, 2))

作者: n7822123    時間: 2021-7-17 15:29

回復 1# wang077


順便糾正你範圍的寫法,以下範圍會含"E欄"

Set Rng = Worksheets("Sheet1").Range("D2:D100", "F2:F100")

如果你"不要E欄",要這樣寫,仔細看,不一樣的喔

Set Rng = Worksheets("Sheet1").Range("D2:D100, F2:F100")
作者: singo1232001    時間: 2021-7-17 16:03

本帖最後由 singo1232001 於 2021-7-17 16:17 編輯

回復 3# singo1232001

抱歉!今天玩了一下
    補充 並修正 我自己說過的部分

listbox匯入資料時 分成兩種方式
1    RowSource綁定繫結方式 只要用上RowSource之後 listbox 內中的任何資料 ,無法再做變更,唯讀模式
1.0 破解小技巧:可新創一個隱藏工作表當作listbox暫存區 ,只要將資料整理號放入新工作表即可(最推薦又最快的做法)
1.1 若原本被綁定的工作表範圍內資料有任何變動 listbox內的資料 會同步變動(所以想改listbox內的資料 就要去改暫存用的工作表)
1.2 綁定工作表範圍 必定相連 不可分割 不可單選 不可union
1.3 不可additem 不可removeitem
1.4 標頭不用列入範圍內 只要RowSource綁下一列 後續加上 ListBox1.ColumnHeads = True 第一列的標頭就會產生

2     .additem資料逐筆匯入方式
2.1 原始資料與listbox內的資料不同步 哪邊變動都不影響另一邊
2.2 每列都必須先.additem 才可利用list 放入資料 資料可從任何類型匯入 工作表,陣列,外部資料庫
       (也可以不用迴圈,直接整張陣列一次匯入)
2.3  必須用.ColumnCount = 4  去創造欄位 (4為欄位數量)
2.4  必須用.ColumnWidths = "20,20,20,20"     '設置每個欄位數寬度 20為寬度pt
2.5  .RowSource = True 標頭可以另外添加 但無法變更抬頭 就很無奈是個空白
2.6  另外用各種控件改裝標頭 也會碰上資料量多的時候 水平滾輪 不會跟著一起影響改裝標頭的水平橫移(感覺office完全不想理這件事情了)
       想當然 如果資料不會太長 超過水平寬度 當然就沒問題能爽用

3     ListView
3.1 聽說很好用(目前還在學,有學了但不是很熟)
3.2  與新版excel2016 2019兼容但需手動安裝 以前是自動兼容
        (也可能我講反 可能是2003 2007 不支援 要額外下載安裝包)
        (但好像也有說是32位元的office無法安裝) 進excel>檔案>帳戶>關於excel 裡面有位元
        拍謝無法確定
3.3  必須在檔案內寫一篇 如何手動安裝控件的說明 或者請人上網查 每換台電腦都需要重新設定一次
3.4  盡量寫出 控件失敗的警告提示模組 避免不知者 在沒安裝的情況下開啟 到時候開發者就會費時費力變冤大頭


順便討論整理蒐集到的資訊
有錯煩請糾正一下 謝謝大神們
作者: singo1232001    時間: 2021-7-17 16:32

本帖最後由 singo1232001 於 2021-7-17 16:35 編輯

回復 7# singo1232001


另外這是去年 還不會"陣列" 跟 "set"方式時寫的測試檔
很陽春 很菜 很多bug
但或許因為很直接很直白 或許比較好讀
將就著看
而且我覺得這是一個練習"OOP物件導向"的好題目!
但這兩份檔案 我都沒用上OOP
硬著頭皮暴力code
作者: wang077    時間: 2021-7-17 20:59

回復 4# samwang
了解,謝謝大大
作者: wang077    時間: 2021-7-17 21:03

回復 5# n7822123
可大大這段程式碼好像不能區分成兩欄
[attach]33670[/attach]
[attach]33671[/attach]
作者: wang077    時間: 2021-7-17 21:04

回復 6# n7822123
我後來有試過
Set Rng = Worksheets("Sheet1").Range("D2:D100, F2:F100").SpecialCells(xlCellTypeVisible)
但好像不能這樣寫
作者: wang077    時間: 2021-7-17 21:09

回復 8# singo1232001
大大好強,受益良多
作者: n7822123    時間: 2021-7-18 14:44

本帖最後由 n7822123 於 2021-7-18 14:47 編輯

回復 10# wang077


只是一個雛型罷了,你沒給原始資料,沒人知道你是怎麼空白,怎麼合併儲存格的

你的問題在於,要先做資料整理,才能塞入 Listbox

重點在於資料整理,而不是怎麼塞入 ListBox


作者: n7822123    時間: 2021-7-18 15:13

本帖最後由 n7822123 於 2021-7-18 15:26 編輯

回復 10# wang077


盲寫給你,請測試,如果程式出錯,請給個原始資料吧!

不知道你的原始資料,還要寫VBA給你

那已經不是VBA技術問題了,是在考驗猜測能力!



Dim Arr, Brr(), R%, K%
'原始資料入陣列Arr
With Sheets("sheet1")
  Arr = Range(.[D2], .Cells(Rows.Count, "F").End(3))
End With
'整理資料,Arr=>Brr
For R = 1 To UBound(Arr)
  If Arr(R, 1) <> "" And Arr(R, 3) <> "" Then  '排除D、F列空白
    K = K + 1: ReDim Preserve Brr(1 To 2, 1 To K)
    Brr(1, K) = Arr(R, 1): Brr(2, K) = Arr(R, 3)
  End If
Next R
Brr = Application.Transpose(Brr)
'塞入資料 Brr => ListBox
With ListBox1
  .List = Brr
  .ColumnCount = UBound(Brr, 2)
End With

作者: wang077    時間: 2021-7-18 20:15

回復 14# n7822123
抱歉,在此附上檔案
因為有篩選,所以用了SpecialCells(xlCellTypeVisible)
[attach]33677[/attach]
作者: singo1232001    時間: 2021-7-18 21:12

本帖最後由 singo1232001 於 2021-7-18 21:21 編輯

回復 15# wang077


    我用字典搭配測試  可參考
作者: n7822123    時間: 2021-7-18 22:19

本帖最後由 n7822123 於 2021-7-18 22:33 編輯

回復 15# wang077


這樣嗎?

[attach]33680[/attach]

[attach]33681[/attach]
作者: n7822123    時間: 2021-7-18 23:00

本帖最後由 n7822123 於 2021-7-18 23:03 編輯

回復 17# n7822123


上一個發的檔案有Bug,用這個吧

基本上你的篩選,對資料整理沒什麼幫助~~

下次記得早點放上檔案,就不用花這麼多時間釐清了




[attach]33682[/attach]
作者: wang077    時間: 2021-7-19 08:08

回復 16# singo1232001
感謝大大幫忙
作者: wang077    時間: 2021-7-19 08:09

回復 18# n7822123
好的,抱歉,疏忽了
謝謝大大的幫忙、教導




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