因此,我试图编写一个Excel宏,将Excel文件中的2个工作表添加到一个新的工作表中。
因此,我尝试这样:
Sub addfile()
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet
Set sheet1 = Sheets.Add(Type:="C:\Users\Helge\AppData\Roaming\Microsoft\Templates\page1.xltx")
Set sheet2 = Sheets.Add(Type:="C:\Users\Helge\AppData\Roaming\Microsoft\Templates\page2.xltx")
End Sub
当我对其进行测试时,它会导入第一页,但是第二页会给我一个运行时错误1004。为什么会发生这种情况?还有另一种方法可以通过VBA将2张纸从一个Excel文件传送到另一个文件吗?
令我惊讶的是,此版本的代码实际上对我有用。
Sub addfile()
Dim Sheet1 As Worksheet
Dim Sheet2 As Worksheet
Set Sheet1 = Sheets.Add(Type:=Environ("Userprofile") & "\OneDrive\Desktop\Template1.xltx")
Set Sheet2 = Sheets.Add(Type:=Environ("Userprofile") & "\OneDrive\Desktop\Book2.xlsx")
Debug.Print Sheet1.Name, Sheet2.Name
End Sub
原因我吃惊的是,Sheet1
和Sheet2
是默认的代号,在任何工作簿中的第一和第二的工作表。因此,有之间的命名冲突工作表Sheet1工作簿和工作表Sheet1声明应该浮出水面不迟Debug.Print Sheet1.Name
。实际上,可能有。我没有检查打印哪个名字。但是代码并没有崩溃。由于它在您的计算机上崩溃,因此您可能具有较旧版本的Excel。尽量不要使用Excel也使用的变量名。或路径和文件名有问题,很难用这种语法说出来,因此我也被愚弄了一段时间。
实际上,只有在发现我的桌面位于OneDrive上之后,才发现以上内容,而不是在编写下面的函数之前,避免使用Sheets.Add。它还具有一些其他功能,例如能够指定要从模板中提取的图纸(您可以将一个模板包含2张或更多张图纸)。您可以指定索引号或工作表名称。如果您指定了副本,该函数也会为副本指定一个名称。
Private Function AddWorksheet(ByVal Template As String, _
TabId As Variant, _
Optional ByVal TabName As String) As Worksheet
Dim Wb As Workbook
Dim Path As String
Dim FileName As String
Set Wb = ThisWorkbook ' change to suit
' make sure the path ends on "\"
Path = "C:\Users\Helge\AppData\Roaming\Microsoft\Templates\"
With Workbooks.Open(Path & Template)
.Sheets(TabId).Copy After:=Wb.Sheets(Wb.Sheets.Count)
.Close
End With
Set AddWorksheet = ActiveSheet
If Len(TabName) Then ActiveSheet.Name = TabName
End Function
您可以从子例程中调用该函数,如下所示:
Sub AddWorksheets()
Dim Tab1 As Worksheet
Dim Tab2 As Worksheet
Application.ScreenUpdating = False
Set Tab1 = AddWorksheet("Page1.xltx", 1, "New Tab")
Set Tab2 = AddWorksheet("Page2.xltx", "Sheet1", "Another new Tab")
Application.ScreenUpdating = True
End Sub
请观察两个函数调用之间的区别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句