2010-11-17 75 views

回答

1

好吧,不要再回答我自己的問題,但這個Excel的ComboBox的ListFillRange屬性是非常令人發狂。這是我實現的最終代碼。這裏

Sheet1.Range("E3").CurrentRegion.Select 
    Dim example as Range 
    Set example = Selection 

    With cmbMyBox 
    .ListFillRange = example.Address(0, 0, x1A1, True) 
    End With 

麻煩的是,我試圖動態設置使用它的變化取決於被賦予什麼樣的用戶輸入值的動態範圍組合框。據我所知,我不能使用命名範圍,因爲命名範圍是固定的,例如(A3:Z20)並且無法調整。

+0

不會是固定上面listItems:「= Sheet1!$ A $ 1:INDEX(Sheet1!$ A:$ A; COUNTA(Sheet1!$ A:$ A))」 – David 2013-05-23 07:02:01

9

首先,對於試圖設置VBA中的listfillrange,你需要包括「=」號,這樣的:

combobox.ListFillRange = "=E3:E13" 

,而不是combobox.ListFillRange = "E3:E13",這將無法工作。

你可以有一個動態命名的區域,例如:

listItems: "=Sheet1!$A$1:INDEX(Sheet1!$A:$A;COUNTA(Sheet1!$A:$A))" 

使用VBA這樣設置ListFillRange:combobox.ListFillRange = "=listItems" 再次使用'='標誌!

這種動態範圍時listItems增長/收縮動態,取決於什麼樣的價值觀,你必須在列A

我知道我真的回答晚了,但我發現很多人的思維命名範圍總是要固定,而他們可以動態以及...

你是如何做到這一點? 在Excel 2007及更高版本中,您轉到功能區"Formulas"並單擊按鈕「名稱管理器」 而不是選擇單元格並在左上角給出名稱,您可以在此處管理所有已定義的命名範圍。 創建一個新的,並給它的值(不含引號):

"=Sheet1!$A$1:INDEX(Sheet1!$A:$A;COUNTA(Sheet1!$A:$A))"

有你去...

P.S.當您讓動態命名範圍更改時,應該使用VBA重新設置.ListFillRange,以便組合框將刷新其列表項目。

0

或者,這是我要做的事:

定義,包括頭部和尾部行加一個數據行開始,說「DataList控件」

然後定義以下數據範圍名SANS範圍名稱標題和預告片記錄使用偏移量函數。

說 「DataRange」= OFFSET(DataList的,1,0,行(的DataList)-2)

0
Private Sub ComboBox1_Change() 

Me.ComboBox2.ListFillRange = "=" & ComboBox1.Value 

End Sub 

這也適用。但是,您必須按照已經建議的方式使用索引和計數來定義名稱,或者您可以在表中引用它們兩次。我的意思是,讓你的數據成爲一張表。從Combobox1中選擇你想要的選項作爲你的選項的標題,然後在名稱中添加一個,例如Fruits1,然後定義一個次要命名範圍,指的是Fruits1,名爲FruitsFruits Fruits1

0

這是工作的罰款在Excel 2010中:

我有一個項目在改變列「AN」的列表(得到更大/短)每星期。我創建了一個名爲「c」的變量,其中包含列表中的項目數量。通過使用這個變量,ComboBox(位於單元格S7:U7上)現在將顯示實際包含在列表中的項目(組合框中沒有空白空間或缺少項目)。

代碼:

Dim rng As Range 

Set rng = ActiveSheet.Range("S7:U7") 
ActiveSheet.DropDowns.Add(rng.Left, rng.Top, rng.Width, rng.Height).Select 
With Selection 
    .ListFillRange = "AN1:AN" & c 
    .LinkedCell = "$V$7" 
    .DropDownLines = 8 
    .Display3DShading = False 
End With 
1

我正面臨着類似的問題,不能夠填充的ActiveX組合框與列表參考從一個細胞的驗證規則偷看。

與Firedrawndagger自己的解決方案類似,我將手動翻譯驗證規則爲.ListFillRange所理解的格式。 我也意識到,它需要處於工作簿範圍的格式,否則該調用將無法從其他工作表中工作。

這適用於所有的校驗源格式,包括:$ A $ 1/= NamedRange/= INDIRECT( 「表1 [Col2中]」) 翻譯是:如果使用建議

Dim xStr As String   
xStr = Target.Validation.Formula1 
xStr = Right(xStr, Len(xStr) - 1) 
xStr = Split(Range(xStr).Address(, , , True), "]")(1) 
'...other irrelevant code 
.ListFillRange = xStr