我想打开一个现有的excel工作簿并添加具有给定名称的工作表。所有这些都必须从其他excel工作簿中完成
我可以通过执行代码从空白工作簿中打开现有工作簿。但是当我厌倦了将新工作表添加到打开的工作簿时,我的代码正在将新工作表添加到执行工作簿(空白工作簿)中
Sub Valuesets()
Dim ws As Worksheets
Dim PTable1 As PivotTable
Dim sheet As Sheets
Set wb = ActiveWorkbook
Workbooks.Open("C:\Users\user\Desktop\workbook1.xlsb").Worksheets("Data").Activate
On Error Resume Next
Application.DisplayAlerts = False
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "Test-1"
Application.DisplayAlerts = True
Set CSheet = Worksheets("Data")
Set SSheet = Worksheets("Test-1")
End Sub
答案 0 :(得分:0)
您应该将打开的工作簿设置为变量OpenWb
,以便可以访问它以在此特定工作簿OpenWb.Sheets.Add
中添加工作表。数据表和新表相同。始终避免像How to avoid using Select in Excel VBA中所述使用.Activate
,ActiveSheet
和.Select
。
还要确保您没有像以前那样使用On Error Resume Next
。此行隐藏所有错误消息,直到End Sub
或On Error Goto 0
,但错误仍然发生。您只是隐藏他们的消息。如果看不到错误,则无法修复。如果您不告诉用户出了什么问题,他将继续保持该错误状态!
始终实施适当的错误处理:VBA Error Handling – A Complete Guide。
使用On Error Resume Next
(除非您不知道在少数情况下可以使用它)是一种非常不好的做法,并且会产生更多的问题,而不是防止问题发生。
Sub Valuesets()
Dim OpenWb As Workbook
Set OpenWb = Workbooks.Open("C:\Users\user\Desktop\workbook1.xlsb")
Dim wsData As Worksheet
Set wsData = OpenWb.Worksheets("Data")
Application.DisplayAlerts = False
Dim NewSheet As Worksheet
Set NewSheet = OpenWb.Sheets.Add(Before:=wsData)
NewSheet.Name = "Test-1"
Application.DisplayAlerts = True
End Sub