VBA常用技巧代码解析
#010 Case 2
#011 Week = \二\#012 Case 3
#013 Week = \三\#014 Case 4
#015 Week = \四\#016 Case 5
#017 Week = \五\#018 Case 6
#019 Week = \六\#020 Case 7
#021 Week = \日\#022 End Select
#023 MsgBox \你输入的日期是\
#024 & \是\年的第\季度\
#025 & \是星期\
#026 & \距离今天有\天\Chr(13) _
#027 & \天后的日期是\#028 Else
#029 MsgBox \请输入正确格式的日期!\#030 End If #031 End If #032 End Sub
代码解析:
DatFunctions过程在对话框中输入日期后使用各种日期函数对其进行计算并用消息框显示。
第4、5行代码使用InputBox函数显示一个对话框,供用户在对话框中输入一个日期。 第6行代码使用IsDate函数判断输入的日期是否正确。IsDate函数返回Boolean值,指出一个表达式是否可以转换成日期,语法如下:
IsDate(expression)
11
VBA常用技巧代码解析
参数expression是必需的,日期表达式或字符串表达式,如果表达式是一个日期,或者可以作为有效日期识别,则IsDate函数返回True,否则返回False。
第7行到第22行代码使用Weekday函数判断所输入的日期是星期几。Weekday函数返回一个整数,代表某个日期是星期几,语法如下:
Weekday(date, [firstdayofweek])
参数date是必需的,能够表示日期的 Variant、数值表达式、字符串表达式或它们的组合。
参数firstdayofweek是可选的,指定一星期第一天的常数,如表格 7-1所示。
常数 vbUseSystem VbSunday vbMonday vbTuesday vbWednesday vbThursday vbFriday vbSaturday 值 0 1 2 3 4 5 6 7 描述 使用 NLS API 设置 星期日(缺省值) 星期一 星期二 星期三 星期四 星期五 星期六 表格 7-1 firstdayofweek参数值
Weekday函数返回一个1到7之间的整数,当firstdayofweek参数设置为vbMonday(2)时,返回1时说明是星期一,以此类推。
第23行代码根据系统中指定的短日期格式来显示所输入的日期。DateValue函数的语法如下:
DateValue(date)
参数date是必需的,任何表达式,表示从 100 年 1 月 1 日到 9999 年 12 月 31 日之间的一个日期。如果是一个字符串,且其内容只有数字以及分隔数字的日期分隔符,则 DateValue函数就会根据系统中指定的短日期格式来识别月、日、年的顺序。DateValue函数也识别明确的英文月份名称,全名或缩写均可。例如,除了12/30/1991 和12/30/91 之外,DateValue函数也能识别December 30, 1991 和Dec 30, 1991。
如果date参数中略去了年这一部分,DateValue函数就会使用由计算机系统日期设置的当前年份。
第24行代码判断输入的日期的季度。DatePart函数返回一个包含已知日期的指定时间部分的值,语法如下:
DatePart(interval, date[,firstdayofweek[, firstweekofyear]])
其中参数interval是必需的,字符串表达式,是要返回的时间间隔,设定值如表格 7-2
12
VBA常用技巧代码解析
所示。
设置 yyyy q m y d w ww h n s 说明 年 季 日 一年的日数 日 一周的日数 周 时 分钟 秒 表格 7-2 interval参数设定值
第26行代码计算所输入的日期距当天的天数。DateDiff函数返回两个指定日期间的时间间隔数目,语法如下:
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
其中参数interval是必需的,字符串表达式,表示用来计算date1和date2的时间差的时间间隔,设定值如表格 7-2所示。
参数date1和date2是必需的,计算中要用到的两个日期。
因为如果输入的日期是当前日期以前的日期,DateDiff函数会返回负值,所以使用Abs函数返回绝对值将其转换为正值。
第27行代码计算所输入的日期距当天的天数,DateAdd返回加上了一段时间间隔的一个日期,语法如下:
DateAdd(interval, number, date)
参数interval是必需的,字符串表达式,是所要加上去的时间间隔,设定值如表格 7-2所示。
参数number是必需的,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。
参数date是必需的,需要加上时间间隔的字符串表达式。
运行DatFunctions过程,在显示的对话框中输入一个日期,结果如图 7-1所示。
13
VBA常用技巧代码解析
图 7-1 使用日期函数
技巧8 判断是否为数值
使用IsNumeric函数可以判断表达式的运算结果是否为数值,如下面的代码所示。
#001 Sub Numeric() #002 Dim i As Integer #003 Dim n As String #004 Dim s As String #005 With Sheet1
#006 For i = 1 To .Range(\#007 If IsNumeric(.Cells(i, 1)) Then
#008 n = n & .Cells(i, 1).Address(0, 0) & Chr(9) & .Cells(i, 1) & Chr(13)
#009 Else
#010 s = s & .Cells(i, 1).Address(0, 0) & Chr(9) & .Cells(i, 1) & Chr(13)
#011 End If #012 Next #013 End With
#014 MsgBox \列中数值单元格:\#015 & \列中非数值单元格:\#016 End Sub
14
VBA常用技巧代码解析
代码解析:
Numeric过程使用IsNumeric函数判断工作表的A列单元格是否为数值,并使用消息框显示。
第7行代码判断工作表的A列单元格是否为数值。IsNumeric函数返回Boolean值,指出表达式的运算结果是否为数,语法如下:
IsNumeric(expression)
参数expression是必需的,Variant类型,包含数值表达式或字符串表达式。 如果参数expression的运算结果为数字,则IsNumeric返回True,否则返回False。 第8行代码将数值单元格的地址和数值保存在变量 e中。
第10行代码将非数值单元格的地址和内容保存在变量 s中。在保存时插入制表符对数据列进行分隔,使之排列整齐,请参阅技巧错误!未找到引用源。。
运行Numeric过程结果如图 8-1所示。
图 8-1 判断是否为数值
技巧9 格式化数值、日期和时间
15