其他分享
首页 > 其他分享> > 【excel vba】对多余表的自动删除

【excel vba】对多余表的自动删除

作者:互联网

vba函数实现

在这里插入图片描述

循环复制前一个表

题目1:

复制“日报表模板”工作表(已隐藏)至本工作簿最后一个位置,复制后的工作表名称为最后的日期天数+1&"报表"的格式。
如:
当前情况下,没有任何一天的日报表,则新复制的工作表名称是“1日报表”,如果再添加时就是1+1=2日报表。如果目前已存在5天的日报表,则复制后的工作表名称应为“6日报表”

注:“日报表模板”工作表复制后要隐藏起来

Sub 日报表格式生成()
Dim msh As Worksheet, shname$ // 创建一个工作表,$表示定义的变量shname的类型为string(字符串型)
Application.ScreenUpdating = False//app.scr语句作用是在表里面数据发生变化后False禁止实时刷新True为默认值表示实时更新数据。
Set msh = Sheets("日报表模板")//设置msh为模板工作表
shname = Sheets(Sheets.Count).Name//定义所有的shname模板名字为前有数字
With msh//对于模板表,设置为可见表,向添加,再隐藏
    .Visible = xlSheetVisible
    .Copy after:=Sheets(Sheets.Count)
    .Visible = xlSheetHidden
End With//结束msh的设置
If shname = msh.Name Or shname = "第1题" Then//如果表的位置在第一个
    ActiveSheet.Name = 1 & "日报表"//输出1日表
Else//否则向左输出天数日表
    ActiveSheet.Name = Left(shname, Len(shname) - 3) + 1 & "日报表"
End If//结束判断
Application.ScreenUpdating = True//刷新可见
End Sub//结束程序

另存为

题目2:
把所有日报表另存为工作簿到本文夹下,工作簿名称为工作表的名称

Sub 另存报表()
Dim i As Integer, mb As Workbook
For i = 3 To Sheets.Count
Sheets(i).Copy
Set mb = ActiveWorkbook
mb.SaveAs Filename:=ThisWorkbook.Path & "/" & Sheets(1).Name & ".xls"
mb.Close True
Next i
End Sub

删除报表

题目3 清除报表

Sub 清除日报表()
    Dim i As Integer
    Dim sh As Worksheet
    For Each sh In Sheets
        If sh.Name Like "*日报表" Then
        Application.DisplayAlerts = False
            sh.Delete
        Application.DisplayAlerts = False
        End If
    Next
End Sub

日期为报表名称的创建

形成一个月报表
报表日期作为工作表名字

Sub mode()
    Dim i As Integer
    For i = 1 To 31
        Sheets(Sheets.Count).Range("e5") = "2020 - 5 -" & i
        Sheet1.Copy after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "2020 - 5-" & i + 1 
    Next
End Sub


//标准答案
Sub test()
Dim i As Integer

For i = 1 To 31
    Sheet1.Copy after:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "5月" & i & "日"
    Sheets(Sheets.Count).Range("e5") = "2020-5-" & i
Next

End Sub

工作表名字统计到第一个表中

将sheet名字统计在第一个表格中
注意定义dim 是worksheet ,后面for each sht in sheets
在这里插入图片描述

Sub one()
    '复制一个名字到a1上
    Dim sht As Worksheet
    Dim i As Integer
    For Each sht In Sheets
        For i = 1 To Sheets.Count
            Worksheets(1).Range("a" & i) = Worksheets(i).Name
        Next
    Next
End Sub

删除无用表

注意application函数用于取消弹窗
不等号<>

Sub bushan()
    Application.DisplayAlerts = False//取消弹窗
    Dim sht As Worksheet
    For Each sht In Sheets
        If sht.Name <> "绝不能删" Then
            sht.Delete
            
        End If
    Next
    Application.DisplayAlerts = False
End Sub

标签:Count,vba,End,Sub,excel,日报表,Sheets,Name,多余
来源: https://blog.csdn.net/kyra1997/article/details/107715858