返回列表 上一主題 發帖

[發問] listbox rowsource用法

[發問] listbox rowsource用法

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

各位大神們
範例.JPG
2021-7-16 08:44

如圖,我如果不要E欄,該怎麼修改,然後有辦法不要空白儲存格嗎,因為我有合併儲存格,他會抓到空白的
  1. With ListBox1
  2. Set Rng = Worksheets("Sheet1").Range("D2:D100", "F2:F100")
  3. .RowSource = Rng.Address
  4. End With
複製代碼
這是我寫的程式碼

回復 1# wang077
有人有想法嗎
:'(

TOP

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

回復 2# wang077


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

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

否則抬頭會被切

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

但我印象這個好像是用迴圈+判斷 然後 add 一筆一筆加的?

TOP

回復 1# wang077


資料可先裝入數組,再從數組循環將空白排除就可以了,謝謝。

TOP

本帖最後由 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))
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 1# wang077


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

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

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

Set Rng = Worksheets("Sheet1").Range("D2:D100, F2:F100")
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 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  盡量寫出 控件失敗的警告提示模組 避免不知者 在沒安裝的情況下開啟 到時候開發者就會費時費力變冤大頭


順便討論整理蒐集到的資訊
有錯煩請糾正一下 謝謝大神們

TOP

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

回復 7# singo1232001


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

如何製作listbox新修刪封 v2.zip (91.2 KB)

如何製作listbox刪除復原修改訂單.zip (62.79 KB)

TOP

回復 4# samwang
了解,謝謝大大

TOP

回復 5# n7822123
可大大這段程式碼好像不能區分成兩欄
1.jpg
2021-7-17 21:02

2.jpg
2021-7-17 21:03

TOP

        靜思自在 : 人的眼睛長在前面,只看到別人的缺點,絲毫看不到自己的缺點。
返回列表 上一主題