事情是這樣的。我在作業表中有一個名字串列。我將這些名稱設定為 useform 上組合框的 RowSource。涉及 2 個組合框(不是 UserForms 我的錯)。一個開始滿,另一個開始空。我想做的很簡單:當我從第一個(完整的)組合框中單擊一個名稱時,我希望將該名稱添加到另一個組合框中,并從原始組合框中洗掉。(最終反之亦然,但我還沒有到那兒)。問題是,我這輩子都不能用RemoveItem洗掉任何東西。
我通過“ Menu.ListeAjoutAg.ListIndex ”方式獲取當前選擇的索引(“ Menu ”是用戶表單,“ ListeAjoutAg ”是組合框),但它不起作用。嘗試通過我快速創建的變數“ b ”進行輸入,但結果相同。沒有索引號有效。我檢查了一下,只提供了正確的和/或在我的串列范圍內(大約 45 個名稱)的函式整數(0、1、3、4 ...)。
Private Sub ListeAjoutAg_Change()
a = Menu.ListeAjoutAg.Text
b = Menu.ListeAjoutAg.ListIndex
Menu.ListeRetirer.AddItem (a) ' goes fine till there
Menu.ListeAjoutAg.RemoveItem (b) 'and here it goes wrong
Menu.ListeRetirer.Enabled = True
Menu.ListeRetirer.Visible = True
End Sub
知道到底出了什么問題嗎?

uj5u.com熱心網友回復:
如前所述:如果設定了 Rowsource 屬性,則無法在串列框中添加或洗掉專案。
但是,從范圍中填充串列框相當容易 - 只需將單元格值復制到陣列中并將該陣列指定為List. 參見例如VBA Excel Populate ListBox with multiple columns
將以下例程放入您的表單中并從表單Activate事件中呼叫它。
Private Sub fillListBox(r As Range)
Me.ListeAjoutAg.Clear
Me.ListeAjoutAg.ColumnCount = r.Columns.Count
Dim data
data = r.Value
Me.ListeAjoutAg.List = data
End Sub
Private Sub UserForm_Activate()
Dim r As Range
' Replace this with the range where your data is stored.
Set r = ThisWorkbook.Sheets(1).Range("A2:C10")
fillListBox r
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535463.html
標籤:擅长VBA组合框用户表单
下一篇:在Excel中比較兩個字串
