一项任务的要求是把表1按照表2填写完整后,打印输出。如果人多的话,这项工作很是繁琐,所以我写了一个VBA程序,让工作自动进行。后来,这个程序的思路还发表的论文。
用VBA实现批量复制和打印任务
http://s15/mw690/49c182c2hd46874a138ae&690
http://s8/mw690/49c182c2hd468750c6427&690
Option Explicit
Dim
Arr()
'定义要打印的记录的行号为可变数组,用来保存要打印的记录的行号
Dim LastRow%, PrePage%, FindNameRow%
'定义数据表中的最后一行行号、向导在第二步时的页面、找到的姓名所在的行
Dim OutToPrint As
Boolean
'定义是否输出到打印机
Private Sub CBcancel_Click()
Unload
Me
End Sub
Private Sub CBfinish_Click()
Dim i%,
j%
Dim
myadd()
UFPrint.Hide
myadd =
Array("C2", "E2", "G2", "C3", "E3", "G3", "C4", "C5", "F5", "C6",
"C7", "E7", "C8", "E8", "C9", "E9", "G9", "C10", "E10", "G10",
"B11")
' 定义需输入内容的单元格地址为数组
For i =
LBound(Arr) To
UBound(Arr)
' 循环提取数据表中需要处理的记录
For j = LBound(myadd) To
UBound(myadd)
' 循环提取各字段数据
Sheets("print").Range(myadd(j)).Value =
Sheets("data").Cells(Arr(i), j + 1).Value
' 将数据填入到表格中
Next j
If OutToPrint Then
Sheets("print").PrintOut
' 打印
If Not OutToPrint Then
Sheets("print").PrintPreview
'打印预览
DoEvents
Next
UFPrint.MultiPage1.Value =
0
'到第一个页面
UFPrint.Show
End Sub
Private Sub CBnext_Click()
Dim i%,
SelCount%, MyCount%, ChangePage%
Select Case
MultiPage1.Value
'判断按下“下一步”按钮时的页面
Case
0
'第一个页面
If OptionButton1.Value = True Then ChangePage = 1
If OptionButton2.Value = True Then ChangePage = 2
If OptionButton3.Value = True Then ChangePage = 3
'根据所做的选择,分别设置将要跳到哪一个页面
Case
1
'第二个页面
If Val(TextBox1) < 2 Or Val(TextBox1)
> LastRow Or Val(TextBox2) < 2 Or
Val(TextBox2) > LastRow Then
MsgBox "数值应大于等于2,小于等于" & LastRow, vbOKOnly +
vbExclamation, "提示"
TextBox1 = 2
TextBox2 = 2
Exit Sub
End If
'如果数据不符合要求,退出过程
ReDim Arr(CInt(TextBox1) To
CInt(TextBox2))
'重新定义数组
For i = LBound(Arr) To UBound(Arr)
Arr(i) = i
Next i
'将数据写入数组
ChangePage = 4
'设置要转到的下一个页面
Case
2
'第三个页面
SelCount = 0
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then SelCount = SelCount + 1
Next i
'得到共有多少条记录被选择
ReDim Arr(1 To SelCount)
'重新定义数组
MyCount = 1
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then