ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4963|回复: 6

[原创]IIF函数的应用:

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-12-14 23:48 | 显示全部楼层 |阅读模式
1、说明: 根据表达式的值,来返回两部分中的其中一个。 2、语法 IIf(expr, truepart, falsepart) IIf 函数的语法含有下面这些命名参数: 部分 描述 expr 必要参数。用来判断真伪的表达式。 truepart 必要参数。如果 expr 为 True,则返回这部分的值或表达式。 falsepart 必要参数。如果 expr 为 False,则返回这部分的值或表达式。 3、说明 由于 IIf 会计算 truepart 和 falsepart,虽然它只返回其中的一个。因此要注意到这个副作用。例如,如果 falsepart 产生一个被零除错误,那么程序就会发生错误,即使 expr 为 True。 4、示例: 如果你有一段这样的代码: If x = 1 Then y = "Yes" Else y = "No" End If 那么,利用IIF函数可以将这段代码改写如下: y = IIf(x = 1, "Yes", "No") 怎么样?呵呵,很简练吧! 我的应用代码示例:http://club.excelhome.net/dispbbs.asp?boardID=23&ID=140011&page=1

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-12-15 00:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

再来一段五彩纷呈的文字实现代码:

Sub colorChar()
Dim myR As Range, i As Byte, iMax As Byte
Dim colorArray As Variant
Application.ScreenUpdating = False
ActiveDocument.Content.Text = "=rand(2,45)" '自动产生虚拟文本
Application.Activate
SendKeys "{end}{enter}", True
colorArray = Array(wdColorDarkRed, wdColorRed, wdColorDarkGreen, wdColorOliveGreen, _
wdColorBrown, wdColorOrange, wdColorGreen, wdColorDarkYellow, _
wdColorLightOrange, wdColorLime, wdColorGold, wdColorBrightGreen, _
wdColorYellow, wdColorDarkTeal, wdColorPlum, wdColorSeaGreen, _
wdColorDarkBlue, wdColorViolet, wdColorTeal, wdColorIndigo, _
wdColorBlueGray, wdColorTan, wdColorLightYellow, wdColorRose, _
wdColorAqua, wdColorLightGreen, wdColorBlue, wdColorPink, _
wdColorLightBlue, wdColorLavender, wdColorSkyBlue, wdColorPaleBlue, _
wdColorTurquoise, wdColorLightTurquoise)
i = 0
iMax = UBound(colorArray)
For Each myR In ActiveDocument.Characters
myR.Select
Selection.Font.Color = colorArray(i)
i = IIf(i < iMax, i + 1, 0) '这里使用了IIf函数
Next
Application.ScreenUpdating = True
Application.Activate
End Sub

TA的精华主题

TA的得分主题

发表于 2005-12-15 08:45 | 显示全部楼层

这个程序很特别,如果按F5可以正常看到效果。

如果按

F8则不行。不信,兄台可以试试,看来是sendkeys在起作用。

TA的精华主题

TA的得分主题

发表于 2005-12-15 17:04 | 显示全部楼层

楼主专研精神可赞,只是这些应用,我想,论坛上太多了,另外,你的例子中,总离不开SENDKEY,离不开SELECT,对WORD编程意义不是特别大。

至于是否原创,我也觉得没有必要。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-12-15 19:22 | 显示全部楼层
以下是引用[I]守柔[/I]在2005-12-15 17:04:40的发言:[BR]

楼主专研精神可赞,只是这些应用,我想,论坛上太多了,另外,你的例子中,总离不开SENDKEY,离不开SELECT,对WORD编程意义不是特别大。

至于是否原创,我也觉得没有必要。

谢谢守柔老师 sendkeys 是从您的拼音指南中首次知道的,在想不出其它办法的时候,只好用它了。 我会认真学习您的代码,还有论坛的答复的帖子,努力提高掌握VBA的水平

TA的精华主题

TA的得分主题

发表于 2005-12-16 06:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

注意:

何时使用哪个函数或者语句,需要根据实际情况而定。

比如:IIF函数,程序将对其中的两个条件都要进行判断;而使用IF THEN语句时,程序只判断其中满足条件的条件语句。也就是说,如果IIF中两个条件中,有一个是出错的,则这个函数会出错。

如:

Sub Example1()
Dim a As Integer
Dim b As Integer
Dim c
a = -1
b = 0
If a > 0 Then
c = a / b
Else
c = a * b
End If
MsgBox c
End Sub
Sub Example2()
Dim a As Integer
Dim b As Integer
Dim c
a = -1
b = 0
c = VBA.IIf(a > 0, a / b, a * b)
MsgBox c
End Sub

同样,关于CHOOSE,Switch函数,对于其中的条件过多时,其可读性就差,不如SELECT CASE 语句更灵活方便。

因此,写程序必须具体问题具体分析,不能一概而论,程序的好坏简易还与被处理的对象(文档)的大小有关,如果文档很大,则必须考虑程序运行的效率,反之,则不易体现。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-12-16 15:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢守柔老师的指点
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 02:44 , Processed in 0.035150 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表