引用另一个工作表中的单元格范围

fmo*_*er1 1 excel vba copy-paste

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

Excel 给出此代码第二行的错误:

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

Range("F15:AK46").Select
ActiveSheet.Paste
End Sub
Run Code Online (Sandbox Code Playgroud)

我的两张纸是Base_Copy,其中的值是,我想将其粘贴到Final_Copy中

B H*_*art 6

有 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,即使该工作表被移动、重命名或添加其他工作表,该代码名称也不会更改。每个工作表 CodeName 只能通过进入 Visual Basic 编辑器(工具 > 宏 > Visual Basic 编辑器 Alt+F11)然后显示项目资源管理器(视图 > 项目资源管理器 Ctl+R)来查看

在此输入图像描述 在上面的屏幕截图中,选项卡名称为 Budget 的工作表的 CodeName 是 Sheet3。在项目资源管理器中查找时,工作表 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
Run Code Online (Sandbox Code Playgroud)

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

尝试下面的单行代码:

Sub COPYVALUES()
    Sheets("Final_Copy").Range("F15:AK46").Value = Sheets("Base_Copy").Range("F15:AK46").Value
End Sub
Run Code Online (Sandbox Code Playgroud)