Sub 新建工作表()
Dim ShtName As String, sht As Worksheet '声明变量
ShtName = Format(Date, “yyyy-mm-dd”) '将今日日期格式化为“yyyy-mm-dd”格式
On Error Resume Next '如果执行时出错,那么继续执行下一句
Set sht = Worksheets(ShtName) '将名字等于变量shtname的工作表赋值给变量sht,如果不存在表Worksheets(ShtName)则error
If Err.Number = 0 Then '如果没有错误(表示存在名字等于变量shtname的工作表)
MsgBox "已经存在名为 " & ShtName & “的工作表”, vbInformation, “友情提示” '提示用户
Else '否则
'在最右边新建一个工作表,然后命名为shtname
Worksheets.Add(, Sheets(Sheets.Count)).Name = ShtName
End If
End Sub
Sub 新建下月工作表()
Dim Days As Byte, i As Byte, sht As Worksheet, ShtName As String '声明变量
On Error Resume Next '当执行代码出错时继续执行下一句
'计算下一个月的天数(DateSerial(Year(Date), Month(Date) + 2, 0)的含义是下下月的第0天,也就是下月的最后一天)
'使用day函数可以计算出下月最后一天属于该月的第几天,换言之则是计算下月的总天数,总天数是多少等下就建多少个表,days已经是数字格式了
Days = Day(DateSerial(Year(Date), Month(Date) + 2, 0))
Application.ScreenUpdating = False '关闭屏幕更新,提升效率
For i = 1 To Days '从1到下月的总天数
'将下月的0日再加上变量i从而产生新的日期,由于i的取值范围是1到下月的总天数,因此在循环语句中可以产生下月的每一天的日期
'然后再用Format函数将这些日期转换成“yyyy-mm-dd”格式,从而确保用它作为工作表名称是不会出错
ShtName = Format(DateSerial(Year(Date), Month(Date) + 1, 0) + i, “yyyy-mm-dd”)
Set sht = Worksheets(ShtName) '引用名称等于变量shtname的值的工作表,这个是假设Worksheets(ShtName)刚好存在,存在的话就直接移到最后面,就不要新建了
If Err.Number = 0 Then '如果引用时没有出错
sht.Move , Sheets(Sheets) '将该工作表移到最后面去
Else '否则
Worksheets.Add(, Sheets(Sheets.Count)).Name = ShtName '新建一个工作表,且以变量shtname的值命名
Err.Clear '清除错误,避免影响下一轮的判断
End If
Next
Application.ScreenUpdating = True '恢复屏幕更新
End Sub
ksheets.Add方法代表新建工作表,可以一次性创建最多255个工作表
Rem 通过工作表对象的Name属性可以为工作表重命名,本例中需要批量新建和重命名,因此得配合循环语句使用