2016-03-03 63 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