除特定的工作表外,为每个工作表创build新的工作簿

我有一个工作簿与多个工作表,这将被分为个别站点明智的工作表,但工作簿也有一些不需要创build一个新的工作簿的工作表。

例如Sheet1 =整体Sheet2 = Staff Sheet3 = Site1 Sheet4 = Site2 ….

现在我想为Sheet3(即Site1)和Sheet4(即Site2)创build新的工作簿,

如果我只是想排除其中一张(总体&职员)其工作正常,但当我试图排除两张表,我的条件似乎不能正常工作。

下面是代码

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 

PS带有OR条件的If语句导致问题。 语法是正确的,但我无法理解if条件何时具有OR条件,为什么它不检查条件。

尝试切换到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作为工作表对象的名称,并使用像Shtws这样的Sht

让我们来检查你的expression式:

 If Sheet.Name <> "Overall" Or Sheet.Name <> "Staff" Then 

Sheet.Name ==“Overall”将是错误的真实的

Sheet.Name ==“Staff”将导致truefalse结果为true

Sheet.Name ==“其他”会导致真实真实的结果

我想你喜欢有, 不是

 If Sheet.Name <> "Overall" And Sheet.Name <> "Staff" Then 

Sheet.Name ==“Overall”将是错误的真正的结果是错误的

Sheet.Name ==“Staff”将导致truefalse导致false

Sheet.Name ==“别的东西”将导致真实真实的结果