2016-03-03 69 views
0

我使用兩種方法在組合框行源中構建名稱的動態列表。在第一種情況下我使用:組合框列表中的動態範圍

隨着Sheet2中

RateComboBox.RowSource = 「 '」 &請將.Name & 「'!」 & .Range(「B9」,.Range(「C33」)。完(xlUp))。地址 結束隨着

控制源設置爲一個單元在片材上和綁定的列是第1列,或第二列列表添加時名稱(1-25)的數字爲1-25,列數爲2的範圍b9:b33。它的效果很好,直到C9:C33範圍內滿載爲止,此時下拉列表顯示一個包含項目(文本)的虛構列表,現在從B1開始。發生什麼事?

在第二個實例使用:。

Me.ComboBox1.RowSource =工作表( 「表」)範圍( 「B8」,範圍( 「B32」)結束(xlUp))地址

其中範圍b8:B32填充名稱,因爲它們添加在那裏。控制源被設置爲工作表上的一個單元格,並且綁定的列是列1.同樣,它很好地工作,直到(列表)範圍已滿爲止。在這兩種情況下,我只希望列出組合框中的項目(名稱),因爲它們被添加到這些範圍中。 ??

+0

如果電池32具有的文字,它運行,直到下一個空單元格。 ..就像在第一個例子中,你應該從34開始,或者從第一個單元格(9) –

+0

下去,有趣的是它列出了第一個例子中的b9以上的文本,第二個例。我應該如何編碼? – SBV

+0

檢查最後一個單元格是否爲空...如果是:按照現在的樣子進行操作,並且它裏面的文本只是直接選取最後一個單元格... –

回答

0

對於這樣的第一部分:

If Len(.Range("c33").Value) Then 
    RateComboBox.RowSource = "'" & .Name & "'!B9:C33" 
Else 
    RateComboBox.RowSource = "'" & .Name & "'!" & .Range("b9", .Range("c33").End(xlUp)).Address 
End If 

對於第二部分是一樣好:

If Len(Range("B32").Value) Then 
    Me.ComboBox1.RowSource = Worksheets("Form").Range("B8:B32").Address 
Else 
    Me.ComboBox1.RowSource = Worksheets("Form").Range("B8", Range("B32").End(xlUp)).Address 
End If 
+0

和第二部分? – SBV

+0

將其添加到答案;) –

+0

與您提到的第一個答覆c33應改爲c34。如果您的第一部分響應是.range(「c34」)和b9:c34「和.range(」C34「)。end(xlup)並且發送部分的響應相同,請調整爲b33等? – SBV