我正在关注问题How to avoid using Select in Excel VBA macros下的建议,但仍然会收到“应用程序定义或对象定义的错误”。
我的宏假设检查其中一行中的值,将其与设定值进行比较,如果值等于,则将行复制到另一张表。我试图避免使用.Select命令,但无论我尝试什么,我都会收到错误。
这是我的上一个版本:
.gitmodules
这是否与Range中的变量(Counter1,Counter2)的使用有关?
答案 0 :(得分:1)
错误可能是由此代码块中的Copy
和PasteSpecial
行引起的:
With S .SL.Copy End With With R .RL.PasteSpecial End With
一旦有Set
范围变量,Excel就会知道哪个工作表和哪个工作簿包含该范围变量。如果您想对该范围执行某些操作,则无需包含工作表。因此,在您的代码中,您只需使用
SL.Copy
RL. PasteSpecial
如果你在循环中有任何应该在外面的代码,那么总是一个好主意。在您的代码中,您Set
循环中的工作表变量,但这应该在循环之前完成一次。添加对帖子的评论,您的代码应更改为:
Dim S As Worksheet
Dim R As Worksheet
Set R = Sheets("Front")
Set S = Sheets("CHECK LIST")
Counter2 = 17
For Counter1 = 12 To 150
Dim SL As Range
Dim RL As Range
Set SL = S.Range(S.Cells(Counter1, 1), S.Cells(Counter1, 10))
Set RL = R.Range(R.Cells(Counter2, 1), R.Cells(Counter2, 10))
Set curCell = Worksheets("CHECK LIST").Cells(Counter1, 6)
Set checkCell = Worksheets("Front").Cells(3, 5)
If curCell.Value = checkCell.Value Then
SL.Copy
RL.PasteSpecial
Counter2 = Counter2 + 1
End If
Next Counter1
PasteSpecial
方法有几个参数:
.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
如果你没有使用这些,那么也许你可以做一个正常的"副本&粘贴?
SL.Copy RL