vba - 使用可变工作表名称对象复制和粘贴需要 vba
问题描述
我有一份包含两张数据的报告。一个叫 7.26.2018,另一个叫 All Pending。当我打开报告时,只有 7.26.2018 可见,我想要 vba 代码将数据从 7.26.2018 复制并粘贴到所有待处理中,从 A 列到 N 列。
每次运行此报告时,我都需要将工作表名称更改为我正在处理的日期。因此,如果我明天继续工作,我需要将工作表名称更改为 7.27.2018 并将数据粘贴到所有待处理选项卡中。本质上,我使用 2018 年 7 月 26 日工作表中的新数据将所有记录保存在所有待处理中。
现在,我不知道如何将工作表名称设置为变量以复制和粘贴结果,所以我收到了object required
for的错误ws3
。关于如何解决它的任何想法?
Sub Main()
ActiveSheet.Name = Format(Date, "M.DD.YYYY")
Worksheets("All Pending").Visible = xlSheetVisible
Dim ws3, ws4 As Worksheet
Dim LR3, LR4 As Long
Set ws3 = Worksheet.Name(Date)
Set ws4 = Worksheets("All Pending")
LR3 = ws3.Cells(Rows.Count, "A").End(xlUp).Row
LR4 = ws4.Cells(Rows.Count, "A").End(xlUp).Row
ws3.Range("A2:N" & LR3).Copy
ws4.Range("A" & LR4 + 1).PasteSpecial Paste:=xlPasteValues
End Sub
解决方案
Worksheet.Name(Date)
不是您要查找的语法,因为:
- 你想要这个
Worksheets
集合,就像下一行 -... = Worksheets("All Pending")
。 - 你已经格式化
Date
为“M.DD.YYY”,所以如果你想通过它的名字来引用工作表,你不能只使用Date
. 而且您也不会使用.Name
- 下一行再次向您展示如何通过其名称引用工作表 - 在这种情况下Worksheets(Format(Date, "M.DD.YYYY"))
最简单的方法是Set ws3 = ActiveSheet
在开始时,因为您还使用ActiveSheet
重命名相关工作表。
请注意,对于变量声明,Dim ws3, ws4 as Worksheet
声明ws3
为Variant
- 你应该有Dim ws3 as Worksheet, ws4 as Worksheet
. 下一行也是如此。
因此,这是您原始代码的修订版:
Sub Main()
Dim ws3 As Worksheet, ws4 As Worksheet
Dim LR3 As Long, LR4 As Long
Set ws3 = ActiveSheet
Set ws4 = Worksheets("All Pending")
ws3.Name = Format(Date, "M.DD.YYYY")
ws4.Visible = xlSheetVisible ' Not really necessary, as you mentioned
LR3 = ws3.Cells(Rows.Count, "A").End(xlUp).Row
LR4 = ws4.Cells(Rows.Count, "A").End(xlUp).Row
ws3.Range("A2:N" & LR3).Copy
ws4.Range("A" & LR4 + 1).PasteSpecial Paste:=xlPasteValues
End Sub
推荐阅读
- python - Django和mysql的集成
- saml-2.0 - SAML 2.0 身份验证上下文在以下场景中如何工作?
- routes - 如何在路由中建立连接
- sql - 将时间存储为数字。格式问题 - 00 为秒
- sql - MSSQL 中存储过程的刷新问题
- angular - 如何在身份验证后解决重定向时的 adal-angular4 无限循环
- python - 在python中等待mongoengine更新
- c# - FileSystemWatcher 并不总是触发
- c# - 在.Net Core C#中运行时编辑方法
- protobuf-net - 序列化要使用 Protobuf-net 归档的对象列表,然后一次读回一个