ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 8617|回复: 15

[分享]WORD对话框操作心得(Word Dialog)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-3-11 10:30 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
分享:WORD对话框操作心得(Word Dialog)

在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中对话框的一些经验总结,希望能抛砖引玉,另外由于时间与水平有限,错误难免,请指正.

TA的精华主题

TA的得分主题

发表于 2005-3-11 10:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-3-11 23:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常棒!!!

TA的精华主题

TA的得分主题

发表于 2005-3-11 23:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-3-12 00:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

[em02][em02][em02][em02][em02][em02][em02][em02][em02]

太棒了,支持。

[em02][em02][em02][em02][em02][em02][em02][em02][em02]

TA的精华主题

TA的得分主题

发表于 2005-3-12 23:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
可要好好學習了 感謝您的教導

TA的精华主题

TA的得分主题

发表于 2005-3-13 17:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-4-14 19:07 | 显示全部楼层

版主是否能对通用对话框说明得更详细些?比如这些对话框在word中通过什么命令来调用的(象文件打印可通过“fileprint”命令调用到文件打印对话框)。

另外看了http://club.excelhome.net/viewthread.php?tid=42157&replyID=174403&skin=1 的内容,经试验后发现有些对话框不是用来交互的,用.show命令可以直接执行某些功能,因此不能全部归结为对话框。不知是不是这样。

还有就是我没有找到“插入”菜单中“特殊符号”的对话框,使用“ctrl”+“alt”+“+”组合键也不能找到它的执行命令,望版主指教一二。

TA的精华主题

TA的得分主题

发表于 2005-4-14 19:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
还有一个对话框也找不到,“插入”——“数字”,只有命令insertnumber,没有相应的对话框。望指点。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-4-15 07:25 | 显示全部楼层

第八楼的问题:

通用对话框,可参见VB教程,内有较详细的说明和代码范例。

SHOW方法:

显示和执行在指定的 Word 内置对话框中的初始操作。返回值为 Long 类型,用于指明关闭对话框时单击的按钮。

第9楼的问题:

试试这个:

Sub test() Application.Dialogs(812).Show Application.Dialogs(wdDialogInsertNumber).Show End Sub

特殊符号一事,由于我的WORD中无此命令,等我到其它机器上试一下。

谢谢!

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 14:34 , Processed in 0.045627 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表