除特定的工作表外,为每个工作表创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
作为工作表对象的名称,并使用像Sht
或ws
这样的Sht
。
让我们来检查你的expression式:
If Sheet.Name <> "Overall" Or Sheet.Name <> "Staff" Then
Sheet.Name ==“Overall”将是错误的或真实的
Sheet.Name ==“Staff”将导致true或false结果为true
Sheet.Name ==“其他”会导致真实或真实的结果
我想你喜欢有, 而不是
If Sheet.Name <> "Overall" And Sheet.Name <> "Staff" Then
Sheet.Name ==“Overall”将是错误的 , 真正的结果是错误的
Sheet.Name ==“Staff”将导致true和false导致false
Sheet.Name ==“别的东西”将导致真实和真实的结果