编程技术、软件应用与系统模拟

(Programming, Applicaiton and Simulation)



本站目录

 

首页
ASP/Access/IIS
DELPHI/PASCAL
PASCAL高级编程
C语言编程实例
WORD
Excel
MATLAB
MINITAB讲座
Windows
DOS
SAS
生物系统模拟
土壤水分剖析器
其他



镜像站点

 

主站
北美镜象站
欧洲镜象站(1)
欧洲镜象站(2)

本站 Google

[搜索]  [站内导航]
座右铭:
只做有益人类的事
不做有害人类的事


给WORD 6.0扩充几项实用功能

董占山
(中国农科院棉花所,河南安阳 455112)

WORD 6.0中文版自推出以来已风靡中华大地,成为我国文字处理的主流软件。笔者在长期使用WORD 6.0的过程中,利用WORDBASIC语言编写了几个实用的宏命令,对WORD环境进行了必要的扩展,今将这几个实用宏命令推荐给广大读者,以抛砖引玉。

自动打开编辑过的文件

WORD启动时,都默认创建一个基于NORMAL模板的空文档,实际上,我们每次启动WORD,并非都要建立新文档,多数情况下需要将该空文档关闭。况且,我们在使用WORD编辑文档时,一个文档往往需要多次编辑才能完成。如果能够让WORD在每次启动时,提供一个弹出窗口,将前几次编辑过的文档列表,让用户从中选择一个文档直接打开,不再自动创建新的空文档,那将大大方便用户。基于这种考虑,我利用WORDBASIC编写了一个自动宏AUTOEXEC,它在WORD启动时自动执行,可以完成上述任务。

WORD启动时,首先调用AUTOEXEC宏,弹出一个对话窗口,在文件名列表框中列出了前几次编辑的文件(出现在“文件”菜单的底部),您可以从列表框中选择一个欲编辑的文件,然后按〖确定〗按钮,WORD打开您选定的文档,且不再创建基于NORMAL模板的空文档,同时将文档路径设置为该文档所在的目录。这不仅使您进入WORD时就可以打开要编辑的文档,同时为打开该目录下的其它WORD文档提供了捷径。AUTOEXEC宏程序清单如下:

Sub MAIN
Dim MyList$(CountFiles() - 1)
For i = 1 To CountFiles()
MyList$(i - 1) = FileName$(i)
Next i
Begin Dialog UserDialog 366, 144, "选择文件"
OKButton 68, 109, 88, 21
CancelButton 204, 110, 88, 21
ListBox 24, 24, 319, 77, MyList$(), .MYList
Text 23, 10, 150, 13, "文件列表", .Text2
End Dialog
Dim dlg As UserDialog
x = Dialog(dlg, 1)
If x = - 1 Then
Myfile$ = FileName$(dlg.MyList + 1)
StrLen = Len(MyFile$)
i = 0
j = StrLen - 1
While i = 0
i = InStr(j, MyFile$, "\")
j = j - 1
Wend
Path$ = Left$(MyFile$, j)
ChDir(Path$)
FileList dlg.MyList + 1
End If
End Sub

建立新文件时自动设置页面和版心格式

我们使用WORD编辑文档时,习惯上会经常使用某种页面格式和版心大小。WORD在创建新文档时,按NORMAL模板的默认纸张类型和版心大小来设置页面和版心,若要改变这些设置,必须使用“文件”菜单中的“页面设置”和“版心设置”命令来更改。如果在创建文档时,让WORD给出一个选择窗口,从中选择合适的纸张类型和版心大小,能减少重复劳动、提高工作效率。

利用WORD提供的自动宏AUTONEW,可以在创建新文档时就设置好纸张类型和版心的大小。本文提供的AUTONEW可以在创建新文档时,首先弹出一个选择纸张类型对话窗口,您可以从纸张类型列表框中选择合适的纸张类型,然后按〖确定〗按钮,WORD将页面设置为指定的纸张类型,之后弹出版心设置对话窗口,进行版心大小设置,设置完毕,按〖确定〗按钮,创建新文档。AUTONEW宏命令清单如下:

Sub MAIN
Dim stPgSz$(7)
stPgSz$(0) = "A3 (29.7 x 42 厘米)"
stPgSz$(1) = "A4 (21 x 29.7 厘米)"
stPgSz$(2) = "A5 (14.8 x 21 厘米)"
stPgSz$(3) = "B4 (25.7 x 36.4 厘米)"
stPgSz$(4) = "B5 (18.2 x 25.7 厘米)"
stPgSz$(5) = "16开 (18.4×26 厘米)"
stPgSz$(6) = "32开 (13×18.4 厘米)"
stPgSz$(7) = "大32开 (14×20.3 厘米)"
Begin Dialog UserDialog 320, 144, "选择纸张"
OKButton 225, 18, 88, 21
CancelButton 225, 61, 88, 21
ListBox 22, 24, 160, 108, stPgSz$(), .ListBox1
Text 13, 8, 78, 13, "纸张类型", .Text1
End Dialog
Dim dlg As UserDialog
dlg.ListBox1 = 5
x = Dialog(dlg)
If x = - 1 Then
y = dlg.ListBox1
Select Case y
Case 0
Height$ = "42 厘米"'A3
Width$ = "29.7 厘米"
Case 1
Height$ = "29.7 厘米"'A4
Width$ = "21 厘米"
Case 2
Height$ = "21 厘米"'A5
Width$ = "14.8 厘米"
Case 3
Height$ = "36.4 厘米"'B4
Width$ = "25.7 厘米"
Case 4
Height$ = "25.7 厘米"'B5
Width$ = "18.2 厘米"
Case 5
Height$ = "26 厘米"'16开
Width$ = "18.4 厘米"
Case 6
Height$ = "18.4 厘米"'32开
Width$ = "13 厘米"
Case 7
Height$ = "20.3 厘米"'大32开
Width$ = "14 厘米"'大32开
Case Else
Height$ = "26 厘米"'16开
Width$ = "18.4 厘米"
End Select
FilePageSetup .Tab = "1", .PaperSize = "0", .TopMargin = "2.54 厘米", .BottomMargin = "2.54 厘米", .LeftMargin = "3.17 厘米", .RightMargin = "3.17 厘米", .Gutter = "0 厘米", .PageWidth = Width$, .PageHeight = Height$, .Orientation = 0, .FirstPage = 0, .OtherPages = 0, .VertAlign = 0, .ApplyPropsTo = 4, .FacingPages = 0, .FirstPageOnLeft = 0, .GutterPosition = 0, .HeaderDistance = "1.27 厘米", .FooterDistance = "1.27 厘米", .SectionStart = 2, .OddAndEvenPages = 0, .DifferentFirstPage = 0, .Endnotes = 0, .LineNum = 0, .StartingNum = "", .FromText = "", .CountBy = "0", .NumMode = - 1
ToolsMacro .Name = "TypePage", .Run
End If
End Sub

活动文档的自动定时存盘

在经常停电而又没有不间断电源保护的情况下,编辑软件的自动存盘功能显得十分重要。WORD 6.0提供了文档的自动定时存盘功能,但是它不是直接将活动文档以其文件名存盘,而是存储到临时文件中,这可以从WORD发生不正常退出时,再启动WORD时出现恢复文档的现象得知,我认为这种方法不好,有必要加以改进。

WORD每次打开文档时,会自动执行一个名为AUTOOPEN的自动宏,我们可以利用这个宏实现文档的自动定时存盘。方法是在AUTOOPEN中设置一个定时器,让它在一定时间之后启动另外一个宏,这个宏的功能是执行活动文档的存盘功能(直接存储到文档文件中,而不是存储到临时文件中,相当于执行了一次文档存盘命令)。

WORD提供的定时器不能设置时间间隔,为了每隔一定时间间隔(本例为5分钟)重复调用文档存盘宏,在文档存盘宏的最后加上一条调用AUTOOPEN宏的命令,这就可以循环往复地执行文档自动定时存盘了,直到文档关闭为止。本例中执行文档存盘的宏为SAVEDOC。

使用此宏后,请您将WORD的自动存盘功能关闭。方法是执行“工具”菜单中的“选项”命令,打开选项对话窗口,打击“保存”标签,将“自动保存时间间隔”复选框的“×”号去掉即可。

AUTOOPEN宏命令清单:

Sub MAIN
internal = 5 / 24 / 60
alarmtime = TimeValue(Time$()) + internal
alarm$ = Time$(alarmtime)
OnTime alarm$, "SaveDoc"
End Sub

SaveDoc宏命令清单:

Sub MAIN
MyFile$ = FileName$()
if MyFile$ <> "" then
FileSaveAs .Name = MyFile$, .Format = 0, .LockAnnot = 0, .Password = "", .AddToMru = 1, .WritePassword = "", .RecommendReadOnly = 0, .EmbedFonts = 0, .NativePictureFormat = 0, .FormsData = 0, .SaveAsAOCELetter = 0
autoopen
end if
End Sub

不打开文件打印文档

在WORD 6.0中要打印一份文档,必须先打开文档,将其置于文档编辑窗口中,然后才能打印,有时感到很不方便。本文提供了一个可以不打开文档就能打印其内容的宏PRINTDOCFILE,该宏首先弹出“打开文件”对话窗口,在对话窗口中选择一个文档文件,然后按〖确定〗按钮,WORD就直接打印该文档。PRINTDOCFILE宏命令清单如下:

Sub MAIN
Dim Opendlg As FileOpen
Opendlg.Name = "*.doc"
y = Dialog(Opendlg)
If y = - 1 Then FilePrint .AppendPrFile = 0, .Range = "0", .PrToFileName = "", .From = "", .To = "", .Type = 0, .NumCopies = "1", .Pages = "", .Order = 0, .PrintToFile = 0, .Collate = 1, .FileName = Opendlg.Name
End Sub

删除当前目录下的文档文件

有时由于工作的疏忽或初学者的无知,会在文档目录下生产许多无用的文档文件,我称之为垃圾文档,这些垃圾需要我们定期清扫,以保持工作环境的清洁。但WORD没有提供删除这些垃圾文档的命令,我们只好退到操作系统下删除这些文件。在退出WORD之前,首先要将文档查看一遍,观其内容,决定取舍,如决定删除,要记下其名字,以便在操作系统下删除文件时不致于搞错。能不能在WORD下直接删除这些垃圾文档呢?回答是肯定的,本文提供了一个名为DELETEDOCFILE的宏命令,它可以直接在WORD环境下删除垃圾文档文件,效果甚佳。DELETEDOCFILE宏命令清单如下:

Sub MAIN
FileFind .SearchPath = ".", .Name = "*.DOC"
size = CountFoundFiles() - 1
If size >= 0 Then
Dim mydocs$(size)
For count = 0 To size
mydocs$(count) = FoundFileName$(count + 1)
Next
End If
Begin Dialog UserDialog 320, 176, "删除文件"
ComboBox 23, 25, 209, 134, MyDocs$(), .ComboBox1
Text 19, 9, 160, 13, "当前目录下文件列表", .Text1
CancelButton 254, 60, 50, 21
PushButton 254, 20, 50, 21, "删除", .Push1
End Dialog
Dim Deletedlg As UserDialog
x = Dialog(Deletedlg, 1)
Select Case x
Case 1
If Deletedlg.ComboBox1 <> "" Then
msg$ = "真要删除" + Deletedlg.ComboBox1
If MsgBox(msg$, "警告", 1) = - 1 Then
Kill(deletedlg.ComboBox1)
End If
Else
MsgBox "没有文件名 ! ", "警告", 64
End If
Case Else
End Select
End Sub

6 复制当前文档到指定的目录或文件

我们编辑文档时,往往是在硬盘上进行的,但是当文档全部编制完成之后,多数情况下需要复制一份或几份到软盘上,作为备份。WORD本身没有提供文件的复制功能。虽然可以利用“文件”菜单中的“另存为”命令来完成类似的工作,但执行这条命令后,WORD的当前文档路径也变为新的路径,如果是向软盘复制,当软盘拿走后,WORD还要去读软盘,就会报错。本文提供了一个COPYDOCFILE的宏命令,它可以将当前活动文档直接复制指定的路径下或文件,但不改变当前文档路径和其它WORD环境设置。

CopyDocFile
Sub MAIN
a$ = FileName$()
If A$ <> "" Then
If MsgBox("请将软盘插入A:驱动器,准备好后按回车。", "提示", 1) = - 1 Then
FileSaveAs .Name = A$, .Format = 0, .LockAnnot = 0, .Password = "", .AddToMru = 1, .WritePassword = "", .RecommendReadOnly = 0, .EmbedFonts = 0, .NativePictureFormat = 0, .FormsData = 0, .SaveAsAOCELetter = 0
Dim Copydlg As CopyFile
Copydlg.FileName = a$
Copydlg.Directory = "A:\"
On Error Goto trap
x = Dialog(Copydlg, 1)
If x = - 1 Then CopyFile Copydlg
Goto skiptrap
trap :
MsgBox "没有复制当前文档! ", "注意", 48
End If
End If
skiptrap:
End Sub

进入MS DOS命令行环境

刚刚从DOS转移到WINDOWS系统的用户,由于习惯的原因,有时还想临时回到DOS系统下干点工作,而后再返回WINDOWS系统。但是,WORD没有提供象有些DOS应用程序提供的DOS SHELL命令,要回到DOS下,必须首先回到WINDOWS的程序管理器,从主组群中单击DOS PROMPT图标,才能回到DOS环境,这着实不方便。本文利用WORDBASIC的执行应用程序的函数,编写了一个DOS SHELL宏,它可以从WORD环境下直接回到DOS环境,使用很方便。DOSSHELL宏命令清单如下:

Sub MAIN
If AppIsRunning("MS-DOS") Then
AppActivate "MS-DOS", 1
If AppMaximize("MS-DOS") <> 1 Then AppMaximize("MS-DOS")
Else
Shell Environ$("COMSPEC"), 4
End If
End Sub

建立宏的方法

对不熟悉WORD宏功能的朋友来说,有必要简单介绍一下WORD宏命令的创建过程。下面以AUTOEXEC宏命令为例,介绍创建宏的具体步骤:

  • 单击“工具”菜单中的“宏”命令,弹出“宏”对话窗口;

  • 在“宏名”编辑框中输入“AUTOEXEC”;

  • 用鼠标单击〖编辑〗按钮,打开宏编辑窗口;

  • 在Sub MAIN和End Sub之间输入本文提供的AUTOEXEC宏命令程序;

  • 单击“常用”工具栏上的存盘按钮,将宏命令文本存盘;

  • 单击“文件”菜单中的“关闭”命令,关闭宏编辑窗口。

至此,AUTOEXEC宏命令已制作完成。要创建其它宏命令,只要按上述步骤操作即可。WORD还提供了调试宏的工具,在宏编辑窗口中,编写好宏命令之后,可以用宏调试命令,跟踪宏的执行过程,观察结果正确与否,直至宏可以正确执行为止。

宏的使用和自定义工具栏

当宏命令建立之后,除自动宏外,其它类型的宏命令均可以通过“工具”菜单中“宏”命令打开宏对话窗口,在此选择执行宏命令。但是,如果要经常使用这些宏的话,这就太繁琐了。为了快速调用宏,需要用WORD提供的自定义功能将宏定义到菜单或工具栏上,或者赋予一个键盘热键。

在“工具”菜单中有一个“自定义”命令,使用它可以重新设置WORD的菜单、工具栏或创建键盘快捷键。下面介绍创建自定义工具栏的方法和步骤,并将本文提供的几个实用宏安排到这个工具栏上。创建自定义工具栏的步骤如下:

  • 单击“视图”菜单中的“工具栏”命令,弹出“工具栏”对话窗口;

  • 单击〖添加〗按钮,弹出“添加工具栏”对话窗口;

  • 在“工具栏名”编辑框中输入新工具栏名“专用”;

  • 单击〖确定〗按钮,弹出“自定义”对话窗口,在屏幕的某个位置同时显示代表新建工具栏的小窗口;

  • 用鼠标移动“分类列表框”的滚动条,找到“宏”列表项,单击之,在“宏列表框”中显示出WORD 6.0的所有可用宏命令;

  • 在宏列表框中选择一个宏命令,如COPYDOCFILE宏,按住鼠标左键不放,将其拖到第4步出现的小窗口上,在小窗口中就显示出一个用虚线框起来的按钮,并弹出一个“自定义按钮”对话窗口;

  • 在“自定义按钮名称”编辑框中输入按钮的名字“复制文档”,按〖确定〗按钮,一个按钮就定义好了,它代表复制当前文档宏;

  • 重复6~7步,可以将DELETEDOCFILE、PRINTDOCFILE、DOSSHELL等宏命令定义到新创建的工具栏上;

  • 全部定义完毕后,单击“自定义”对话窗口的〖确定〗按钮,完成新工具栏的定义。

这时您就可以使用这个工具栏执行刚刚创建的宏命令了,而不必每次打开“工具”菜单,单击“宏”命令,从宏对话窗口中执行新建的宏命令了。

10  结语

本文是笔者长期使用WORD的经验总结,它证明WORD 6.0系统不仅提供了优秀的文字处理功能,同时为用户提供了扩展WORD的可能性。您可以使用WORDBASIC编写出非常复杂的宏命令,来完成各种各样的重复工作,优化您的工作环境,使WORD使用起来更加容易。事实上,WORD本身的许多功能就是用宏来实现的,如版心的设置、设置增强功能等。

本文提供的宏命令虽然是在WORD 6.0下编写制作的,但它们完全适合于WORD 5.0和WORD 7.0,您可以把它们移植到这些系统下,而不需要作什么修改。读者如果想给WORD添加一些新功能,来完成一些经常重复的操作,就自己动手制作一个宏命令,扩展WORD的功能,使WORD更易于使用。


© 1998-, 董占山, 版权所有。
转载文章请注明出处(www.sunfinedata.com/articles)。