Vba 为每个工作表(特定工作表除外)创建新工作簿
我有一个包含多个工作表的工作簿,这些工作表将被划分为各个站点的工作表,但该工作簿也有一些工作表,创建新工作簿时不需要这些工作表 例如,Sheet1=总体Sheet2=员工Sheet3=站点1 Sheet4=站点2 现在我想为Sheet3(即Site1)和Sheet4(即Site2)创建新的工作簿 如果我只想排除两张工作表中的一张(总体和人员),它可以正常工作,但是当我尝试排除两张工作表时,我的If条件似乎不能正常工作 下面是代码Vba 为每个工作表(特定工作表除外)创建新工作簿,vba,excel,Vba,Excel,我有一个包含多个工作表的工作簿,这些工作表将被划分为各个站点的工作表,但该工作簿也有一些工作表,创建新工作簿时不需要这些工作表 例如,Sheet1=总体Sheet2=员工Sheet3=站点1 Sheet4=站点2 现在我想为Sheet3(即Site1)和Sheet4(即Site2)创建新的工作簿 如果我只想排除两张工作表中的一张(总体和人员),它可以正常工作,但是当我尝试排除两张工作表时,我的If条件似乎不能正常工作 下面是代码 Option Explicit Sub SaveShtsAsB
Option Explicit
Sub SaveShtsAsBook()
Dim Sheet As Worksheet, SheetName$, MyFilePath$, N&
MyFilePath$ = ActiveWorkbook.Path & "\" & _
Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4)
With Application
.ScreenUpdating = False
.DisplayAlerts = False
' End With
On Error Resume Next '<< a folder exists
MkDir MyFilePath '<< create a folder
For Each Sheet In Worksheets
If Sheet.Name <> "Overall" Or Sheet.Name <> "Staff" Then
Sheet.Copy
With ActiveWorkbook
With .ActiveSheet
[A1].Select
SheetName = ActiveSheet.Name
End With
.SaveAs Filename:=MyFilePath _
& "\" & SheetName & ".xlsx"
.Close SaveChanges:=True
End With
.CutCopyMode = False
End If
Next
End With
Sheet1.Activate
End Sub
选项显式
子SaveShtsAsBook()
将工作表尺寸标注为工作表,SheetName$,MyFilePath$,N&
MyFilePath$=ActiveWorkbook.Path&“\”和_
左(ThisWorkbook.Name,Len(ThisWorkbook.Name)-4)
应用
.ScreenUpdate=False
.DisplayAlerts=False
"以
在“错误恢复下一步”尝试切换到选择大小写
,我认为这更容易理解,而且您将来可以更灵活地在其中添加更多图纸名称
'For Each Sheet In Worksheets
For Each Sheet In ThisWorkbook.Worksheets ' Safer way to qualify the worksheets with the workbook where this code lies
Select Case Sheet.Name
Case "Overall", "Staff"
' do nothing
Case Else
Sheet.Copy
With ActiveWorkbook
With .ActiveSheet
[A1].Select
SheetName = ActiveSheet.Name
End With
.SaveAs Filename:=MyFilePath _
& "\" & SheetName & ".xlsx"
.Close SaveChanges:=True
End With
.CutCopyMode = False
End Select
Next
注意:我会将Sheet
更改为工作表对象的名称,并使用诸如Sht
或ws
之类的内容尝试切换到Select Case
,我认为这样更容易理解,而且将来您可以更灵活地在其中添加更多工作表名称
'For Each Sheet In Worksheets
For Each Sheet In ThisWorkbook.Worksheets ' Safer way to qualify the worksheets with the workbook where this code lies
Select Case Sheet.Name
Case "Overall", "Staff"
' do nothing
Case Else
Sheet.Copy
With ActiveWorkbook
With .ActiveSheet
[A1].Select
SheetName = ActiveSheet.Name
End With
.SaveAs Filename:=MyFilePath _
& "\" & SheetName & ".xlsx"
.Close SaveChanges:=True
End With
.CutCopyMode = False
End Select
Next
注意:我会将Sheet
更改为工作表对象的名称,并使用类似Sht
或ws
的内容来检查您的表达式:
If Sheet.Name <> "Overall" Or Sheet.Name <> "Staff" Then
如果表名为“总体”或表名为“员工”,则
Sheet.Name==“总体”将为false或true,结果为true
Sheet.Name==“Staff”将导致true或false,结果是true
Sheet.Name==“Something other”将导致true或true结果true
我想你喜欢和而不是或
If Sheet.Name <> "Overall" And Sheet.Name <> "Staff" Then
如果表名为“总体”,表名为“员工”,则
Sheet.Name==“总体”为假,为真,导致false
Sheet.Name==“Staff”将导致true和false,导致false的是
Sheet.Name==“Something other”将导致true,而true将导致true让我们检查一下您的表达式:
If Sheet.Name <> "Overall" Or Sheet.Name <> "Staff" Then
如果表名为“总体”或表名为“员工”,则
Sheet.Name==“总体”将为false或true,结果为true
Sheet.Name==“Staff”将导致true或false,结果是true
Sheet.Name==“Something other”将导致true或true结果true
我想你喜欢和而不是或
If Sheet.Name <> "Overall" And Sheet.Name <> "Staff" Then
如果表名为“总体”,表名为“员工”,则
Sheet.Name==“总体”为假,为真,导致false
Sheet.Name==“Staff”将导致true和false,导致false的是
Sheet.Name==“Something other”将导致true和true,如果您想排除整个工作表和员工工作表,则将或更改为和。希望您能看到问题,您需要它同时通过两个条件,而不是一个条件。如果您想同时排除整个工作表和员工工作表,请将或
更改为和
。希望你能看到这个问题,你需要它通过两个条件,而不仅仅是一个。嗨,这项工作做得很好。。另外,如果你能帮我解决我的另一个未回答的问题,嗨,这项工作做得很好。。另外,如果你能帮我解决我的另一个未回答的问题Hi Bodo,即使这项工作很好,但我使用了case函数,而不是if。。非常感谢。另外,如果你能帮我解决我的另一个未回答的问题Hi Bodo,即使这项工作也很好,但我使用了case函数,而不是if。。非常感谢。另外,如果你能帮我解决另一个未回答的问题