可以重写(不知道术语对不对)word命令,因为打印对应的word命令为FilePrint,因此只需把这个命令重新按照自己所需要的结果进行定义,那么调用宏的命令是Run,因此可以在打印中首先运行宏,然后再执行打印,执行打印后可以再进行其他一些操作,比如清除刚才写入的内容等。
|
Application.Run
“MakeTime”
‘调用宏,其中MakeTime为宏名
Dialogs(wdDialogFilePrint).Show
‘显示打印窗口
ActiveDocument.Sections(1).Headers(1).Range.Text = “”
ActiveDocument.Sections(1).Headers(2).Range.Text = “”
‘执行其它操作
|
VBA学习
word, 宏, 打印
在实际应用中,为防止随意篡改资料,需要一定的防护方法,其中随机数的生成就是一种。VB中生成随机数的代码如下所示:
Function
MakeRand(nLength As Integer) As String
‘随机生成指定长度的字符串,包括英文字母和数字
Randomize
For i = 1 To nLength
r = Int(Rnd * 3)
Select Case r
Case 0 ‘数字
MakeRand = Rand & Int(Rnd * 10)
Case 1 ‘小写字母
Rand = Rand & Chr(Int(Rnd * 26) + 97)
Case 2 ‘大写字母
Rand =Rand & Chr(Int(Rnd * 26) + 65)
End Select
Next
End Function
上述程序能够生成任意长度的随机数,包括数字和字母,其中长度由参数nLength决定。下面对用到的函数和语句进行解析。
Rnd函数
功能:返回一个包含随机数值的Single。
语法:Rnd[(number)]可选的number参数是Single或者任何有效的数值表达式。
返回值:如果number的值是Rnd生成,小于0每次都使用number作为随机数种子得到相同的结果;大于0则是序列中的下一个随机数;等于0,则是最近生成的数;缺省状态下是序列中的下一个随机数。
说明:Rnd函数返回值大于等于0小于1;number的值决定了Rnd生成随机数的方式;对最初给定的种子都会生成相同的数列,因为每次调用Rnd函数都用数列中的前一个数作为下一个数的种子;在调用Rnd之前,先使用无参数的Randomize语句初始化随机数生成器,该生成器具有根据系统计时器得到种子的功能。
Ps:生成某个范围内随机整数的公式Int((upperbound-lowerbound+1)*Rnd+lowerbound)
Randomize
功能:初始化随机数生成器
语法:Randomize
{number],可选的number参数是Variant或任何有效的数值表达式
说明:Randomize用number将Rnd函数的随机数生成器初始化,该随机数生成器给number一个新的种子值。弱国省略,则用系统计时器Timer返回值作为新的种子值。如果没有使用Randomize,则(无参数)的Rnd函数使用第一次调用Rnd函数的种子值。
VBA学习
在word中实现自动求和,有多种方法,下面分别介绍:以下面表格为例,要求每行最左边的单元格的值等于其右侧所有单元格的和
1.用域的自动更新。在左侧单元格插入所需的求和公式——加入宏(update)
其中update代码为:
|
Sub update()’
‘ update Macro
‘ 宏在 2008-12-5 由
sunshineyxp 创建
‘更新第一行数据
With ActiveDocument
.Fields(1).update
End With
End Sub
|
|
Sub update1()
‘ update Macro
‘ 宏在 2008-12-5 由
sunshineyxp 创建
‘更新第二行数据
With ActiveDocument
.Fields(6).update
End With
End Sub
|
该种方法的缺陷有两点:第一fields的index需要挨着查看,如果文档很长而且域比较多,那么查找起来将会很复杂,如果一旦修改文档的某一处,那么后面其它的都要跟着变化,程序的可用性很低;第二如果涉及数据比较多,那么可能会出现闪烁现象,尤其是在vista系统下
2.使用控件textbox:使用textbox,则在最左侧的单元格中加入控件textbox,例如分别为textbox1,textbox2,那么update对应的代码为:
|
Sub update()’
‘ update Macro
‘ 宏在 2008-12-5 由
sunshineyxp 创建
‘更新第一行数据
With
ActiveDocument
.TextBox1.Text=Val(.bookmarks(“text1”).Range.text)+Val(.bookmarks(“text2”).Range.text)+……
End
With
End Sub
|
|
Sub update1()
‘ update Macro
‘ 宏在 2008-12-5 由
sunshineyxp 创建
‘更新第二行数据
With ActiveDocument
.TextBox2.Text=Val(.bookmarks(“text8”).Range.text)+Val(.bookmarks(“text7”).Range.text)+……
End With
End Sub
|
3.直接应用单元格
核心代码为:
.Tables(3).Cell(1,1).Range.Text=
Val(.bookmarks(“text1”).Range.text)+Val(.bookmarks(“text2”).Range.text)+…… |
如果涉及到的表格数据很多,那么第二种和第三种方法比较好,因为速度比较快,但是textbox的安全性比较低,容易受病毒的感染。
做表格的自动求和关键是理清求和的思路,应该对哪些单元格求和,之间的逻辑关系又是怎样的。
VBA学习
word
1. 取得下拉列表的值
With ActiveDocument
i =.FormFields(”DropDown11″).DropDown.Value
Select Case i
Case 1: coContent = “甲乙共同所有”
Case 2: coContent = “甲方所有”
Case 3: coContent = “乙方所有”
……
End Select
End With
2.嵌套表格的引用:例如引用全局的第三个表格中的第一个表格的数据
ActiveDocument.Tables(3).Tables(1).Cell(5,4).Range.Text
3.引用标签中的值(文本型窗体域):ActiveDocument.Bookmarks(”Text113″).Range.Text
4.数据格式的转换,例如把结果表示为.00的格式
.Tables(3).Tables(1).Cell(6, 3).Range.Text =
Format(Val(.Bookmarks(”Text113″).Range.Text) + Val(.Bookmarks(”Text108″).Range.Text),”0.00″)
5.引用TextBox的值
ActiveDocument.TextBox29.Text=……
6.字符串的分离
a =Split(.Tables(4).Cell(Row:=9, Column:=3).Range.Text, “”)以空格为界分离字符串
7.获取系统时间
Format$(Now,”yyyy年mm月dd日hh时mm分ss秒”)
VBA学习
宏