如何计算纸张是一种数字方式,与名称无关,操作与复制或移动无关

How to count sheets is a numeric way regardless of name and the operate as in copy or move

代码及其目的是(下面的代码,sub ed)查看 workbook/file 名称为 'PR11_P3.xlsm' 的 window,然后计数到最后一个 sheet 和 select 它。将其移动(不是复制)到一个新文件中并将其保存到 path/destination。这按预期工作。

当不是最后一个时我遇到了错误 sheet 这是我现在发布这个问题的目标,最好的情况是(我想做一个 IF)如果有不止一个 sheet,按原样执行 cod,但是如果只有一个 sheet 或超过 2 个 sheet,则复制当前的 sheet 而不是移动到新文件并另存为,关闭文件。

有什么建议吗?基本上我想确保没有代码输出 sheet 计数错误原因的情况,并且由于第二个 sheet 的名称总是不同,所以这是我唯一合乎逻辑的方法,但我认为是非常混乱,如前所述,它根本不起作用 - 我需要专家指导。

感谢您的帮助!

我的代码

Sub ED() 'Export last sheet into new file in the background, save as and close

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

        Windows("PR11_P3.xlsm").Activate
        Sheets(Sheets.Count).Select
        Sheets(Sheets.Count).Move
        ActiveWorkbook.SaveAs Filename:="C:\Temp\PR\Export\Bok1.xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWindow.Close

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

我认为我的代码应该是这样的,但是我在这里做得不是很好,因为有错误而且它 运行 不正确。

Sub ED_IF() 

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
If Sheets(Sheets.Count) =< 3 Then 'not more than two sheets
Windows("PR11_P3.xlsm").Activate
Sheets(Sheets.Count).Select
Sheets(Sheets.Count).Move
ActiveWorkbook.SaveAs Filename:="C:\Temp\PR\Export\Bok1.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Else
If Sheets(Sheets.Count) = 1 or => 2 Then 'basically if there is only one sheet or more than 2 sheets, so it can be any number above 2
Windows("PR11_P3.xlsm").Activate
Sheets(Sheets.Count).Copy
ActiveWorkbook.SaveAs Filename:="C:\Temp\PR\Export\Bok1.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
End If
End If

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

像这样:

Sub ED() 'Export last sheet into new file in the background, save as and close
    Dim wb As Workbook, ws As Worksheet, wbNew As Workbook, nSheets As Long
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set wb = Workbooks("PR11_P3.xlsm")   'or ThisWorkbook?
    nSheets = wb.Worksheets.Count
    Set ws = wb.Worksheets(nSheets)  'sheet to copy/move
    
    With Workbooks.Add(xlWBATWorksheet) 'add a new workbook with 1 sheet
        Select Case nSheets
            Case 1: ws.Copy after:=.Sheets(1)
            Case Else: ws.Move after:=.Sheets(1)
        End Select ' fixed
        .Sheets(1).Delete 'remove the empty sheet
        .SaveAs Filename:="C:\Temp\PR\Export\Bok1.xlsx", _
             FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        .Close
    End With

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub