ad

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_2.9.4 运用Worksheets

网友投稿 53 2023-11-07

【摘要】 本书摘自《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》一书中第2章,第9节,陈锡卢、李应钦著。

2.9.4 运用Worksheets.Add 和 Name 批量创建新表并命备*

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_2.9.4 运用Worksheets

无言:讲解完了Name 和CodeName 属性,咱们就要将它们运用于实际中。现在通过实例来 批量创建新表并重新命名。

现以一个模板表循环新建12个工作表,并按照一定的命名方式命名其标签名称(Worksheet. Name)。 具体过程如代码2-11所示。

代码2- 11 批量创建考勤统计表

001|Sub ShtAddAndName)

002| Dim Sht As Worksheet,Cous As Integer

003| Dim Dayl As Date,Day2 As Date,DayCou As Integer,DayYM As String

004| Worksheets.Add After:=Worksheets(Worksheets.Count),Count:=12,Type:=xlWorksheet

005| For Each Sht In Worksheets

006| With Sht

007| If.Name~" 月考勤模板"And.Name~" 数据有效性说明"Then

008| Cous=Cous+1 '表计数器,用于月份

.Name=Format(Date,"yyyy")&Format(Cous,"00")

Worksheets("月考勤模板").UsedRange.Copy Sht.Cells(1)

.Cells(1)=Format(Date,"yyyy年")&Format(Cous,"00月份")& .Cells(1)

Day1=DateSerial(Year(Date),Cous,1)

Day2=DateSerial(Year(Date),Cous+1,1)

DayCou =DateDiff("d",Day1,Day2)

DayYM=Year(Date)&"/"&Cous&"/"

If DayCou<31 Then_

.Cells(2,2).Offset(0,DayCou+1).Resize(1,31 -DayCou).EntireColumn.Delete

With.Cells(3,3).Resize(1,DayCou)

.Formula="="&""""&DayYM&"""&COLUMNO-2"

.Value =.Value

.Offset(-1,0).Formula="=TEXT(R[1]C,""AAA"")"

.Offset(-1,0).Value =.Offset(-1,0).Value

End With

End If

.UsedRange.Columns.AutoFit

End With

Next Sht

Sub

代码2-11 示例过程分为两大步骤操作,分别如下。

(1)首先通过Worksheets.Add 方法一次创建12个Xlworksheet 类型工作表,并插入在 已有表的后面, Worksheets.Count为统计当前工作簿中有几个 Worksheet类型的工作表,在 Worksheets.Add 语句中After:=Worksheets(Worksheets.Count) 是将所有新建工作表都插入在已有 最后一个表之后。

(2)For Each Sht In Worksheets 语句在当前工作簿的 Worksheet类型表中循环操作。If .Name~ “月考勤模板”And.Name~" 数据有效性说明”语句的作用是当 Sht 的名称不是< 月考勤模板>和<数据有效性说明>时,将进行后续操作。这里用And 而不用Or 是因为只要

Sht的任意名字不是上述两个话都会执行后续操作,所以这里必需用And。

( 3 ) 当Sht不属于上述表中任意一个时,运行Cous=Cous+1 语句,该语句是用于 计量已操作几个表,并将其作为月份计数器,从该语句开始都是针对每一个符合的表进行 操作。

(4)Format(Date,"yyyy")&Format(Cous,"00")语句将当前日期年和Cous 计数器结合成一 个新的文本串并运用Worksheet.Name 属性赋值命名该工作表的标签名称;紧接着通过Range. Copy 方法将月考勤模板中的使用区域(Worksheets("月考勤模板").UsedRange.Copy)复制到 Sht 表中,并通过该.Cells(1)=Format(Date,"yyyy年")& Format(Cous,"00月份")& .Cells(1)语句 将第一行的抬头内容通过年月组合并与原来单元格的值组合后重新写入该行。

(5)接下来的代码的作用是书写对应每月的天数及对应的星期——Day1 和 Day2 都是 通过 DateSerial 函数获取当月和下个月1号日期,例如2017-1-1和2017-2-1,其中 Day2 中的 Cous+1为获取下个月;赋值2个日期后,通过 DateDif函数计算2个月份间的天数差并赋值给 DayCou;DayY M 变量则是一个用/作为分隔符组合成年月字符串。(6)If DayCou<31, 通过判断当前月是否小于31天,若是则通过.Cells(2,2).Offset(0, DayCou +1).Resize(1,31 -DayCou).EntireColumn.Delete 语 句 删 除 , 先 从 B2 单 元 格 向 右 偏移当月天数的单元格,再选中与31天之间的差的天数的列整列删除——即删除多余日 期列。

(7)通过在指定区域范围内写入当月的天数公式——With.Cells(3,3).Resize(1,DayCou) 将有效天数单元区域。

(8).Formula="="&"""" &DayYM&"""&COLUMNO-2" 语句为使用公式写入当月每天 的日期,再重新将公式值转换为单元格的值。

(9).Offset(-1,0).Formula="=TEXT(R[1]C,""AAA"")"语句将第3行的日期通过 Text 函数 公式转换为对应的星期几,写入第2行对应单元格的公式,并再次转换为单元格值,这样第2 和第3行原来的公式都转换为值而非公式,如图2-16所示。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《自己动手写 Python 虚拟机》_更理解虚拟机的意义_6.3 Native 函数
下一篇:跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_3.3.3 条件循环
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×