Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6662359
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Python/Ruby

2011-06-03 12:59:32

在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) |
给主人留下些什么吧!~~