现在,我正在使用一个脚本来检测所有不为空的单元格,并将这些单元格复制到另一张纸上。脚本是一次只针对一列执行此操作。现在,我的工作表包含200多个列,我想循环播放此脚本。
如您所见,我试图循环这些列,但是在运行代码时收到错误消息。
我正在使用的代码没有循环:
Sub uniek()
Sheets("Rekenblad").Range("A1:A93500").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range("A1"), Unique:=True
Sheets("Rekenblad").Range("B1:B93500").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range("B1"), Unique:=True
Sheets("Rekenblad").Range("C1:C93500").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range("C1"), Unique:=True
End Sub
我尝试过的事情:
Sub uniek2()
For Col = 1 To 100
Sheets("Rekenblad").Range(Cells(1, Col), Cells(1, Col)).AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range(Cells(1, Col)), Unique:=True
Next Col
End Sub
答案 0 :(得分:1)
Cells
范围对象与Range
对象的作用不同。
您可以使用
Cells(Row, ColumnNumber
或Cells(Row, "ColumnLetter")
此外,还没有将范围对象全部设置为引用特定的wb和ws。如果不指定这些名称,则VBA会引用活动的wb / ws。
因此,正确的循环应类似于:
Sub uniek2()
Dim ColNr As Integer
Dim MaxRow As Long
Dim sht As Sheet
Set sht = Workbooks(REF).Sheets("Rekenblad")
MaxRow = 93500
With sht
For ColNr = 1 To 100
.Range(.Cells(1, ColNr), .Cells(MaxRow, ColNr)).AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Uniek").Range(Workbooks(REF).Sheets("Uniek").Cells(1, ColNr)), Unique:=True
Next ColNr
End With
End Sub
确保将REF
编辑为正确的白平衡参考。