在WORD操作中,我们最常用的莫过于命令和对话框的操作了。对话框是程序与用户交互过程的一个对话,通过对话框的设置,可以将程序或者用户指定的一些信息转化为程序语言,进行期望操作。
在WORD的开发应用中,我们有四种对话框,其中Application.Dialogs (Item)最为常用.
1. 第一类对话框:Application.Dialogs(Item)
它几乎(注意是几乎,不是全部)涵盖了前台用户与WORD APPLICATION程序的交互过程。我们可以使用for each –next 取得访问application.dialogs,也可以使用index的方法进行访问,耐心寻味的是,两者运行的结果是不同的!WORD VBA帮助文件中提供的WORD 内置对话框的数量也有出入,说明部分对话框不是特别支持访问,Application.Dialogs.Count=227,而实际上利用以下代码可以得到748个对话框。(注意,版本号和安装语言不同,以及文档设置的不同,DIALOG数量可能都会有所不同)
请运行以下程序,以获得更多的Dialog
Sub GetAllDialogs()
Dim i As Integer, aString As String, MyString As String, Tem As String
On Error Resume Next
With Application
.ScreenUpdating = False
For i = 1 To 10000
Tem = .Dialogs(i).CommandName
If Err.Number <> 0 Then Err.Clear: GoTo GONE
aString = "对话框(" & i & "):" & Tem & vbCrLf
MyString = MyString & aString
GONE: Next
Selection.InsertAfter MyString
.ScreenUpdating = True
End With
End Sub
WORD内置对话框中的参数,请参阅WORD VBA帮助文件之内置对话框参数列表.以下为对话框使用示例:
Sub FilePrint()
Dim MyDialog As Dialog, Ps() As String, Pl() As String, PPcount As Integer, PrintSel As String
Dim S As Integer, N As Integer, H As Integer, Upper As Integer, Lower As Integer, Cop As Integer
Set MyDialog = Application.Dialogs(wdDialogFilePrint) '定义打印对话框
With MyDialog
If .Show = -1 Then '按下确定按钮
Cop = .NumCopies '返回打印份数
Select Case .Range '打印区域
Case 0
PrintSel = "您选择了打印所有页"
'取得文档总页数
PPcount = ActiveDocument.Content.Information(wdNumberOfPagesInDocument)
Case 2 '相当于打印光标所在页
PPcount = 1
PrintSel = "您选择了打印当前第" & Selection.Information(wdActiveEndPageNumber) & "页"
Case 4 '选择从第几页到第几页如"1-3,5,9,10-15"
PrintSel = "您选择了打印指定页:" & .Pages
'数组
Ps = Split(.Pages, ",")
Upper = UBound(Ps) '上标
Lower = LBound(Ps) '下标
For i = Lower To Upper
N = N + 1
'如果该数组中的某个值中提取有"-"的话
If InStr(Ps(i), "-") > 0 Then
Pl = Split(Ps(i), "-")
S = Pl(1) * 1 - Pl(0) * 1 '直接取得上标和下标数值之差
H = S + H
End If
Next
PPcount = N + H '打印的页数等于单页和连页数之和
End Select
MsgBox PrintSel & ",打印份数为:" & Cop & ",打印的页数为:" & PPcount & "张," & vbCrLf _
& "实际上产生了" & Cop * PPcount & "张纸.", vbInformation
End If
End With
End Sub
2. 第二类对话框:Application.FileDialog,它包括以下四个文件对话框:
Application.FileDialog (msoFileDialogFilePicker)浏览文件对话框
Application.FileDialog (msoFileDialogFolderPicker)浏览文件夹对话框
Application.FileDialog (msoFileDialogOpen)'打开文件对话框
Application.FileDialog (msoFileDialogSaveAs)'另存为对话框
使用方法:
Sub Example2()'此代码功能为列出指定文件夹中所有选取的WORD文件全路径名
Dim MyDialog As FileDialog, GetStr As String
On Error Resume Next '忽略错误
'定义一个文件夹选取对话框
Set MyDialog = Application.FileDialog(msoFileDialogFilePicker)
With MyDialog
.Filters.Clear '清除所有文件筛选器中的项目
.Filters.Add "所有 WORD 文件", "*.doc", 1 '增加筛选器的项目为所有WORD文件
.AllowMultiSelect = True '允许多项选择
If .Show = -1 Then '确定
For Each vrtSelectedItem In .SelectedItems '在所有选取项目中循环
GetStr = GetStr & vbCrLf & vrtSelectedItem
Next vrtSelectedItem
' MsgBox GetStr
Selection.InsertAfter GetStr '列出所有文件名
End If
End With
End Sub
3. 第三类对话框: Microsoft Common Dialog Control,Version 6,即Common Dialog,又称通用对话框。
它有包括以下几个对话框类型:打开文件对话框、颜色对话框、字体对话框、打印机对话框和帮助对话框共6个对话框设置。
通用对话框的示例:
Private Sub UserForm_Initialize()
On Error GoTo ErrHandle '如果发生错误转至指定行标签处代码
'预置文件夹路径为WORD选项中的文件位置
CommonDialog1.InitDir = Application.Options.DefaultFilePath(wdDocumentsPath)
'设置文件类型过滤器
CommonDialog1.Filter = "所有Word文件(*.doc)|*.doc|文本文件(*.txt)|*.txt|所有文件(*.*)|*.*|文档模板(*.dot)|*.dot|RTF 文件(*.RTF)|*.RTF"
'指定文件类型项目(选定,或默认项)
CommonDialog1.FilterIndex = 1
'显示通用对话框之另存为对话框
CommonDialog1.ShowSave
'根据用户设置保存文件
ActiveDocument.SaveAs CommonDialog1.FileName
Exit Sub
'启用错误处理
ErrHandle: Unload (Me)
End Sub
4. 第四类对话框:隐含对话框(笔者之见),前台具有对话框功能,而在VBA中却不能直接调用的对话框,笔者姑且称之为隐含对话框.也就是不能通过application.dialogs(**).show来直接调用的对话框.
比如保护文档对话框,你在对话框中找不到,但你可以通过命令调用;你也可以通过代码直接进行保护/解除文档的工作(包括打开文档密码),比如:
'简化了的保护文档\解除文档保护代码:
Sub ProtectDoc()
If ActiveDocument.ProtectionType = -1 Then _
ActiveDocument.Protect 2, True, "Test"
End Sub
Sub UnprotectDoc()
If ActiveDocument.ProtectionType <> -1 Then _
ActiveDocument.Unprotect "Test"
End Sub
而有些对话框,则在特定条件下,才存在,比如,VBA工程保护密码,有这个对话框,但你却找不到写相应代码的属性与方法,只能通过调用命令,打开对话框,然后使用SENDKEYS 的方法预置对话框属性与内容后,确定.比如,VBA 工程保护密码的使用
Sub UnProtectPassWord()
Dim MyPw As String
'最新修改时间:2004-12-11 16:15:04
MyPw = "123" '假设密码为123,可修改
Application.ScreenUpdating = False
'打开VBE/工具/Project属性对话框
Application.VBE.CommandBars.FindControl(ID:=2578).Execute
'发送密码和回车,第二次回车为确定属性对话框框
SendKeys MyPw & "{Enter 2}", True
Call ReWork
Application.ScreenUpdating = True
End Sub
通过上述代码的介绍,相信你已经了解了如何在代码中使用和操作WORD对话框了,更多的内容,有待于各位的进一步开发,到时候,别忘了告诉守柔!
以上是笔者对WORD中对话框的一些经验总结,希望能抛砖引玉,另外由于时间与水平有限,错误难免,请指正.
阅读(3085) | 评论(0) | 转发(0) |