VBA /在这里编程新手!我为宏分配了两个按钮,每个按钮都位于不同的工作表上:“打印页面1”和“优化”。宏从第一个获取信息,然后知道第二次复制范围的次数。
在“优化”处于活动状态时调用时,代码可以正常工作,但是在“打印页面1”工作表处于活动状态时调用时,将在该行上生成“ 1004错误:应用程序定义或对象定义的错误”复制范围。见下文:
Sub Range_Tester()
Dim PrintRow, WallQty
WallQty = Worksheets("Print Page 1").Cells(24, 4)
PrintRow = 20
While WallQty > 1
Worksheets("Optimization").Range(Cells(PrintRow - 1, 2), Cells(PrintRow - 1, 4)).Copy Worksheets("Optimization").Range(Cells(PrintRow, 2), Cells(PrintRow, 4))
WallQty = WallQty - 1
PrintRow = PrintRow + 1
Wend
End Sub
我认为问题是我的范围语法;如果我替换
Worksheets("Optimization").Range(Cells(PrintRow - 1, 2), Cells(PrintRow - 1, 4)).Copy Worksheets("Optimization").Range(Cells(PrintRow, 2), Cells(PrintRow, 4))
使用
Worksheets("Optimization").Cells(PrintRow - 1, 2).Copy Worksheets("Optimization").Cells(PrintRow, 2)
Worksheets("Optimization").Cells(PrintRow - 1, 3).Copy Worksheets("Optimization").Cells(PrintRow, 3)
Worksheets("Optimization").Cells(PrintRow - 1, 4).Copy Worksheets("Optimization").Cells(PrintRow, 4)
无论哪个工作表处于活动状态,信息都可以完美复制。
我很抱歉问到一个可能是一个愚蠢的简单问题,我只是没有运气找到正确定义可更改位置的范围的信息。
答案 0 :(得分:2)
Cells
是不合格的,隐式指的是ActiveSheet
,因为该代码不是在工作表模块中编写的。如果是这样,那么不合格的Cells
就像Me.Cells
。其他任何地方都是ActiveSheet.Cells
。
始终使用适当的Worksheet
对象显式限定Worksheet
成员调用,您可以避免此问题。
Worksheets("Optimization").Range(Cells(PrintRow - 1, 2), Cells(PrintRow - 1, 4)).Copy Worksheets("Optimization").Range(Cells(PrintRow, 2), Cells(PrintRow, 4))
在这里,您要针对.Range
调用Worksheets("Optimization")
,然后使用Cells(PrintRow - 1, 2)
对其进行参数化,其中 可能属于另一个工作表(无论{{1 }}是。当它发生时,事情就炸了。
将ActiveSheet
引用捕获到Worksheets("Optimization")
块变量(或普通的旧局部变量)中:
With
请注意,With Worksheets("Optimization")
.Range(.Cells(PrintRow - 1, 2), .Cells(PrintRow - 1, 4)).Copy .Range(.Cells(PrintRow, 2), .Cells(PrintRow, 4))
End With
取消引用运算符使.
像.Cells
一样在Worksheets("Optimization")
下工作,确保所有内容都从同一张纸中提取。