excel - 当我打开不同的 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
解决方案
你把你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
推荐阅读
- java - Java 观察者模式或发布者-订阅者模式的变体
- ios - 创建自定义 UIView 时出现问题,使用 @IBOutlet 发现 Xib 错误为零
- odoo - 如何将所有字段的值从一条记录复制到另一条记录中?
- multithreading - 带有模板化构造函数的 C++ 自定义线程包装器导致插入 std::map 时出现编译时错误
- python - 更新和切换绘图
- c - 从 rand2() 生成 N 个随机数
- flutter - Flutter源码中Text小部件的RenderObject类在哪里
- nodemailer - Nodemailer 表示消息已发送并已接受,但电子邮件从未发送过 // 进程从未完成
- vb.net - vb.net如何通过byref将结构传递给线程?
- r - 如何用空格分隔日期列中的项目,并且只输出前两个日期分量(“YYYY MM”)?