参考另一张纸中的一系列单元格

时间:2013-10-17 13:46:15

标签: excel vba 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

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

3 个答案:

答案 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

enter image description here 在上面的屏幕截图中,选项卡名称为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