Excel VBA常用技巧 第09章 函数的使用(5)

2019-03-03 16:55

VBA常用技巧代码解析

第4行代码使用Replace函数将人民币大写格式表示的文本中可能出现的“零元零角”、“零元”替换成空白字符;可能出现的“零角”替换成“零”。如果输入负数的话,将“-”替换成“负”。

在工作表中使用自定义RMBDX函数转换人民币大写的效果如图 11-1所示。

图 11-1 人民币大写转换

技巧12 列号转换为列标

使用VBA获取单元格的列号时,只能返回一个数值。如果需要获取以字符表示的列标,可以使用下面的自定义GetColumn函数过程。

#001 Function GetColumn(C As Integer) As String

#002 GetColumn = Split(Cells(1, C).Address, \#003 End Function

代码解析:

GetColumn函数过程代码中,将参数iCol作为列号传递给Cells属性,并获取其绝对地址字串符,然后以“$”字符为分隔符,通过Split函数返回一个一维数组。

Split函数返回一个下标从零开始的一维数组,它包含指定数目的子字符串,语法如下:

Split(expression[, delimiter[, limit[, compare]]])

其中参数expression是必需的,包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(\,则返回一个空数组,即没有元素和数据的数组。

参数delimiter是可选的,用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(\作为分隔符。

返回一维数组后获取该数组的第2个元素(下标为1),即该列号的字符列标。 下面的代码使用GetColumn函数过程获得所选单元格的字符列标。

21

VBA常用技巧代码解析

#001 Private Sub Worksheet_SelectionChange(ByVal Target As Range) #002 MsgBox GetColumn(Selection.Column) #003 End Sub

在工作表中选择单元格后结果如图 12-1所示。

图 12-1 返回列标字符串

技巧13 判断工作表是否为空表

VBA中没有专门的属性或函数可以判断工作表是否为空白工作表,可以使用自定义函数返回指定工作表是否为空工作表,如下面的代码所示。

#001 Function IsBlankSht(Sh As Variant) As Boolean

#002 If TypeName(Sh) = \#003 If Application.CountA(Sh.UsedRange.Cells) = 0 Then #004 IsBlankSht = True #005 End If #006 End Function

代码解析:

自定义IsBlankSht函数包含一个Variant变量类型的参数,代表工作表名称或者对象名称。如果指定的工作表为空工作表,则该函数返回True。

第2行代码使用TypeName函数判断参数Sh是否为字符串类型(“String”),如果是

22

VBA常用技巧代码解析

字符串,则将以该字符串作为名称的工作表赋值给变量Sh。

第3行代码通过工作表函数CountA统计工作表已使用区域的非空单元格个数,如果统计结果为0,则表示该工作表为空工作表。

现在就可以像使用VBA函数一样使用自定义的IsBlankSht函数,如下面的代码所示。

#001 Sub DelBlankSht() #002 Dim Sh As Worksheet

#003 Application.DisplayAlerts = False #004 For Each Sh In ThisWorkbook.Sheets #005 If IsBlankSht(Sh) Then Sh.Delete #006 Next

#007 Application.DisplayAlerts = True #008 End Sub

代码解析:

使用自定义的IsBlankSht函数删除工作簿中所有空工作表。

第3行代码将Application对象的DisplayAlerts属性设置为False,使删除时不显示系统警告对话框。

第4行到第6行代码,使用For Each...Next语句遍历所有工作表,使用自定义的IsBlankSht函数判断是否为空表,如果为空表则使用Delete方法删除。

注意 自定义IsBlankSht函数仅仅判断工作表单元格区域内容是否为空,如果工作表中存在其它对象(如图形对象、数据有效性、单元格批注等),还需要再进一步判断。

技巧14 查找指定工作表

判断工作簿中是否存在指定名称的工作表,除了使用遍历工作簿中所有工作表的方法外,还可以使用自定义函数,如下面的代码所示。

#001 Function ExistSh(Sh As String) As Boolean #002 Dim Sht As Object #003 On Error Resume Next #004 Set Sht = Sheets(Sh)

23

VBA常用技巧代码解析

#005 If Err.Number = 0 Then ExistSh = True #006 Set Sht = Nothing #007 End Function

代码解析:

自定义ExistSh函数包含一个String类型的参数,代表需要判断的工作表名称。如果该工作表存在,则返回True。

第5行代码判断前面的代码是否出错,如果前面的代码存在错误,则表示不存在指定名称的表。

使用自定义ExistSheet函数判断工作簿中是否存在指定名称的工作表,如下面的代码所示。

#001 Sub NotSht()

#002 Dim Sh As String

#003 Sh = InputBox(\请输入工作表名称:\#004 If Len(Sh) > 0 Then

#005 If Not ExistSh(Sh) Then

#006 MsgBox \对不起,\表不存在!\#007 Else

#008 Sheets(Sh).Select #009 End If #010 End If #011 End Sub

代码解析:

NotSht过程使用自定义的ExistSh函数判断工作簿中是否存在指定名称的工作表,如果不存在则使用消息框进行提示,如图 14-1所示。

图 14-1 查找指定工作表

24

VBA常用技巧代码解析

技巧15 查找指定工作簿是否打开

如果需要判断指定名称的工作簿是否已经打开,除了使用错误!未找到引用源。的方法外,还可以使用与技巧14 类似的自定义函数,如下面的代码所示。

#001 Function ExistWorkbook(WbName As String) As Boolean #002 Dim wb As Workbook #003 On Error Resume Next #004 Set wb = Workbooks(WbName)

#005 If Err.Number = 0 Then ExistWorkbook = True #006 Set wb = Nothing #007 End Function

代码解析:

自定义ExistWorkbook函数判断指定名称的工作簿是否已经打开。

第5行代码判断前面的赋值语句是否存在错误。如果没有指定名称的工作簿,则第4行代码会产生错误,自定义ExistWorkbook函数返回False。

下面使用自定义ExistWorkbook函数判断名称为“Excel Home”的工作簿是否已经打开,如果没有打开则使用消息框进行提示,如图 15-1所示。

#001 Sub NotWorkbook()

#002 If Not (ExistWorkbook(\Home\Then MsgBox \对不起,Excel Home工作簿没有打开!\

#003 End Sub

图 15-1 消息框提示

技巧16 取得应用程序的安装路径

25


Excel VBA常用技巧 第09章 函数的使用(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:股东会议事规则

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: