首页 > 解决方案 > 使用可变工作表名称对象复制和粘贴需要 vba

问题描述

我有一份包含两张数据的报告。一个叫 7.26.2018,另一个叫 All Pending。当我打开报告时,只有 7.26.2018 可见,我想要 vba 代码将数据从 7.26.2018 复制并粘贴到所有待处理中,从 A 列到 N 列。

每次运行此报告时,我都需要将工作表名称更改为我正在处理的日期。因此,如果我明天继续工作,我需要将工作表名称更改为 7.27.2018 并将数据粘贴到所有待处理选项卡中。本质上,我使用 2018 年 7 月 26 日工作表中的新数据将所有记录保存在所有待处理中。

现在,我不知道如何将工作表名称设置为变量以复制和粘贴结果,所以我收到了object requiredfor的错误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

标签: vbaexcel

解决方案


Worksheet.Name(Date)不是您要查找的语法,因为:

  1. 你想要这个Worksheets集合,就像下一行 - ... = Worksheets("All Pending")
  2. 你已经格式化Date为“M.DD.YYY”,所以如果你想通过它的名字来引用工作表,你不能只使用Date. 而且您也不会使用.Name- 下一行再次向您展示如何通过其名称引用工作表 - 在这种情况下Worksheets(Format(Date, "M.DD.YYYY"))

最简单的方法是Set ws3 = ActiveSheet在开始时,因为您还使用ActiveSheet重命名相关工作表。

请注意,对于变量声明,Dim ws3, ws4 as Worksheet声明ws3Variant- 你应该有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

推荐阅读