复制并粘贴具有可变工作表名称的对象所需的vba

时间:2018-07-26 18:04:24

标签: vba excel-vba

我有一个包含两张数据的报告。一个叫做7.26.2018,另一个叫All Pending。当我打开报告时,仅显示7.26.2018,并且我想使用vba代码将数据从7.26.2018复制并粘贴到从A列到N列的所有待处理状态。

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

现在,我不知道如何将工作表名称设置为变量以复制和粘贴结果,因此对于object required,我遇到了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

1 个答案:

答案 0 :(得分:1)

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 Worksheetws3声明为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