|

楼主 |
发表于 2009-6-26 10:02
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
2.48双面打印程序
Sub 双面打印()
On Error Resume Next
Dim X As Integer, I As Integer, J As Integer
X = ExecuteExcel4Macro("Get.Document(50)")
For I = 1 To X Step 2
ActiveSheet.PrintOut From:=I, To:=I
Next I
MsgBox "请将另一面打印纸放入到你的打印机", 0, "打印另一面提示"
For J = 2 To X Step 2
ActiveSheet.PrintOut From:=J, To:=J
Next J
On Error GoTo 0
End Sub
Sub 测试GET函数()
On Error Resume Next
For I = 1 To 88
X = ExecuteExcel4Macro("Get.Document(" & 50 & ")")
MsgBox X
Next I
End Sub
Worksheet.PrintOut 方法 :打印对象。
语法:表达式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)
表达式 一个代表 Worksheet 对象的变量。
参数:
名称 必选/可选 数据类型 描述
From 可选 Variant 打印的开始页号。如果省略此参数,则从起始位置开始打印。
To 可选 Variant 打印的终止页号。如果省略此参数,则打印至最后一页。
Copies 可选 Variant 打印份数。如果省略此参数,则只打印一份。
Preview 可选 Variant 如果为 True,Microsoft Excel 将在打印对象之前调用打印预览。如果为 False(或省略该参数),则立即打印对象。
ActivePrinter 可选 Variant 设置活动打印机的名称。
PrintToFile 可选 Variant 如果为 True,则打印到文件。如果没有指定 PrToFileName,Microsoft Excel 将提示用户输入要使用的输出文件的文件名。
Collate 可选 Variant 如果为 True,则逐份打印多个副本。
PrToFileName 可选 Variant 如果 PrintToFile 设为 True,则该参数指定要打印到的文件名。
IgnorePrintAreas 可选 Variant 如果为 True,则忽略打印区域并打印整个对象。
返回值:Variant
说明:From 和 To 所描述的“页”指的是要打印的页,并非指定工作表或工作簿中的全部页。
示例:此示例打印当前活动工作表。
Visual Basic for Applications
ActiveSheet.PrintOut
2.49金额大小写转换
Function daxiao(rg1 As Range)
rg = Abs(Round(rg1, 2))
SR1 = IIf(rg = Int(rg), Application.Text(Int(rg), "[DBNum2]") & "元整", Application.Text(Int(rg), "[DBNum2]") & "元")
SR2 = Replace(rg * 100, Int(rg), "")
SR3 = Choose(Mid(SR2, 1, 1) + 1, "", "壹角", "贰角", "叁角", "肆角", "伍角", "陆角", "柒角", "捌角", "玖角")
SR4 = Choose(Mid(SR2, 2, 1) + 1, "", "壹分", "贰分", "叁分", "肆分", "伍分", "陆分", "柒分", "捌分", "玖分")
daxiao = IIf(rg1 >= 0, SR1 & SR3 & SR4, "负" & SR1 & SR3 & SR4)
End Function
Replace函数:返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的。
语法:Replace(expression, find, replace[, start[, count[, compare]]])
Replace函数语法有如下命名参数:
部分 描述
expression 必需的。字符串表达式,包含要替换的子字符串。
find 必需的。要搜索到的子字符串。
replace 必需的。用来替换的子字符串。
start 可选的。在表达式中子字符串搜索的开始位置。如果忽略,假定从1开始。
count 可选的。子字符串进行替换的次数。如果忽略,缺省值是 –1,它表明进行所有可能的替换。
compare 可选的。数字值,表示判别子字符串时所用的比较方式。关于其值,请参阅“设置值”部分。
设置值:
compare参数的设置值如下:
常数 值 描述
vbUseCompareOption –1 使用Option Compare语句的设置值来执行比较。
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文字比较。
vbDatabaseCompare 2 仅用于Microsoft Access。基于您的数据库的信息执行比较。
返回值:Replace的返回值如下:
如果 Replace返回值
expression长度为零 零长度字符串("")。
expression为Null 一个错误。
find长度为零 expression的复本。
replace长度为零 expression的复本,其中删除了所有出现的find 的字符串。
start > Len(expression) 长度为零的字符串。
count is 0 expression的复本。
说明:Replace函数的返回值是一个字符串,但是,其中从start所指定的位置开始,到expression字符串的结尾处的一段子字符串已经发生过替换动作。并不是原字符串从头到尾的一个复制。
2.50分离文本与数字
Function FLA(XX)
Dim I As Integer
FLA = XX
For I = 0 To Len(FLA) '设I等于0至FLA的字符数
FLA = Replace(FLA, I, "") '将数字I换成""(空)
Next I
End Function
Function FLB(MR As Range)
Dim I As Integer
CC = ""
For I = 1 To Len(MR)
If Val(Mid(MR, I, 1)) > 0 Then
CC = CC & Mid(MR, I, 1)
End If
Next I
FLB = CC
End Function
2.51考试随机出题
Sub 随机出题()
Range("A2:N100").ClearContents
Range("A1") = Int(Rnd() * 100 + 1)
Sheets("题库").Rows(Cells(1, 1)).Copy Rows(1)
For x = 2 To 10
Do
Cells(x, 1) = Int(Rnd() * 100 + 1)
Loop Until x = Application.Match(Cells(x, 1), Columns(1), 0)
Sheets("题库").Rows(Cells(x, 1)).Copy Rows(x)
Next x
End Sub
2.52工资表自动分页小计
Dim rCurrentCell As Range ' 每一页之分页小计所在单元格
Dim r1stSubCell As Range ' 小计区域第一个单元格
Sub 新建分页小计()
Dim iSubCol As Integer, rSubArea As Range
Dim hb As HPageBreak
ActiveWindow.View = xlPageBreakPreview ' 进入 分页浏览 模式, 以便 EXCEL 正确计页
Set r1stSubCell = Range("A5") ' 本例名单从 A5 单元格开始
iSubCol = 20 ' 本例小计项共有 20 列
' 避免可能的错误:手工分页符正好与自动分页符重合
' 建议运行前先删除手工分页符
' 本过程可选
'For Each hb In ActiveSheet.HPageBreaks
' On Error Resume Next
' If hb.Type = xlPageBreakManual Then hb.Delete
'Next
' 最后一行插入手工分页符
ActiveSheet.HPageBreaks.Add Before:=r1stSubCell.End(xlDown).Offset(1, 0)
' 测试每一个分页符,
' 如果是自动分页符, 则在其上一行插入一小计行, 而本行纳入下一页
' 否则, 在本行插入一小计行
For Each hb In ActiveSheet.HPageBreaks
Set rCurrentCell = hb.Location
rCurrentCell.Select ' 看看先
If hb.Type = xlPageBreakAutomatic Then Set rCurrentCell = rCurrentCell.Offset(-1, 0)
rCurrentCell.EntireRow.Insert
Set rCurrentCell = rCurrentCell.Offset(-1, 0)
' 添加分页小计内容
With rCurrentCell
.Value = "本页小计"
.Font.Bold = True
Set rSubArea = .Offset(0, 1).Resize(1, iSubCol) ' 需要填充分页小计公式的区域
' 使用 SUBTOTAL 公式的好处是方便扩展, 且不会对已计算区域重复计算(如果可能发生这种情况的话)
rSubArea.Formula = "=SUBTOTAL(9," & r1stSubCell.Offset(0, 1).Address(1, 0) & ":" & .Offset(-1, 1).Address(1, 0) & ")"
Set r1stSubCell = .Offset(1, 0)
End With
Next
ActiveWindow.View = xlNormalView
End Sub
Sub 分页小计()
Application.ScreenUpdating = False
删除分计小计
删除所有分页符
Dim Lastrow As Integer
Lastrow = [A65536].End(xlUp).Row
k = -1
For Y = 5 + [j4] To Lastrow Step [j4]
k = k + 1
Rows(Y + k).Insert
Cells(Y + k, 1) = "本页小计"
For J = 2 To 8
Cells(Y + k, J) = Application.Sum(Range(Cells(Y + k - [j4], J), Cells(Y + k - 1, J)))
Next J
ActiveSheet.HPageBreaks.Add Before:=Rows(Y + k + 1)
Next Y
Cells(Lastrow + k + 2, 1) = "本页小计"
For J = 2 To 8
Cells(Lastrow + k + 2, J) = Application.Sum(Range(Cells(([j4] + 1) * (k + 1) + 5, J), Cells(Lastrow + k + 1, J)))
Next J
Application.ScreenUpdating = True
End Sub
Sub 删除分计小计()
For X = 1 To [A65536].End(xlUp).Row
If Cells(X, 1) = "本页小计" Then Rows(X).Delete
Next X
End Sub
Sub 删除所有分页符()
On Error Resume Next
For I = 1 To ActiveSheet.HPageBreaks.Count
ActiveSheet.HPageBreaks(I).Delete
Next I
End Sub
2.53会计科目代码自动转换
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Or Target.Row > 18 Then End
Dim MM As Range
mrg = Target.Value
Set MM = Columns(1).Find(mrg, , , xlWhole)
If MM Is Nothing Then
End
Else
Target.Value = MM.Offset(0, 1).Value
End If
End Sub
2.54动画图表
Sub 按钮2_单击()
X = Range("A65536").End(xlUp).Row
Range("B2:B" & X).ClearContents
For I = 2 To X
Do
Cells(I, 2) = Cells(I, 2) + 1
VBA.DoEvents '让系统执行完上句后,再执行下句
Loop Until Cells(I, 2) >= Cells(I, 3)
Next I
End Sub
DoEvents 函数:转让控制权,以便让操作系统处理其它的事件。
语法:DoEvents( )
说明
DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。
DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。
DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。
小心 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。 |
|