【问题标题】:Setting up a macro to copy a range from one worksheet to another in the same workbook设置宏以将范围从一个工作表复制到同一工作簿中的另一个
【发布时间】:2020-04-03 05:31:04
【问题描述】:

我有一个包含多张工作表的工作簿,我正在尝试在 sheet2 中设置一个宏,该宏将清除 sheet2 的内容,然后从 sheet6 复制从第 2 行到最后一行的一系列数据(列 A:Q)从第 2 行到 sheet2 的相应列的数据行。我找到了一些可以进行复制的代码,但我怀疑它只有在源工作表(sheet6)是活动工作表并且我需要它成为一部分时才有效要在 sheet2 上运行的宏,因为稍后要在宏中添加其他内容。 我在 sheet2 上使用的代码是这样的:

Sub AImportData()


    Rows("2:2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-3

    Dim ws As Worksheet
    Set ws = Sheets("Sheet2")

    With Sheets("Sheet6")
        .Range("A:Q").Copy Destination:=ws.Range("A2")
    End With



End Sub

这会清除 sheet2 中的数据,但是当它需要从 sheet6 复制数据时,我得到一个下标超出范围的错误。我曾尝试在我的代码中使用 ActiveWorksheet,但随后我收到了一个 object required 错误。请问这方面我需要一些指导吗?

在这里,您可以在 Project Explorer 中看到工作表的名称:

【问题讨论】:

  • 确保工作簿中有工作表标签 Sheet6。我不确定您的错误发生在哪一行。请说明您在哪一行有问题?
  • 我在答案中添加了一个新部分。检查一下,如果它解决了问题,请告诉我。

标签: excel vba


【解决方案1】:

工作表名称和工作表对象名称之间存在差异。例如,您可以在此图中看到我有一个名为“Sheet2”的工作表,而它的对象名称是“Sheet5”

要参考该表,您必须执行以下操作之一:

1:使用工作表名称:Sheets("Sheet2")

2:使用工作表的对象名称:Sheet5

3:使用工作表的编号(位置):Sheets(2)

(当您删除此工作表之前的工作表时,工作表的位置会发生变化。[例如,当您删除第一个工作表时,第二个工作表现在将是第一个工作表]所以,使用此方法时要小心.)

因此,在您的情况下,您需要确保有一张名为“Sheet6”的工作表,或者正确命名。

您遇到的另一个问题是您试图将一组整列 (A:Q) 复制到一个位置,该位置不是整列,而是从第 2 行 (A2) 开始的列的一部分。

所以,你必须这样做:

Sub AImportData()
    Rows("2:2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-3 'Do you really need this?
    With Sheet6
        maxRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
        .Range("A2:Q" & maxRow).Copy Range("A2")
    End With
End Sub

【讨论】:

  • 感谢您的回复。我在这两种情况下都使用了您上面指出的对象名称,但仍然遇到相同的问题。如果我将 - Set ws = Sheets("Sheet2") - 部分更改为 Set ws = Sheets.Sheet2 我会收到未找到方法或数据成员的错误消息
  • 我也尝试用工作表名称替换对象名称,然后得到应用程序定义或对象定义的错误。
  • Set ws = Sheets.Sheet2 不正确。你应该试试Set ws = Sheet2。如果这不能解决问题,请编辑您的问题并添加对象资源管理器部分的屏幕截图,其中显示工作表的名称,就像我添加到我的答案中一样。
  • 我是 stackoverflow 的新手,不知道如何附加屏幕截图。你也可以帮我吗?
  • 欢迎再次加入 :)。编辑问题时,转到要添加屏幕截图的位置,然后按 Ctr + G (或使用编辑区域工具栏中的图像图标。
猜你喜欢
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多