在我在Range中的Excel表格中的Sheet1(" B6")我有一个代码,所以它可能是本月的一个代码,但它也可以在下面添加3个以下代码在下个月可能是两个新的,所以价值将继续变化,数字可以介于1到任何动态的范围内。根据下一个Sheet2上的这些值,需要过滤日期。所以在Sheet2中我有三列,一个是Sl_No。一个ME_Code(这是需要根据Sheet 1数据进行过滤的)和价格
所以我是VBA的新手并尝试下面的代码,当我有多个代码试图添加到VBA中的自动过滤器数组时,这个代码无效。
这是我的代码在我尝试使用else选项时无效,有人可以帮助我,我尝试了StackOverflow本身的一些选项,但没有工作
这是我的代码,
Sub ToCheckArray()
Dim N As Long
Worksheets("Sheet1").Select
If IsEmpty(Range("B6").Offset(1, 0).Value) Then
Worksheets("Sheet1").Select
arr1 = Array(Range("B6"))
Worksheets("Sheet2").Select
Range("A1:C1").AutoFilter field:=2, Criteria1:=arr1, Operator:=xlFilterValues
Else
Worksheets("Sheet1").Select
'With Sheets("Sheet1")
'N = .Cells(Rows.Count, "B").End(xlDown).Row
'ReDim ary(6 To N)
'For i = 6 To N
'ary(i) = .Cells(i, 1)
'Next i
'End With
arr1 = Array(Range("B6", Range("B6").End(xlDown)))
Worksheets("Sheet2").Select
Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, operator:=xlFilterValues
End If
End Sub
答案 0 :(得分:1)
使用
Else
Dim ary As Variant
With Worksheets("Sheet1")
ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlDown)).Value)
End With
Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, operator:=xlFilterValues
End If
如您所见,我避免使用Select语句代替完全限定范围参考,直到工作表参考
所以你的整个代码可以按如下方式重写:
Sub ToCheckArray()
Dim ary As Variant
With Worksheets("Sheet1")
If IsEmpty(.Range("B6").Offset(1, 0).Value) Then
ary = Array(.Range("B6").Value)
Else
ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlDown)).Value
End If
End With
Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, Operator:=xlFilterValues
End Sub
如果您确定Sheet1始终具有B6中的值,并且可能的其他值将其跟随到B列中的最后一个非空单元格,则它可以折叠为:
Sub ToCheckArray()
Dim ary As Variant
With Worksheets("Sheet1")
ary = Application.Transpose(.Range("B6", .Cells(Rows.Count, "B").End(xlUp)).Value
End With
Worksheets("Sheet2").Range("A1:C1").AutoFilter field:=2, Criteria1:=ary, Operator:=xlFilterValues
End Sub