从动态范围删除空白

时间:2019-02-21 20:12:13

标签: excel vba

我了解如何将偏移量函数用于动态范围,但是如果该动态范围在特定数量的附加列之内怎么办?例如,假设我有一个包含A:N列的工作表,命名范围是D2:E2。如果我再添加两列,则该范围应扩展到D2:G2,但不包括F列及以后的列。

我目前正在使用offset函数和counta函数来执行此操作,但是在此范围内(由于合并的单元格)有许多自然的空白单元格。我有办法删除这些空白以用于组合框的下拉菜单吗?

当前,我将名称定义为:

=OFFSET('Sheet 1'!$D$2,0,0,1,COUNTA('Sheet 1'!$D2:$ZZ2))

哪个返回我要查找的所有值,但在下拉列表中还返回一些我不希望出现的空白。

我目前在初始化用户窗体时正在使用以下代码,但这似乎也不起作用:

Dim Rng As Range
Dim i As Long
Me.ComboBox1.RowSource = ""
    Set Rng = Range("Combo")
    For i = 1 To Rng.Rows.Count
        If Rng(i) <> "" Then
            Me.ComboBox1.AddItem Rng(i)
        End If
    Next i

我也尝试过

Dim aCell As Range, ws1 As Worksheet, lastColumn As Long,  stopColumn As Long


Set ws1 = Worksheets("sheet 1")

With ws1
lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
stopColumn = lastColumn - 12
Me.ComboBox1.RowSource = ""
With ws1
    For Each aCell In .Range("D2", .Cells(2, stopColumn))
        If aCell.Value <> "" Then
            Me.ComboBox1.AddItem aCell.Value
        End If
    Next
End With

尽管这两种尝试均未成功,但组合框下拉列表为空。

1 个答案:

答案 0 :(得分:0)

上面代码的第二部分实际上是有效的,我只是使用了错误的过程名称。我使用的是UserForm2,并已将重命名为Private Sub UserForm2_Initialize()的初始化过程改名为`Private Sub UserForm_Initialize()