首页 > 解决方案 > 当我打开不同的 Excel 工作簿时,VBA 范围(“A1”)命令不起作用

问题描述

我的目的是从另一个 Excel 工作簿复制行并将其粘贴回我原来的 Excel 工作簿

如果我删除第 2 行并在我正在处理的原始 Excel 工作簿上对其进行测试,则此代码运行良好。

但是当我在第 2 行添加以激活另一个 Excel 工作簿(“Book1”)时,当我运行相同的代码时,此代码在第 3 行失败。错误消息是“应用程序定义的或对象定义的错误”。奇怪的是,前 2 行有效,但直到第 3 行失败。这只发生在我尝试激活不同的 Excel 工作簿时。

我尝试将 Excel 文件转换为相同的格式,例如 xlsm、xlsx、csv,但它仍然无法正常工作。我试了几个小时。请向我解释什么是错误。谢谢你

Sub test()

MsgBox ActiveCell.Value
Workbooks("Book1").Activate
Range("a1").End(xlDown).Select ----->>This line is where error occurs
i = ActiveCell.Row
Range(Rows(1), Rows(i)).Copy

End Sub

标签: excelvba

解决方案


你把你Sub Test()放在一个工作表模块里面,所以不合格Range("a1")的被解析为包含这个代码的工作表,而不是活动工作表。因此,您试图在未激活的工作表上选择一个范围。

如果您将该代码放在标准模块中,它会起作用,因为这样 unqualifiedRange针对 active sheet进行解析。

正确的做法是限定Range调用并且不选择任何内容

MsgBox ActiveCell.Value
With Workbooks("Book1").Worksheets(1)
  .Range(.Range("A1"), .Range("A1").End(xlDown)).EntireRow.Copy
End With

推荐阅读