我目前正在尝试使用按钮复制范围内的所有值,以将这些值粘贴到不同工作表中的范围内。
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
答案 0 :(得分:0)
使用:
Sheets("Base_Copy").Range("F15:AK46")
您的想法更多的是单元格公式类型,它在工作表中有效,但VBA使其更简单。
答案 1 :(得分:0)
就这么简单。您必须在Worksheet
之前的Worksheets
对象中指定Range
。
Sub COPYVALUES()
Worksheets("Final_Copy").Range("F15:AK46").Value = Worksheets("Base_Copy").Range("F15:AK46").Value
End Sub
请参阅example in Range Object (Excel)
对于类似这样的事情,您可能希望记录宏以查看其编写方式的语法,然后根据您的需要进行修改。
答案 2 :(得分:0)
有3种不同的方法可以参考不同的纸张。以下是从这里偷来的:http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm
表格标签名称
如果您曾在Excel中记录了一个引用工作簿中特定工作表的宏,您将知道如果工作表名称保持不变,代码将继续有效。例如,代码像;表格(“预算”)。如果重新命名预算表,则选择将不再有效。这是因为宏录制器基于Sheets选项卡名称生成此类代码,这是我们在Excel中看到的名称。如果它让你感觉更好,许多VBA编码器也会使用Sheet选项卡名称两种更好的方式,因为他们知道的更好。
索引编号
工作表索引编号由其在工作簿中的位置确定。最左边的工作表将始终具有索引编号1,右边的下一个将为2,依此类推。 Excel VBA允许我们使用它的索引号指定任何Sheet,但遗憾的是,当我们录制宏时,Excel不使用此方法。它使用Sheets Tab名称;表格(“预算”)。选择如果此表格是左起第三个,我们可以使用:表格(3)。选择。这通常比使用工作表标签名称更好,但仍有潜在问题。我的意思是,如果我们添加,删除或移动工作表,工作簿中的工作表位置可能会发生变化。
表格代码名称
这是精明的VBA编码器使用的方法。工作簿中的每个工作表都有一个唯一的CodeName,即使在移动,重命名或添加其他工作表时也不会更改。只能通过进入Visual Basic编辑器(工具>宏> Visual Basic编辑器Alt + F11)然后显示项目浏览器(视图>项目浏览器Ctl + R)来查看每个工作表CodeName
在上面的屏幕截图中,选项卡名称为Budget的工作表的CodeName是Sheet3。在Project Explorer中查看时,工作表CodeName始终是不在括号内的名称。我们可以使用以下方法在工作簿中使用VBA代码引用此工作表:Sheet3。选择与工作表相关联(“预算”)。选择或表格(3)。选择
如果您的工作簿已经记录或写入了不使用CodeName的VBA代码,您可以在项目级别(工作簿中所有模块中的所有代码)中更改它,方法是转到编辑>替换VBE(Visual Basic编辑器)。 一次退出
只有当您将不同工作簿中的工作表引用到代码所在的工作表时,才能使用工作表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