【问题标题】:Start empty Excel workbook without any worksheets启动没有任何工作表的空 Excel 工作簿
【发布时间】:2016-01-06 03:02:52
【问题描述】:

创建一个新的 Excel 工作簿,如下所示:

Dim xl As Excel.Application
Dim wb As Excel.Workbook
Set xl = New Excel.Application
xl.Visible = False
Set wb = xl.Workbooks.Add

有没有一种简单的方法可以阻止 Excel 自动创建 Sheet1、Sheet2、Sheet3?

之后我总是可以删除这些不需要的工作表,但这感觉像是一个笨拙的解决方案。

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    xl.SheetsInNewWorkbook = 1
    

    有关MSDN 的更多信息(向下滚动至Add method as it applies to the Workbooks object.

    完整代码:

    Dim xl As Excel.Application
    Dim wb As Excel.Workbook
    Dim restoreSheetsInNewWorkbook As Long
    
    Set xl =  New Excel.Application
    restoreSheetsInNewWorkbook = xl.SheetsInNewWorkbook
    xl.SheetsInNewWorkbook = 1
    
    Set wb = xl.Workbooks.Add
    xl.SheetsInNewWorkbook = restoreSheetsInNewWorkbook 'or just set it to 3'
    

    【讨论】:

    • 如果你不想惹恼用户,别忘了这需要恢复到原来的设置。
    • 所以没有床单就没有办法开始了吗?
    • @hawbsl,工作簿必须至少有一张。如果您想要一个 empty excel/应用程序,请不要添加任何工作簿。对象。
    • 如果您想从特定类型的工作表开始,您可以使用上面 MSDN 链接中指定的 ENUM 值之一作为模板。例如Workbooks.Add xlWBATChart
    • 接受了@marg 的回答,但实际上是@NickD 的评论给了我答案。 @NickD 如果您想发表评论作为答案,我会接受。
    【解决方案2】:

    或者你可以:

    Excel 2003 工具>选项>常规选项卡并将“新工作簿中的工作表”更改为1

    Excel 2007 Office 按钮>Excel 选项>热门部分>创建新工作簿时...>包括这么多工作表>1

    【讨论】:

      【解决方案3】:

      无法在没有任何工作表的情况下创建工作簿(据我所知),但您可以使用单个工作表创建工作簿而不会弄乱用户的设置。

      dim wb as Workbook
      Set wb = xl.Workbooks.Add(xlWBATWorksheet)
      

      【讨论】:

        【解决方案4】:
        Sub DeleteSheets()
        Dim DeleteSheet As Variant
        Dim ws              As Worksheet
        DeleteSheet = Array("Sheet1", "Sheet2", "Sheet3")
        
        Application.DisplayAlerts = False
        
        For Each ws In Worksheets
        
           If IsInArray(ws.Name, DeleteSheet) Then ws.Delete
        
        Next
        
        End Sub
        
        
        Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
        Dim i As Integer
        Dim Ret As Boolean
        Ret = False
        For i = LBound(arr) To UBound(arr)
            If VBA.UCase(stringToBeFound) = VBA.UCase(arr(i)) Then
               Ret = True
               Exit For
            End If
        Next i
        IsInArray = Ret
        End Function
        

        【讨论】:

        • 为您的答案添加解释
        猜你喜欢
        • 1970-01-01
        • 2014-08-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        • 2018-01-04
        • 2015-09-16
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多