在Excel VBA中使用变量设置范围

在Excel VBA中使用变量设置范围,excel,vba,range,Excel,Vba,Range,我已经创建了一个for循环来检测在范围“E7:AB7”中出现空值的位置。完成后,我想创建一个从E7到该空值的范围,这样它就可以从主控图纸复制和粘贴数据,只在该范围内 例如,如果在X7中检测到空值,则范围必须为(“E7:X7”)。 以下是代码示例: Sub Macro5() For Each cell In Worksheets("Proof").Range("E7:AB7") If IsEmpty(cell) Then Dim Cv

我已经创建了一个for循环来检测在范围“E7:AB7”中出现空值的位置。完成后,我想创建一个从E7到该空值的范围,这样它就可以从主控图纸复制和粘贴数据,只在该范围内

例如,如果在X7中检测到空值,则范围必须为(“E7:X7”)。 以下是代码示例:

Sub Macro5()
For Each cell In Worksheets("Proof").Range("E7:AB7")
    If IsEmpty(cell) Then
        Dim Cval As Range
        Set Cval = Worksheets("Proof").Range(cell.Address)
        Exit For
    End If
Next
    Sheets("MasterSheet").Range("A3:AG5000").AdvancedFilter Action:= _
        xlFilterCopy, CopyToRange:=Range("E7" & ":" & Cval), Unique:=False    'Here is where the dynamic range exists  
End Sub
有人知道如何将其应用于范围函数吗?
谢谢

请播放下面的代码

    Private Sub Test()
    
        Dim Rng         As Range            ' dynamic range in row 7
        
        With Worksheets("Proof")
            Set Rng = .Range(.Cells(7, "E"), .Cells(7, "E").End(xlToRight))
    '       use the line below to include the blank in the range
    '        Set Rng = .Range(.Cells(7, "E"), .Cells(7, "E").End(xlToRight).Offset(0, 1))
        End With
'        Debug.Print Rng.Address
        Sheets("MasterSheet").Range("A3:AG5000").AdvancedFilter _
                              Action:=xlFilterCopy, _
                              CopyToRange:=Rng, _
                              Unique:=False         'Here is where the dynamic range exists
    End Sub
Set Rng=.Cells(7,“E”).End(xlToRight)
设置单个单元格的范围,定义为空白单元格之前最后使用的单元格,从E7向右看。因此,从E7到该单元格的范围不包括空白单元格本身。因此,在您的示例中,如果E7本身为空,则代码将崩溃,或者可能会设置一个范围D7:E7,这两者都不是您想要的。因此,您可能更喜欢将空白单元格包含在范围内,事实上,您的代码建议。 您的代码
copytrange:=Range(“E7”&“&Cval)
有两个缺陷,其中至少一个是致命的。一是在使用时计算范围。在我的代码中,范围是在使用前准备好的,这样您可以在将其提供给过滤器之前检查其地址。另一个缺陷是没有指定应该存在范围的工作表。因此,它将位于ActiveSheet上,而ActiveSheet可以是任何工作表。您可能会争辩说,我的代码也没有指定工作表。这并不完全正确。尝试
Debug.Print Rng.Worksheet.Name