1

我目前正在尝试使用按钮复制范围内的所有值,以将这些值粘贴到不同工作表的范围内。

Excel 在此代码的第二行给我一个错误:

Sub COPYVALUES()
Range("Base_Copy!F15:Base_Copy!AK46").Select
Selection.Copy

Range("F15:AK46").Select
ActiveSheet.Paste
End Sub

我的两张表是Base_Copy值所在的位置,我想将其粘贴到Final_Copy

4

3 回答 3

2

有 3 种不同的方法来引用不同的工作表。以下是从这里被盗的:http ://www.ozgrid.com/VBA/excel-vba-sheet-names.htm

表格选项卡名称

如果您曾经在 Excel 中记录了引用工作簿中特定工作表的宏,那么您将知道代码只有在工作表名称保持不变的情况下才能继续工作。例如,像这样的代码;如果重新命名预算表,Sheets("Budget").Select 将不再起作用。这是因为宏记录器会根据表格选项卡名称生成此类代码,这是我们在 Excel 中看到的名称。如果它让您感觉更好,许多 VBA 编码人员还通过两种更好的方式使用工作表选项卡名称,因为他们不知道更好。

索引号

工作表索引号由其在工作簿中的位置确定。最左边的工作表总是有一个索引号 1,右边的下一个是 2,依此类推。Excel VBA 允许我们通过使用它的索引号来指定任何工作表,但不幸的是,当我们录制宏时 Excel 不使用此方法。它使用表格选项卡名称,例如;Sheets("Budget").Select 如果这张表是左起第三个,我们可以使用:Sheets(3).Select。这通常比使用工作表选项卡名称更好,但仍然存在潜在问题。我的意思是,如果我们添加、删除或移动工作表,工作簿中的工作表位置可能会改变。

工作表代码名称

这是精明的 VBA 编码人员使用的方法。工作簿中的每个工作表都有一个唯一的代码名称,即使该工作表被移动、重命名或添加其他工作表,该代码名也不会改变。每个工作表 CodeName 只能通过进入 Visual Basic 编辑器(工具>宏>Visual Basic 编辑器 Alt+F11)然后显示项目资源管理器(查看>项目资源管理器 Ctl+R)来查看

在此处输入图像描述 在上面的屏幕截图中,选项卡名称为 Budget 的工作表的 CodeName 是 Sheet3。在 Project Explorer 中查看时,工作表 CodeName 始终是不在括号内的名称。我们可以使用以下方法在工作簿中使用 VBA 代码引用此工作表:Sheet3.Select 与 Sheets("Budget").Select 或 Sheets(3).Select 相对应

如果您的工作簿已经充满了 VBA 代码(记录或编写),并且不使用 CodeName,您可以在项目级别更改它(工作簿中所有模块中的所有代码),方法是在 VBE(Visual基本编辑器)。一退

唯一不能使用工作表 CodeName 的情况是当您引用与代码所在工作簿不同的工作簿中的工作表时。

有了上述信息,您的代码现在变为:

Sub COPYVALUES()
    Sheets("Base_Copy").Range("F15:AK46").Copy
    ' OR Sheets(2).Range("F15:AK46").Select
    ' OR Sheet2.Range("F15:AK46").Select

    Sheets("Final_Copy").Range("F15:AK46").Paste
    Application.CutCopyMode = False    
End Sub

现在附带说明:您不必使用复制/粘贴来移动数据......

试试下面的单行代码:

Sub COPYVALUES()
    Sheets("Final_Copy").Range("F15:AK46").Value = Sheets("Base_Copy").Range("F15:AK46").Value
End Sub
于 2013-10-17T14:02:23.187 回答
0

采用:

Sheets("Base_Copy").Range("F15:AK46")

您的想法更多的是单元格内公式类型,它在工作表中有效,但 VBA 使它更简单一些。

于 2013-10-17T13:50:56.703 回答
0

就这么简单。您必须WorksheetWorksheets对象之前指定您的Range.

Sub COPYVALUES()
    Worksheets("Final_Copy").Range("F15:AK46").Value = Worksheets("Base_Copy").Range("F15:AK46").Value
End Sub

请参阅范围对象 (Excel) 中的示例

对于这样的事情,您可能希望记录宏以查看其编写方式的语法,然后根据需要对其进行修改。

于 2013-10-17T13:55:32.077 回答