VBA --Sheets.Add 方法

新建工作表、图表或宏表。新建的工作表将成为活动工作表。

语法

表达式.Add(Before,After,Count, Type)

表达式   一个代表 Sheets 对象的变量。

参数

名称必选/可选数据类型说明
Before可选Variant指定工作表的对象,新建的工作表将置于此工作表之前。
After可选Variant指定工作表的对象,新建的工作表将置于此工作表之后。
Count可选Variant要添加的工作表数。默认值为 1。
Type可选Variant指定工作表类型。可以为下列 XlSheetType 常量之一:xlWorksheetxlChartxlExcel4MacroSheetxlExcel4IntlMacroSheet。如果基于现有模板插入工作表,则指定该模板的路径。默认值为xlWorksheet

返回值
一个 Object 值,它代表新的工作表、图表或宏表。

说明

如果同时省略 BeforeAfter,则新工作表插入到活动工作表之前。

示例

本示例将新建工作表插入到活动工作簿的最后一张工作表之前。

Visual Basic for Applications
ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count)

© 2010 Microsoft Corporation。保留所有权利。


Sub AddSheet(ByVal sheetName, ByVal afterSheet)

        Dim ws As Worksheet
        On Error Resume Next
        Set ws = Worksheets(sheetName)
        If Err Then       'sheetName sheet not exist "
            Sheets(afterSheet).Select
            'ActiveWorkbook.Sheets.Add Before:=Sheets(afterSheet)
            ActiveWorkbook.Sheets.Add AFTER:=Sheets(afterSheet)
            ActiveSheet.Name = sheetName
            On Error GoTo 0
        Else
            'sheetName sheet is exist
            Call deleteSheet(sheetName)
            Sheets(afterSheet).Select
            'ActiveWorkbook.Sheets.Add Before:=Sheets(afterSheet)
            ActiveWorkbook.Sheets.Add AFTER:=Sheets(afterSheet)
            ActiveSheet.Name = sheetName
        End If
 
End Sub
Sub deleteSheet(ByVal sheetName)
    Sheets(sheetName).Select
    Application.DisplayAlerts = False
    Sheets(sheetName).Delete
    Application.DisplayAlerts = True
End Sub


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请为以下代码的每一句写上注释。Sub CopySameDay() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim copyRange As Range Dim pasteRange As Range Dim wb As Workbook Dim folderPath As String Dim fileName As String Dim sumRange As Range Dim sumValue As Double Set ws = ActiveSheet lastRow = ws.Cells(Rows.Count, "D").End(xlUp).Row For i = 2 To lastRow If Format(ws.Range("D" & i).Value, "yyyy-mm-dd") = Format(ws.Range("D" & i - 1).Value, "yyyy-mm-dd") And ws.Range("B" & i).Value = ws.Range("B" & i - 1).Value Then If copyRange Is Nothing Then Set copyRange = ws.Range("A" & i - 1) End If Set pasteRange = ws.Range("A" & i) Else If Not copyRange Is Nothing Then folderPath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\")) fileName = pasteRange.Offset(0, 1).Value & ".xlsx" If Dir(folderPath & fileName) = "" Then Set wb = Workbooks.Add wb.SaveAs folderPath & fileName Else Set wb = Workbooks.Open(folderPath & fileName) End If wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)).Name = Format(copyRange.Offset(0, 3).Value, "yyyy-mm-dd") Set sumRange = wb.Sheets(wb.Sheets.Count).Range("K2:K" & (i - copyRange.Row + 2)) sumValue = Application.WorksheetFunction.Sum(sumRange) wb.Sheets(wb.Sheets.Count).Range("K2:K" & (i - copyRange.Row + 2)).NumberFormat = "0.00" copyRange.Resize(i - copyRange.Row, ws.Columns.Count).Copy wb.Sheets(wb.Sheets.Count).Range("A2") wb.Sheets(wb.Sheets.Count).Range("K" & (i - copyRange.Row + 2)).Value = sumValue ws.Rows(1).Copy wb.Sheets(wb.Sheets.Count).Range("A1") wb.Save wb.Close Set copyRange = Nothing End If End If Next i If Not copyRange Is Nothing Then folderPath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\")) fileName = pasteRange.Offset(0, 1).Value & ".xlsx" If Dir(folderPath & fileName) = "" Then Set wb = Workbooks.Add wb.SaveAs folderPath & fileName Else Set wb = Workbooks.Open(folderPath & fileName) End If wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)).Name = Format(copyRange.Offset(0, 3).Value, "yyyy-mm-dd") Set sumRange = wb.Sheets(wb.Sheets.Count).Range("K2:K" & (lastRow - copyRange.Row + 3)) sumValue = Application.WorksheetFunction.Sum(sumRange) wb.Sheets(wb.Sheets.Count).Range("K2:K" & (lastRow - copyRange.Row + 3)).NumberFormat = "0.00" copyRange.Resize(lastRow - copyRange.Row + 1, ws.Columns.Count).Copy wb.Sheets(wb.Sheets.Count).Range("A2") wb.Sheets(wb.Sheets.Count).Range("K" & (lastRow - copyRange.Row + 3)).Value = sumValue ws.Rows(1).Copy wb.Sheets(wb.Sheets.Count).Range("A1") wb.Save wb.Close End If End Sub
05-29
注释如下: ```VBA Sub CopySameDay() ' 定义变量 Dim ws As Worksheet ' 工作表 Dim lastRow As Long ' 最后一行 Dim i As Long ' 循环计数变量 Dim copyRange As Range ' 复制区域 Dim pasteRange As Range ' 粘贴区域 Dim wb As Workbook ' 工作簿 Dim folderPath As String ' 文件夹路径 Dim fileName As String ' 文件名 Dim sumRange As Range ' 求和区域 Dim sumValue As Double ' 求和结果 ' 获取当前活动工作表 Set ws = ActiveSheet ' 获取最后一行 lastRow = ws.Cells(Rows.Count, "D").End(xlUp).Row ' 循环遍历行 For i = 2 To lastRow ' 判断是否为同一天且同一人 If Format(ws.Range("D" & i).Value, "yyyy-mm-dd") = Format(ws.Range("D" & i - 1).Value, "yyyy-mm-dd") And ws.Range("B" & i).Value = ws.Range("B" & i - 1).Value Then ' 如果是,设置复制区域和粘贴区域 If copyRange Is Nothing Then Set copyRange = ws.Range("A" & i - 1) End If Set pasteRange = ws.Range("A" & i) Else ' 如果不是,进行复制和粘贴操作 If Not copyRange Is Nothing Then ' 获取文件夹路径和文件名 folderPath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\")) fileName = pasteRange.Offset(0, 1).Value & ".xlsx" ' 判断文件是否存在,不存在则新建,存在则打开 If Dir(folderPath & fileName) = "" Then Set wb = Workbooks.Add wb.SaveAs folderPath & fileName Else Set wb = Workbooks.Open(folderPath & fileName) End If ' 在工作簿中添加新的工作表 wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)).Name = Format(copyRange.Offset(0, 3).Value, "yyyy-mm-dd") ' 获取求和区域和求和结果 Set sumRange = wb.Sheets(wb.Sheets.Count).Range("K2:K" & (i - copyRange.Row + 2)) sumValue = Application.WorksheetFunction.Sum(sumRange) ' 设置求和区域的数字格式 wb.Sheets(wb.Sheets.Count).Range("K2:K" & (i - copyRange.Row + 2)).NumberFormat = "0.00" ' 复制数据到新的工作表中 copyRange.Resize(i - copyRange.Row, ws.Columns.Count).Copy wb.Sheets(wb.Sheets.Count).Range("A2") ' 将求和结果写入新的工作表中 wb.Sheets(wb.Sheets.Count).Range("K" & (i - copyRange.Row + 2)).Value = sumValue ' 将表头复制到新的工作表中 ws.Rows(1).Copy wb.Sheets(wb.Sheets.Count).Range("A1") ' 保存工作簿并关闭 wb.Save wb.Close ' 清空复制区域 Set copyRange = Nothing End If End If Next i ' 如果仍有复制区域,进行最后一次复制和粘贴操作 If Not copyRange Is Nothing Then ' 获取文件夹路径和文件名 folderPath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\")) fileName = pasteRange.Offset(0, 1).Value & ".xlsx" ' 判断文件是否存在,不存在则新建,存在则打开 If Dir(folderPath & fileName) = "" Then Set wb = Workbooks.Add wb.SaveAs folderPath & fileName Else Set wb = Workbooks.Open(folderPath & fileName) End If ' 在工作簿中添加新的工作表 wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)).Name = Format(copyRange.Offset(0, 3).Value, "yyyy-mm-dd") ' 获取求和区域和求和结果 Set sumRange = wb.Sheets(wb.Sheets.Count).Range("K2:K" & (lastRow - copyRange.Row + 3)) sumValue = Application.WorksheetFunction.Sum(sumRange) ' 设置求和区域的数字格式 wb.Sheets(wb.Sheets.Count).Range("K2:K" & (lastRow - copyRange.Row + 3)).NumberFormat = "0.00" ' 复制数据到新的工作表中 copyRange.Resize(lastRow - copyRange.Row + 1, ws.Columns.Count).Copy wb.Sheets(wb.Sheets.Count).Range("A2") ' 将求和结果写入新的工作表中 wb.Sheets(wb.Sheets.Count).Range("K" & (lastRow - copyRange.Row + 3)).Value = sumValue ' 将表头复制到新的工作表中 ws.Rows(1).Copy wb.Sheets(wb.Sheets.Count).Range("A1") ' 保存工作簿并关闭 wb.Save wb.Close End If End Sub ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值