在WORD操作中,我们最常用的莫过于命令和对话框的操作了。对话框是程序与用户交互过程的一个对话,通过对话框的设置,可以将程序或者用户指定的一些信息转化为程序语言,进行期望操作。
在WORD的开发应用中,我们有四种对话框,其中Application.Dialogs (Item)最为常用.
第一类对话框: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 = \对话框(\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 '选择从第几页到第几页如\ PrintSel = \您选择了打印指定页:\ '数组
Ps = Split(.Pages, \ Upper = UBound(Ps) '上标 Lower = LBound(Ps) '下标 For i = Lower To Upper N = N + 1
'如果该数组中的某个值中提取有\的话 If InStr(Ps(i), \ Pl = Split(Ps(i), \
S = Pl(1) * 1 - Pl(0) * 1 '直接取得上标和下标数值之差
H = S + H End If Next
PPcount = N + H '打印的页数等于单页和连页数之和 End Select
MsgBox PrintSel & \打印份数为:\打印的页数为:\PPcount & \张,\
& \实际上产生了\张纸.\vbInformation End If End With End Sub
第二类对话框: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 文件\\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第三类对话框: 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
第四类对话框:隐含对话框(笔者之见),前台具有对话框功能,而在VBA中却不能直接调用的对话框,笔者姑且称之为隐含对话框.也就是不能通过application.dialogs(**).show来直接调用的对话框.
比如保护文档对话框,你在对话框中找不到,但你可以通过命令调用;你也可以通过代码直接进行保护/解除文档的工作(包括打开文档密码),比如: '简化了的保护文档\\解除文档保护代码: Sub ProtectDoc()
If ActiveDocument.ProtectionType = -1 Then _ ActiveDocument.Protect 2, True, \End Sub
Sub UnprotectDoc()
If ActiveDocument.ProtectionType <> -1 Then _ ActiveDocument.Unprotect \End Sub
而有些对话框,则在特定条件下,才存在,比如,VBA工程保护密码,有这个对话框,但你却找不到写相应代码的属性与方法,只能通过调用命令,打开对话框,然后使用SENDKEYS 的方法预置对话框属性与内容后,确定.比如,VBA 工程保护密码的使用
Sub UnProtectPassWord() Dim MyPw As String
'最新修改时间:2004-12-11 16:15:04 MyPw = \假设密码为123,可修改 Application.ScreenUpdating = False '打开VBE/工具/Project属性对话框
Application.VBE.CommandBars.FindControl(ID:=2578).Execute '发送密码和回车,第二次回车为确定属性对话框框 SendKeys MyPw & \ Call ReWork
Application.ScreenUpdating = True End Sub
通过上述代码的介绍,相信你已经了解了如何在代码中使用和操作WORD对话框了,更多的内容,有待于各位的进一步开发,到时候,别忘了告诉守柔!