在Excel VBA中使用变量设置范围
我已经创建了一个for循环来检测在范围“E7:AB7”中出现空值的位置。完成后,我想创建一个从E7到该空值的范围,这样它就可以从主控图纸复制和粘贴数据,只在该范围内 例如,如果在X7中检测到空值,则范围必须为(“E7:X7”)。 以下是代码示例:在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
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