excel vba 学习笔记 Evaluate
(2012-10-03 22:21:42)
标签:
dateexcel高级教程vba杂谈教育 |
Evaluate
很早以前,就认识了你,只是,不大在意你的存在与意义。
近来常用了你,才知道你确实帮了很多忙。
例如,在引用一些函数时,用VBA来找替代的公式或者函数,非常难,
那直接运用你就行的了。
其实,还是先来看下你的原来面貌吧。
Evaluate 方法
将一个 Microsoft Excel 名称转换为一个对象或者一个值。
expression.Evaluate(Name)
expression
Name
说明
下列几类 Microsoft Excel 名称可以使用此方法:
- A1-样式引用。可以引用任何以 A1-样式符号表示的单个单元格。所有引用都是绝对引用。
- 单元格区域。可在区域引用中使用区域、交集和联合运算符(分别为冒号、空格和逗号)。
- 已定义的名称。可用宏语言指定任意名称。
-
外部引用。可以使用“!”操作符引用另一工作簿上的单元格或已定义的名称。例如,
Evaluate("[BOOK1.XLS]Sheet1!A1")
。
注意
[a1].Value = 25
Evaluate("A1").Value = 25
trigVariable = [SIN(45)]
trigVariable = Evaluate("SIN(45)")
Set firstCellInSheet = Workbooks("BOOK1.XLS").Sheets(4).[A1]
Set firstCellInSheet = _
Workbooks("BOOK1.XLS").Sheets(4).Evaluate("A1")
使用方括号的优点在于代码较短。使用 Evaluate 的优点在于参数是字符串,这样您既可以在代码中构造该字符串,也可以使用 Visual Basic 变量。
示例
本示例将工作表 Sheet1 上 A1 单元格的字体设置为加粗。
Worksheets("Sheet1").Activate
boldCell = "A1"
Application.Evaluate(boldCell).Font.Bold = True
再看下几个实例“:
A1单元格内容为:2005-9-8,B3单元格内容为:2007-4-5,要求出它们间隔的年、月、日,在工作表中可以使用Datedif函数,而且结果非常精确,但在VBA中却比较麻烦。因为Datedif函数不能直接在VBA中使用,而使用VBA提供的函数却不能得到精确的计算结果。于是很多人在写代码时就自编一个函数来实现Datedif函数的功能,其实借助VBA的Evaluate函数我们同样可以很方便地在VBA中使用Datedif函数:
一、求单元格时间间隔:
A1单元格内容为:2005-9-8,B3单元格内容为:2007-4-5:
Sub test1()
MsgBox " 间隔" & Application.Evaluate("=Datedif(a1,b3,""y"")") & "年"
MsgBox " 间隔" & Application.Evaluate("=Datedif(a1,b3,""m"")") & "月"
MsgBox " 间隔" & Application.Evaluate("=Datedif(a1,b3,""d"")") & "日"
End Sub
二、求两个TextBox的时间间隔:
TextBox1单元格内容为:2005-9-8,TextBox2单元格内容为:2007-4-5:
Sub test2()
MsgBox "=Datedif(""" & TextBox1.Text & """,""" & TextBox2.Text & """,""y"")"
MsgBox " 间隔" & Application.Evaluate("=Datedif(""" & TextBox1.Text & """,""" & TextBox2.Text & """,""y"")") & "年"
End Sub
三、求两个变量的时间间隔:
Sub test3()
Dim time1, time2
time1 = "2005-9-8"
time2 = "2007-4-7"
MsgBox " 间隔" & Application.Evaluate("=Datedif(""" & time1 & """,""" & time2 & """,""y"")") & "年"