Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA将两张工作表复制到新工作簿_Excel_Vba - Fatal编程技术网

Excel VBA将两张工作表复制到新工作簿

Excel VBA将两张工作表复制到新工作簿,excel,vba,Excel,Vba,我有一本有许多工作表的工作簿。我正在尝试使用一个宏,将两个特定的工作表一起复制到一个尚不存在的新工作簿中。我对VBA很在行,下面我写的代码由于类型不匹配而出现运行时错误13。有人能帮忙吗?谢谢 Sub CopyBillStatandCosts() Dim MyBook As Workbook Dim NewBook As Workbook Set MyBook = ThisWorkbook Workbooks.Add ' Open a new workbook Set Ne

我有一本有许多工作表的工作簿。我正在尝试使用一个宏,将两个特定的工作表一起复制到一个尚不存在的新工作簿中。我对VBA很在行,下面我写的代码由于类型不匹配而出现运行时错误13。有人能帮忙吗?谢谢

Sub CopyBillStatandCosts()
  Dim MyBook As Workbook
  Dim NewBook As Workbook

  Set MyBook = ThisWorkbook
  Workbooks.Add ' Open a new workbook
  Set NewBook = ActiveWorkbook

  Set MyBook = ActiveWorkbook

  Sheets(11).Copy Before:=Workbooks(NewBook).Sheets(1)
  Sheets(9).Copy Before:=Workbooks(NewBook).Sheets(1)
  Workbooks(NewBook).Sheet1.Delete
End Sub
更新:好的,我找到了做我想做的事情的代码;在下面。但我不知道如何通过代码名来引用这些表,这是最佳做法。有什么想法吗?它们是第9页和第11页

Sub copyBillStatandCosts()
  ThisWorkbook.Worksheets(Array("BillStat", "C")).Copy
End Sub
你的第二个

Set MyBook = ActiveWorkbook
可能是命中注定的

MyBook.Activate
尽管这样做的一个更简单的方法是

Sub CopyBillStatandCosts()
    Sheets(Array("BillStat", "Costs")).Copy
End Sub
不带参数的
Copy
将在新工作簿中进行复制。

一次性按代码名复制工作表
  • 为什么使用代号?现在您可以重命名选项卡中的两个工作表,代码仍然会将正确的工作表复制到新工作簿中
  • 为什么一气呵成?如果工作表之间存在相互引用,则它们仍将在新工作簿中工作,即不会引用源工作簿中的工作表

如果您想使用编程名称,那么只需使用
名称
属性:

ThisWorkbook.Sheets(数组(sheet9.Name,sheet11.Name)).Copy

是的,太好了。你知道如何通过代码名而不是实际引用的名称来引用图纸吗?谢谢。我相信你可以用表格索引代替名字。然而,名字通常更安全。
Sub copyBillStatandCosts()

    ThisWorkbook.Worksheets(Array(Sheet9.Name, Sheet11.Name)).Copy

    ' To continue to work with the new workbook, do the following:
    Dim NewBook As Workbook: Set NewBook = ActiveWorkbook
    ' e.g.:
    ' NewBook.SaveAs "C:\Test\Test.xlsx", xlOpenXMLWorkbook

    ' To continue to work with each new worksheet, do the following: 
    Dim bws As Worksheet: Set bws = NewBook.Worksheets(1)
    Dim cws As Worksheet: Set cws = NewBook.Worksheets(2)
    ' e.g.:
    MsgBox NewBook.Name & vbLf & bws.Name & vbLf & cws.Name

End Sub