<IMG alt=dys800113网络音乐播放器 src=”http://fm974.tom.com/images/2003/erji.gif” align=absMiddle border=0></A> <FONT color=#cccccc>─────────── </FONT><BR>
<DIV align=center><FONT color=#5a91d6><STRONG>≡≡音乐Blog≡≡</STRONG> </FONT></DIV>
<CENTER><IFRAME src=”http://211.92.148.69/Player/NPlayer_s.htm” frameBorder=0 width=157 scrolling=yes height=84></IFRAME></CENTER><BR><A href=”http://osi.hshh.org:8088/message/msn/dys800113@hotmail.com”><IMG alt=通过MSN与我联系! onerror=”this.onerror=null;this.src=’http://osi.hshh.org/msnunknown.gif’;” src=”http://osi.hshh.org:8088/msn/dys800113@hotmail.com” align=absMiddle border=0> </A><FONT color=#cccccc>───────────</FONT><BR>
《肖申克的救赎》(Shawshank Redemption)是我所看过令人震撼的一部电影之一。故事与其说讲述的是主人公安迪成功越狱、重获自由,倒不如说是安迪从灵魂到肉体获得拯救的过程。在我看来,这部电影所表现的深刻、玄奥的宗教、社会、人生哲理是该片受到赞扬的最重要的原因。也就是说这部片子触及到了人类灵魂最深处的东西,它反思的是一个关于体制化与反体制化、希望与绝望、灵魂救赎的深刻的主题。
institutionalized(体制化)、hope(希望)、redemption(救赎)是《肖》片中三个最为关键的灵魂性词语,理解了这三个词语,我们才能够很好的解读该片所探讨的主题。
第一个词语institutionalized(体制化),影片是通过瑞德(Mogran Freeman饰演)之口说出对这个词语的看法的。他说:“first you hate them ,then you get used to,enough time passes…you get so you depend on them 。That is instititutionalized(起初,你讨厌它,然后你逐渐的习惯它,足够的时间后你开始依赖他。这就是体制化)”。理解片中所谓的体制化,我们回顾一下老布(那个监狱的图书管理员)的一生就明白了。老布在监狱中也就是在一种体制下,渡过了50年,几乎就是一生的时间。可以想象,曾经年轻的布,在刚刚进入这种体制时,他肯定曾经像一切刚刚进入Shawshank的所有NEW fish(菜鸟)一样,愤世嫉俗,并试图反抗,然后和大部分的囚徒一样,他们逐渐发现:反抗等于徒劳,于是从对体制的反抗逐渐变为慢慢的接受然后学会适应体制,最后发展到对体制的严重依赖。可怜的老布,他的灵魂和肉体都已经完全体制化了,在垂暮之年却被放逐出体制之外,可以想象的到,老布在一个几乎完全陌生的体制下是根本无法存活的,此时老布与体制脱离无异于一个胎儿被斩断脐带,因此老布最终选择了结束自己的生命。
第二个词语hope(希望)。对这个词语的阐释是通过安迪和瑞德在午餐中的争论展开的。心存信念和希望的安迪说:“forget that there are …places…in the world that aren’t made out of stone, there is something …inside…that they can’t get to…that is hope (不要忘了这个世界上还有可以穿透一切高墙的东西,它就在我们的内心深处,他们无法达到,也触摸不到,那就是希望)”,然而睿智的瑞德马上反驳说:“let me tell you something my friend 。hope is a dangerous thing hope can drive a man insane it’s got no use on the inside.you’d better get used to that idea (让我来告诉你什么是希望,我的朋友。希望一个危险的东西,它能够使人疯狂,我们心中的希望根本毫无用处。你最好习惯这个观念)”
安迪的救赎 ——个人和群体的灵魂拯救
理解了以上两个词语,体制化和反体制化、希望和绝望,我们的主人公安迪开始了影片的主题——灵魂的救赎(redemption)。在Shawshank这个世界中,我们可以把人们划分成两大群体:体制内群体和体制外群体。体制内包括像典狱长和狱警在内,他们是体制的缔造者、执行者和维护者,以典狱长和那个凶狠的狱警无疑是撒旦的化身、穷凶极恶的统治者。而Shawshank的囚徒无疑是属于体制外的人群,他们是体制的服从者、被同化者。体制外的囚徒可以分为四类,以安迪为代表的英雄(hero),以瑞德为代表的精英(elite),以老布等为代表的大众(the masses),和以被虐待致死的肥仔为代表的失败者(alsoran)。英雄在灵魂上是超越体制的,尽管他们的肉体不得不服从体制的约束,然而英雄却能够利用自己伟大的灵魂和伟大的行动不断改变体制、超越体制。精英属于对体制有深刻清醒认识、曾经试图反抗但是最终选择妥协的那一类人。精英和英雄的共同之处在于在灵魂深处,二者都有希望存在。精英和英雄的区别在于,英雄除了在精神上笃信希望外,而且在行动上试图改变体制,这种卓越智慧的努力,正是是英雄成为英雄的根本所在。精英虽然在灵魂中尚有对希望的信仰,然而在行动上他们已经完全放弃了反抗的可能,他们在灵魂上虽然没有被体制化,但在肉体上已经完全体制化了。其次,就是绝大多数的大众(就是你我这样的芸芸众生),他们也曾经试图反抗,但是在强大的体制化的力量之下,他们却不幸的从精神到肉体完全被体制化了。最后,就是那些被淘汰的失败者,他们成了体制的祭品,很快被淹没在体制化的漩涡之中。
当然,安迪通过自己的行动不仅改变了自己的命运,而且深深的影响了牢笼中的其他人:安迪在狱中扩建图书馆,帮助其他犯人读书识字,那个拿到同等学历的问题青年就是被拯救的典型,一个跨掉一代中的嬉皮士竟然能够被教化成一个绅士,我们不得不感叹于救赎的力量。因此安迪的拯救不单单是一个个体的行为,还是一个群体的行为,这完全符合基督教关救赎的定义。影片在阐释安迪反抗的过程时,用了一个宗教性很强的词语——redemption(救赎)。追述这个词语的宗教渊源,我们很容易想起耶稣灵魂拯救的故事,事实上,在片中不知一次的出现过《圣经》,以及对《圣经》的引用。具有讽刺意味的是,那个道貌岸然的典狱长,外表似乎是一个圣洁的圣徒而他的行为和内心却肮脏的像魔鬼。在他的办公室旁边又一个精致的隽语:主的审判将要降临,然而这末日的审判却最终降临到这个审判者身上。 因此,《肖》片最重要的贡献在于对历史观的一种寓言式的阐述和对个体救赎、群体救赎的宗教式的反思。
对该片的反思——救赎就在你我心中
不难理解,Shawshank不过是一个寓言而已,它事实上就存在于我们现实的生活中。现实中的每一个人,都在自觉不自觉的扮演着Shawshank中囚徒或者狱方的角色。我们中的大部分人,都将沦为老布那样的命运,逐渐地被体制化直到严重地依赖体制,终其一生不曾越规逾矩。任何一种组织、制度、社会都可以视Shawshank为缩影。比如,我们的大学,某种程度上就是一个Shawshank城堡,当我们离开这座城堡时,我们中的绝大多数是注定要被体制化的,即使进入社会,体制对人的侵蚀也一刻没有停止过,社会历史就是在体制化和反抗体制化的循环中不断前进的,然而救赎却完全在于我们自己的选择,正如安迪的选择一样,再强大的体制也永远无法剥夺我们选择救赎的权利,因为,救赎就存在于我们的心中,那是任何强权也无法到达的地方。to being,or not to being,选择救赎还是选择绝望,选择英雄还是选择大众,选择上帝还是选择撒旦,这一切都在你我心中。
由于种种原因,电影《肖申克的救赎》在1994年奥斯卡和票房竞争中败给了强劲对手《低俗小说》和《阿甘正传》。所幸的是,还有DVD能挽回一时票房败局。美国CNN最近公布,由于DVD的持续畅销和不俗口碑,《肖申克的救赎》已被评选为美国90年代最受欢迎电影。
根据一个互联网电影网站的调查,该片在美国历年来著名的250部影片中受欢迎程度高居第三,仅次于《教父》和《魔戒:王者归来》。碰巧的是,不久前英国《广播时报》周刊的网上调查,评选无缘问鼎奥斯卡奖的最佳电影,《肖申克的救赎》排名榜首。
winver———检查Windows版本
wmimgmt.msc—-打开windows管理体系结构(WMI)
wupdmgr——–windows更新程序
wscript——–windows脚本宿主设置
write———-写字板
winmsd———系统信息
wiaacmgr——-扫描仪和照相机向导
winchat——–XP自带局域网聊天
mem.exe——–显示内存使用情况
Msconfig.exe—系统配置实用程序
mplayer2——-简易widnows media player
mspaint——–画图板
mplayer2——-媒体播放机
magnify——–放大镜实用程序
mmc————打开控制台
dxdiag———检查DirectX信息
drwtsn32—— 系统医生
devmgmt.msc— 设备管理器
dfrg.msc——-磁盘碎片整理程序
diskmgmt.msc—磁盘管理实用程序
dcomcnfg——-打开系统组件服务
ddeshare——-打开DDE共享设置
dvdplay——–DVD播放器
net stop messenger—–停止信使服务
net start messenger—-开始信使服务
notepad——–打开记事本
nslookup——-网络管理的工具向导
ntbackup——-系统备份和还原
narrator——-屏幕“讲述人”
ntmsmgr.msc—-移动存储管理器
ntmsoprq.msc—移动存储管理员*(糙)*作请求
netstat -an—-(TC)命令检查接口
syncapp——–创建一个公文包
sysedit——–系统配置编辑器
sigverif——-文件签名验证程序
sndrec32——-录音机
shrpubw——–创建共享文件夹
secpol.msc—–本地安全策略
syskey———系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc—本地服务设置
Sndvol32——-音量控制程序
sfc.exe——–系统文件检查器
sfc /scannow—windows文件保护
tsshutdn——-60秒倒计时关机命令
tourstart——xp简介(安装完成后出现的漫游xp程序)
taskmgr——–任务管理器
eventvwr——-事件查看器
eudcedit——-造字程序
explorer——-打开资源管理器
packager——-对象包装程序
perfmon.msc—-计算机性能监测程序
progman——–程序管理器
regedit.exe—-注册表
rsop.msc——-组策略结果集
regedt32——-注册表编辑器
rononce -p —-15秒关机
regsvr32 /u *.dll—-停止dll文件运行
regsvr32 /u zipfldr.dll——取消ZIP支持
cmd.exe——–CMD命令提示符
chkdsk.exe—–Chkdsk磁盘检查
certmgr.msc—-证书管理实用程序
calc———–启动计算器
charmap——–启动字符映射表
cliconfg——-SQL SERVER 客户端网络实用程序
Clipbrd——–剪贴板查看器
conf———–启动netmeeting
compmgmt.msc—计算机管理
cleanmgr——-垃圾整理
ciadv.msc——索引服务程序
osk————打开屏幕键盘
odbcad32——-ODBC数据源管理器
oobe/msoobe /a—-检查XP是否激活
lusrmgr.msc—-本机用户和组
logoff———注销命令
fsmgmt.msc—–共享文件夹管理器
utilman——–辅助工具管理器
gpedit.msc——–组策略
开机→运行→命令(命令集锦,丰富你的知识)
使用Word实现电子表单填写
在企业中有许多表单需要填写,例如“请假单”、“问卷调查”、“反馈表”等,通常情况下,这些表单制作完成后需要打印出来,然后让员工进行填写,但是这样的工作过程难以统计和管理表单的填写情况。
通过Microsoft Word 2003的窗体设计,便可以实现在线的电子表单填写了。设计Word表单的操作步骤如下:
(1)首先,利用Word创建一个可供填写信息的表单文档,如图1所示。

图1 使用Word编辑调查表
(2)选择菜单【视图】|【工具栏】|【窗体】命令,打开“窗体”工具栏,如图2所示,“窗体”工具栏中主要包括“文字型窗体域”、“复选框型窗体域”和“下拉型窗体域”3种形式。
![]()
图2 “窗体”工具栏
(3)将光标停留在要填写“员工编号”的单元格内,单击“窗体”工具栏中的【文字型窗体域】按钮,这样在光标所在的单元格中就插入了一个“文字型窗体域”。如果文字型窗体域处于激活状态,则在插入“文字型窗体域”的位置上会显示出域底纹,反映在文档中则是一小块灰色的标记。
(4)选中“文字型窗体域”,单击“窗体”工具栏的【窗体域选项】按钮,可以打开“文字型窗体域选项”对话框,如图3所示。在该对话框中可以设置文字型窗体域的类型、默认文字、长度和书签等,在此,我们设置该文字型窗体域的书签为“员工编号”。

图3 文字型窗体域选项
(5)单击【确定】完成文字型窗体域的设置。
(6)将光标置于需要填写“部门”的单元格,单击“窗体”工具栏中的【下拉型窗体域】按钮,这样在光标所在的单元格中就插入了一个“下拉型窗体域”。单击“窗体”工具栏的【窗体域选项】按钮,可以打开“下拉型窗体域选项”对话框,如图4所示。

图4 下拉型窗体域选项
(7)在对话框中的“下拉项”文本框中,输入相关的选择项目。每输入一个选项,可以单击【添加】按钮,将输入项添加到“下拉列表的项目”列表中。在“下拉列表的项目”列表中选中某个选项,然后单击列表右侧的上下箭头按钮,可以在列表框中移动选项到合适的位置。
(8)在“书签”文本框中定义书签的名称为“所属部门”,单击【确定】按钮退出对话框。
(9)按照同样的方法完成请假单中其他区域的窗体制作,并为其定义书签。
这样,这个电子请假单就完成了。单击“窗体”工具栏上的【保护窗体】按钮,此时窗体处于保护状态,这样不仅可以做到避免文档的格式被破坏,更重要的用户只可以在窗体里输入信息,不能在窗体以外的地方输入,可以使文档更加规范,如图5所示。

图5 在Word中的电子调查表
Office 中的 Word
在所有 Office 应用程序中,Microsoft Word 可能是应用最广泛的应用程序,它还经常在自定义 Office 解决方案中扮演重要的角色。开发人员用各种不同的方式使用 Word,有一些方式很简单,而另一些极其复杂。无论涉及何种自定义解决方案,用 Visual Basic for Applications (VBA) 处理 Word 文档的基本方法都是一样的。在本月的栏目中,我将概括地介绍如何使用 Word,并提供一些关于如何运用 Range 对象处理 Word 文档内容的详细资料。
理解基本方法
在 Word 中,几乎所有的操作都要调用 Document 对象本身或其内容。当您用 VBA 操作 Word 时,Document 对象表示一个打开的文档,而且所有的 Document 对象都是 Application 对象的 Documents 集合的成员。
文档是一个由字符、单词、句子和段落组成的集合,字符组成单词,单词组成句子,句子组成段落,等等。因此,每一个 Document 对象都具有 Characters、Words、Sentences 和 Paragraghs 四个集合。此外,每个文档具有一个包含一个或多个节的 Sections 集合,每一个节都有一个包含该节页眉和页脚的 HeadersFooters 集合。
注意: 您可以在 Microsoft Office 2000 开发人员对象模型指南(英文)中查阅完整的 Word 对象模型。另外,您也可以使用对象浏览器和 Microsoft Word Visual Basic 参考帮助来学习有关具体某个对象、属性、方法和事件的详细内容。
通过 VBA 使用 Word 时,Document 对象处于中心位置。如果您要打开文档或创建新文档,就要创建新的 Document 对象。每个打开或新创建的文档均被添加至 Documents 集合。具有焦点的文档称为活动文档,由 ActiveDocument 属性表示。
Document 对象作为 Documents 集合中的一个成员,您可以通过使用 Document 对象的索引值(Document 对象在 Documents 集合中的位置,1 是集合中的第一个文档)或名称来引用它。另外,您也可以使用 ActiveDocument 属性来引用当前具有焦点的文档。例如,如果名为 Policies.doc 的文档是唯一打开的文档,则以下三个对象变量将全部指向 Policies.doc:
Dim docOne As Word.Document
Dim docTwo As Word.Document
Dim docThree As Word.Document
Set docOne = Documents(1)
Set docTwo = Documents(“Policies.doc”)
Set docThree = ActiveDocument
一般情况下不要使用 Documents 集合中的索引值来引用文档,因为当其它文档打开或关闭时,某个特定文档的索引值可能会随之改变。通常,您可以通过使用 ActiveDocument 属性或使用 Documents 集合的 Add 方法或 Open 方法创建的 Document 对象变量。以下示例显示了如何使用 ActiveDocument 属性把一个地址添加到当前具有焦点的文档中:
With ActiveDocument
.Envelope.Insert Address:=”Office Talk” _
& vbCrLf & “One Microsoft Way” & vbCrLf _
& “Redmond, WA 98052″, ReturnAddress:= _
“David Shank” & vbCrLf & _
“77 First Street” & vbCrLf & _
“Any Town, USA 12345″
End With
下面的示例说明如何通过使用 Documents 集合的 Open 方法,实例化 Document 对象变量。
Dim docPolicy As Word.Document
Set docPolicy = Documents.Open(“c:\my documents\policies.doc”)
最后一个示例显示如何通过使用 Add 方法,为新的空文档创建 Document 对象的实例。
Dim docPolicy As Word.Document
Set docPolicy = Documents.Add
通过使用 Open 方法打开的文档,或者通过使用 Add 方法创建的文档,都将成为用 ActiveDocument 属性表示的当前活动文档。如果您想使 Documents 集合里的其它文档成为活动文档,可使用 Document 对象的 Active 方法。
一旦您获取了要操作的 Document 对象,绝大部分您想通过 VBA 进行的工作将涉及文本的操作。首先要指定文档的一个部分,然后对它进行某些操作。例如,添加或删除文本,或者设置单词或字符的格式。您可以使用 Range 或 Selection 这两个对象来完成很多工作。在本月的专栏中,我将只讨论 Range 对象。下个月我们将进一步讨论 Selection 对象的具体内容。
理解 Word 的段落标记
当您通过程序处理文本时,必须理解 Word 如何处理段落标记。从根本上来看,Word 文档不过是一个巨大的字符流。人们倾向于认为文档是单词、句子和段落的集合。但实际上,文档就是一些字符。每个字符都有一定的作用。某些字符是字母、空格或制表符,另一些字符是段落标记或分页符。
段落标记在 Word 文档中扮演独特的角色,有时这种角色容易被误解。段落包含一个段落标记以及所有位于此段落标记和前一个段落标记之间的文本(不包括前一个段落标记)。另外,重要的是,段落标记本包含该段落的所有格式信息。
当复制单词、句子和段落时,如果包含段落标记,则所有包含在段落标记中的格式信息也被复制,并在它们被粘贴到其它位置时应用于所属段落。
如果您想从段落中复制文本并将其粘贴到另一个段落中,但不想同时复制段落格式,复制时请不要包括您要复制的文本旁边的段落标记。
每个空白的 Word 文档仅有一个段落标记,其中同时包含 Character 对象、Word 对象、Sentence 对象和 Paragragh 对象各一个。但是,“属性”对话框(“文件”菜单)中的“统计信息”选项卡将报告空白文档中没有字符、单词、句子和段落。这种差异突出显示了 Word 的一个重要侧面,当编程操作这些对象时,您需要特别注意这一点。
Range 对象
Range 对象表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定义。这个连续范围可以小到一个插入点,大到整个文档。它也可能是(而非必须是)由当前节表示的范围。您也可以定义一个 Range 对象,表示和当前节不同的范围。也可以在同一个文档中定义多个 Range 对象。Range 对象中的字符包含非打印字符,例如,空格、回车符和段落标记。
使用 Range 对象
创建 Range 对象的典型方法为:声明一个 Range 类型的对象变量,然后用 Document 对象的 Range 方法或另一个对象(例如 Character、Word、Sentence 或 Selection 对象)的 Range 属性来实例化该变量。例如,以下代码创建了两个 Range 对象,均表示活动文档中的第二个句子。
Dim rngRangeMethod As Word.Range
Dim rngRangeProperty As Word.Range
With ActiveDocument
If .Sentences.Count >= 2 Then
Set rngRangeMethod = .Range(.Sentences(2).Start, _
.Sentences(2).End)
Set rngRangeProperty = .Sentences(2)
End If
End With
当您使用 Range 方法来指定文档的特定范围时,您必须使用此方法的 Start 参数指定这个范围开始的位置,使用 End 参数指定结束的位置。文档的第一个字符的字符位置为 0。最后一个字符的位置和文档的字符总数相等。您可以通过使用 Characters 集合的 Count 属性确定文档中的字符数。如前面的示例所示,您也可以使用 Bookmark、Selection 或 Range 对象的 Start 和 End 属性来指定 Range方法的 Start 和 End 参数。您可以将 Start 和 End 参数设置为同一个数字,这将创建一个不包含任何字符的范围。
您可以使用对象的 SetRange 方法设置或重新定义 Range 对象的内容。您也可以通过使用 Range 对象的 Start 属性或 MoveStart 方法指定或重新定义范围开始的位置。同样地,您也可以通过使用 Range 对象的 End 属性或它的 MoveEnd 方法指定或重新定义范围结束的位置。
以下示例先用 ContentRagne 对象,该对象包含了文档的所有内容。接着,改变 EndSetRange 方法重新定义范围,使之包含文档的第一个段落。最后,使用 MoveEnd 方法将范围的结束位置扩展至文档的第二个段落末尾。此示例中的每一步都将当前范围中包含的字符的数量打印到“立即窗口”。
Sub RangeExample()
Dim rngSample As Range
Set rngSample = ActiveDocument.Content
With rngSample
Debug.Print “范围现在包含 ” & .Characters.Count _
& ” 个字符。”
.End = ActiveDocument.Sentences(1).End
Debug.Print “范围现在包含 ” & .Characters.Count _
& ” 个字符。”
.SetRange Start:=0, End:=ActiveDocument._
Paragraphs(1).Range.End
Debug.Print “范围现在包含 ” & .Characters.Count _
& ” 个字符。”
.MoveEnd Unit:=wdParagraph, Count:=1
Debug.Print “范围现在包含 ” & .Characters.Count _
& ” 个字符。”
End With
End Sub
您也可以通过使用对象的 Find 属性返回 Find 对象,重新定义 Range 对象。以下示例演示用 Find 属性在活动文档中确定文本的位置。如果找到了文本,Range 对象将自动重新定义以包含符合搜索条件的文本。
With rngRangeText.Find
.ClearFormatting
If .Execute(FindText:=”Find Me!”) Then
’ rngRangeText 被重新定义。
End If
End With
许多 Word 对象具有可返回 Range 对象的 Range 属性。在您需要使用 Range 对象的属性和方法进行操作,而对象本身又不提供这些属性和方法的情况下,您可以使用对象的 Range 属性返回 Range 对象。例如,以下代码使用 Paragragh 对象的 Range 属性返回 Range 对象,从而设置文档第一个段落中文本的格式:
Dim rngPara As Range
Set rngPara = ActiveDocument.Paragraphs(1).Range
With rngPara
.Bold = True
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Font.Name = “Arial”
End With
定义 Range 对象后,您可以应用此对象的方法和属性修改所指定范围的内容或获取有关信息。例如,您可以使用 Range 对象的 StoryType 属性来确定 Range 在文档中的位置。
处理 Range 对象中的文本
可以使用 Range 对象的 Text 属性来指定或确定该范围包含的文本。例如,以下代码首先显示了 Range 对象中的文本,然后更改文本并显示新文本,最后还原为原始文本。此示例说明了如何使用 Range 对象的 Range 属性将文本复制和粘贴到文档中并同时保持原段落结构不变。请注意在 strNewText 变量中包含段落标记 (vbCrLf) 的新文本如何替换在选定原段落时包含的段落标记。
Public Sub ChangeTextSample()
Dim rngText As Range
Dim strOriginalText As String
Dim strNewText As String
strNewText = “This text is replacing the original” _
& ” text in the first paragraph of the active” _
& ” document. This is all done using only the” _
& ” Text property of the Range object!” & vbCrLf
Set rngText = ActiveDocument.Paragraphs(1).Range
With rngText
MsgBox .Text, vbOKOnly, “This is the original text.”
strOriginalText = .Text
.Text = strNewText
MsgBox .Text, vbOKOnly, “This is the new text” _
& ” inserted in paragraph 1.”
.Text = strOriginalText
MsgBox “The original text is restored.”
End With
End Sub
您可以使用 Range 对象的 StoryType 属性确定范围在文档中的位置。文档构成部分是指文档中包含文本的特定范围。在一个文档中最多可以有 11 种文档构成部分,表示正文、页眉、页脚、批注等不同范围。您可以使用 StoryRanges 属性返回 StoryRanges 集合。StoryRanges 集合包含 Range 对象,表示文档中的每一个文档构成部分。
新 Word 文档只包含一个文档构成部分,称为“Main Text”,表示文档主体部分的文本。即使一个空白文档也包含字符、单词、句子和段落各一个。
您不需要专门将新文档构成部分添加至文档。当您把文本添加至文档的某个部分(11 种文档构成部分之一)时,Word 会自动添加它们。例如,如果您要添加页脚,Word 将添加 Footnotes 文档构成部分。如果您要添加批注,Word 将把 Comments 文档构成部分添加到文档的 StoryRanges 集合中。
您可以使用 Range 属性返回 Range 对象来表示文档中的每一个文档构成部分。例如,以下代码打印与 Main Text 和 Comments 文档构成部分相关的文本:
Dim rngMainText As Word.Range
Dim rngCommentsText As Word.Range
Set rngMainText = ActiveDocument.StoryRanges(wdMainTextStory)
Set rngComments = ActiveDocument.StoryRanges(wdCommentsStory)
Debug.Print rngMainText.Text
Debug.Print rngComments.Text
使用 Range 对象的 InsertBefore 或 InsertAfter 方法,可将文本添加至现有 Range 对象。事实上,有一整类方法,名称以“Insert”开头,可以用于操作 Range 对象。
如果有一个过程,能够把 Range 对象的 InsertBefore 和 InsertAfter 方法与 Text 属性结合,那么它将非常有用。在编程处理文本时,就可以使用这个过程在同一个地方处理大量工作。以下所示的 InsertTextInRange 正是这样一个过程。无论何时您需要将文本添加到 Range 对象,都可以调用 InsertTextInRange 过程。换句话说,无论何时您需要在 Word 文档中编程更改现有的文本,这一过程都将非常有用。
InsertTextInRange 过程使用两个必要的变量和一个可选的变量。strNewText 变量包含您想要添加至 Range 对象的文本,此对象在 rngRange 变量中指定。intInsertMode 可选变量指定将新文本添加至范围的方式。变量的值是三个自定义枚举常数中的一个,指定是否使用 InsertBefore 方法、InsertAfter 方法或 Text 属性替换现有的范围文本。
Public Enum opgTextInsertMode
Before
After
Replace
End Enum
Function InsertTextInRange(strNewText As String, _
Optional rngRange As Word.Range, _
Optional intInsertMode As opgTextInsertMode = _
Replace) As Boolean
’ 此过程将 strNewText 参数指定文本插入
’ rngRange 指定的 Range 对象中。它调用
’ IsLastCharParagraph 过程从 rngRange
’ 对象清除后续的段落标记。
Call IsLastCharParagraph(rngRange, True)
With rngRange
Select Case intInsertMode
Case 0 ’ 在范围之前插入文本。
.InsertBefore strNewText
Case 1 ’ 在范围之后插入文本。
.InsertAfter strNewText
Case 2 ’ 替换范围中的文本。
.Text = strNewText
Case Else
End Select
InsertTextInRange = True
End With
End Function
请注意,在范围中插入文本之前,使用了 IsLastCharParagraph 过程来删除最后一个段落的段落标记。以下示例使用 Chr$() 函数,以字符代码 13 表示段落标记。
Function IsLastCharParagraph(ByRef rngTextRange As Word.Range, _
Optional blnTrimParaMark As Boolean = False) As Boolean
’ 本过程接受字符、单词、句子或段落 Range
’ 作为第一个参数。如果范围中的最后一个字符
’ 是段落标记,则返回 True;否则返回 False。
’ 本过程还接受一个 Boolean 参数,用于指定
’ 当文本最后存在段落标记时,是否将其删除。
’ 当 blnTrimParaMark 参数为 True 时,本过
’ 程调用本身来删除所有后续的段落标记。
Dim strLastChar As String
strLastChar = Right$(rngTextRange.Text, 1)
If InStr(strLastChar, Chr$(13)) = 0 Then
IsLastCharParagraph = False
Exit Function
Else
IsLastCharParagraph = True
If Not blnTrimParaMark = True Then
Exit Function
Else
Do
rngTextRange.SetRange rngTextRange.Start, _
rngTextRange.Start + _
rngTextRange.Characters.Count – 1
Call IsLastCharParagraph(rngTextRange, True)
Loop While InStr(rngTextRange.Text, Chr$(13)) <> 0
End If
End If
End Function
在此示例中,使用了 Range 对象的 Characters 集合的 Count 属性来重新定义 Range 对象的终点。
有关处理段落的更多信息
在前面讨论过的 ChangeTextSample 过程中,请注意 strNewText 变量中的文本如何使用 vbCrLf 内置常量在文本的结束处创建段落标记,从而替换活动文档的第 1 段中的现有文本。这样做是为了避免新文档成为第二个段落的一部分。
当您创建表示 Character、Word 或 Sentence 对象的 Range 对象,并且该对象位于段落的结束位置时,段落标记自动包含在范围之内。而且,Range 对象将包含后续的空段落标记。例如,在一个由两个段落组成的文档中,假设其中第一个段落包含三个句子,而第二个段落为空,那么以下代码创建的 Range 对象表示第一段中的最后一个句子:
Set rngCurrentSentence = ActiveDocument.Sentences(3)
因为 rngCurrentSentence Range 对象引用第一个段落的最后一个句子,该段的段落标记(和所有后续的空段落标记)将被自动包含在范围中。如果您接着将此对象中的 Text 属性应用到一个没有使用段落标记结束的文本字符串,那么文档中的第二段将被删除。
当您编写在 Word 文档中操作文本的 VBA 代码时,您需要自行处理文本中出现的段落标记。当您在 Range 对象中剪切或粘贴文本时,您可以使用两种基本方法来处理段落标记:
在要插入文档的文本中,包含一个新的段落标记(用 vbCrLf 常量表示),如 ChangeTextSample 过程所示。
将最后的段落标记从 Range 对象中排除,如在 InsertTextInRange 过程中 IsLastCharParagraph 函数的应用所示。
常见中英文对照
室/房 Room 村 Vallage 号 No.
号宿舍 Dormitory 楼/层 /F 住宅区/小区 Residential Quater
甲/乙/丙/丁 A/B/C/D 巷 / 弄 Lane 单元 Unit
号楼 / 栋 Building 公司 Com./Crop/LTD.CO
厂 Factory 酒楼/酒店 Hotel 路 Road
花园 Garden 街 Street 信箱 Mailbox
区 Districtq 县 County 镇 Town
市 City 省 Prov. 院 Yard
大学 College
**表示序数词,比如1st、2nd、3rd、4th……如果不会,就用No.***代替,或者直接填数字吧!
另外有一些***里之类难翻译的东西,就直接写拼音*** Li。而***东(南、西、北)路,直接用拼音也行,写*** East(South、West、North)Road也行。还有,如果地方不够可以将7栋3012室写成: 7-3012。
201室: Room 201
12号: No.12
2单元: Unit 2
3号楼: Building No.3
长安街: Chang An street
南京路: Nanjing road
长安公司: Chang An Company
宝山区: BaoShan District
赵家酒店: ZhaoJia hotel
钱家花园: Qianjia garden
孙家县: Sunjia county
李家镇: Lijia town
广州市: Guangzhou city
广东省: Guangdong province
中国: China
实例:
宝山区南京路12号3号楼201室
room 201,building No.3,No.12,nanjing road,BaoShan District
如果地方不够可以将3号楼201室写成:3-201
宝山区示范新村37号403室
Room 403,No.37,SiFan Residential Quarter,BaoShan District
中华人民共和国民政部政策研究中心北京河沿大街147号
No.147# HeiYian Street the policy center of civil administration department the People’Republic of China
虹口区西康南路125弄34号201室
Room 201,No.34,Lane 125,XiKang Road(South),HongKou District
北京市崇文区天坛南里西区20楼3单元101
Room 3-101 building No.20,TianTan-NanXiLi Residential ChongWen District BeiJing City
江苏省扬州市宝应县泰山东村102栋204室
Room 204 building No.102, East TaiShan Residential BaoYin County JiangSu Province
473004河南省南阳市中州路42号 刘刚
Liu Gang,Room 42,Zhongzhou Road,Nanyang City,Henan Prov.China 473004
中国四川省江油市川西北矿区采气一队
1 Team CaiQi ChuanXiBei Mining Area JiangYou City SiChuan Province China
中国河北省邢台市群众艺术馆
The Masses Art Centre XinTai City HeBei Prov.China
江苏省吴江市平望镇联北村七组
7 Group LiBei Village PingWang Town WeJiang City JiangSu Province
434000湖北省荆州市红苑大酒店 刘刚
Liu Gang,Hongyuan Hotel,Jingzhou city,Hubei Prov, China 434000
473000河南南阳市八一路272号特钢公司 刘刚
Liu Gang,Special Steel Corp,No.272,Bayi Road,Nanyang City,Henan Prov. China 473000
528400广东中山市东区亨达花园7栋702 刘刚
Liu Gang
Room 702,7th Building,Hengda Garden,East District,Zhongshan,China 528400
361012福建省厦门市莲花五村龙昌里34号601室 刘刚
Liu Gang,Room 601, No.34 Long Chang Li,Xiamen, Fujian, China 361012
361004厦门公交总公司承诺办 刘刚
Mr. Liu Gang,Cheng Nuo Ban,Gong Jiao Zong Gong Si,Xiamen Fujian, China 361004
| 问:尊敬的工程师你好, 我另有一台松下KX-F2781传真机 曾經有一客戶傳真過一張FAX之後,FAX機就一直接收相同的FAX內容,只要關機後再開機接收的也是同樣的內容,現在此傳真機只能發送fax,屏幕上有出現 MEMORY FULL.字樣 請問該如何解決? 謝謝!!! |
|
| 中传网在线解答员答:您可以这样操作试一下。依次按 功能(目录)键 # 9 0 0 0 * 5 5 0 开始键即可将程序进行全清了。 |
可是,在中国这个特殊的市场上,“红皮书”却远没有这么幸运——在大多数中国读者看来,Wrox的红皮书代表着内容鱼龙混杂(通常质量与封面上的人头数成反比)、翻译不堪入目(甚至还培养出了几位“明星译者”)。同样是IT圈子里的著名出版社,《人月神话》、《重构》、《设计模式》、“极限编程丛书”、“C++大系”……这些耳熟能详的标题让我们对Addison-Wesley肃然起敬;《人件》、《最后期限》、“温伯格经典译丛”让Dorset也成为了中国读者书架上的常客。而Wrox呢?面对新华书店4个货架上满满的红皮书,这里有哪怕一本能让读者慕名而来的吗?这里有哪怕一本能让读者满意而归的吗?在中国的市场上,在中国读者的心里,Wrox其实已经死了,而且死得很难看。
于是,作为红皮书的老读者,我想问:是谁谋杀了Wrox?是谁让这家优秀的出版社在中国读者这里如此难堪?很快,我找到了几位涉案者——在这场计划周密的谋杀案中,他们扮演着最为重要的角色,他们的合力将Wrox推上了不归之路。
涉案者1:康博工作室
早在两年前,清华大学出版社的一位编辑曾把一本《C#程序设计教程》(C# Programming)交给我,邀我为它作评——那时C#正是热门的新话题。但我终于没有写出那篇书评,那本书也没有再还给这位热心的编辑,因为我用红笔在它的最后20页里勾出了100多个在我看来是不可饶恕的错误,实在不忍心让我的这位朋友如此尴尬。那本书的内容早已被我清除出了“内存”,但它让我记住了一个名字:康博。
不明内情的读者会以为“康博”是一个人的笔名,错了,这是一个团结而高效的翻译团队。在《中华读书报》2001年一篇题为《工作室:在中国电脑图书市场渐入末途?》的文章中曾提到过康博工作室的负责人曹康先生,当时曹先生无奈地坦言:“目前很少有工作室能够大投入、纵向地做书,都在低档电脑图书市场恶性竞争,使得大量图书选题重复。”但他的康博工作室显然不甘于仅仅纠缠在低端市场,从2001年到2003年,他们至少翻译了29本Wrox的书(根据china-pub统计数据)——众所周知,Wrox作品是以面向专业读者而著称的。虽然没有足够专业的译者和编辑团队,康博工作室还是挑起了翻译29本.NET专业著作的重担,有效地谋杀了Wrox在.NET开发者心目中的形象,不惧艰险、锲而不舍的精神实在令人钦佩。
涉案者2:邱仲潘、魏海萍
积极参与谋杀Wrox的,不仅有康博工作室这样的英雄集体,还有众多的明星译者,邱先生和魏女士当属其中的佼佼者。之所以选择这两位作为代表,还因为他们翻译的都是Java领域的著作,而我恰好又是一个Java人,对他们的作品更为熟悉。
在中国的IT图书市场,邱仲潘先生绝对是一个值得关注的现象。仅仅在china-pub有案可查的,就有他多达68部著(译)作,内容覆盖面之广令人瞠目结舌:从图形图象到网络硬件,从C++到UML,从MCSE到J2EE,邱先生似乎是无所不知无所不能。联想到他作为厦门大学教授、九三学社成员的身份,不难猜出这些书都是由他挂名,让他手下的学生来翻译的——如果凭他一己之力完成这么多的译作,怕是真要呕心沥血了。早有无数读者指出,邱先生对于IT新技术新名词压根是一窍不通。一位早已功成名就的学界前辈仍然不断挑战自我探求新知,我等后学晚辈敢不汗颜!
与邱先生不同,魏女士该是一位专业对口的研究生——那位常与她一同挂名的毛选先生该是她的导师吧?如果说邱先生的翻译是能力问题,那么魏女士的作品则纯属态度问题。我曾有幸拜读魏女士的译作《Java SOAP编程指南》,文笔和技术都把握得中规中矩,还附上了一篇平淡无奇的译序,虽然不足以出彩,至少也算是合格的翻译了。但不知何故,到了《J2EE设计开发编程指南》这里,她却突然变成了一个外行人:技术词汇频频乱译,好几处关键把意思恰好译反,遣词造句更是能直接读出英文来,译序自然也是不见影踪了。同样是J2EE领域的作品,从能力上该不至于有如此天渊之别,莫非是学业紧张身心俱疲了?
公正地说,在这场谋杀案中,魏女士扮演的或许只是一个小角色。但从个人感情而言,我尤为反感有“态度问题”的人——能力问题或许还更可宽容一些。何况在她手下遇害的恰好是我最喜欢的Expert One-to-One J2EE Design and Development,于是,她便成了我心目中第一号的明星译者。
涉案者3:清华大学出版社文康公司、电子工业出版社美迪亚公司
纵使前面提到的几方杀手有天大本事,他们所能做到的不过是“点杀”而已。而这里的两家公司将Wrox的红皮书一网打尽,让这场案子升级成了一次不折不扣的大屠杀。在对Wrox的谋杀中,他们算得上是幕后的策划者和指挥者,居功至伟。
从名字不难看出,文康公司和康博工作室有着千丝万缕的联系。凭借“清华大学出版社第五事业部”的名头,文康公司包揽了Wrox在.NET方面的全部著作,才让康博工作室有挥洒才情的空间。美迪亚公司不仅垄断了Wrox在Java方面的作品,更是用人不疑,方成就了邱仲潘先生的丰功伟绩——邱先生赫然列在china-pub的68部作品中,只有7部来自机械工业出版社,其余61部全赖美迪亚公司玉成。按china-pub统计,Wrox图书共有157部,其中文康公司引进105部,美迪亚公司引进26部,仅有不足1/6的漏网之鱼。遇上如此系统全面的地毯式轰炸,Wrox想不死也难。
作为专业的图书出版公司,这两家似乎只有抢购版权的能力,根本还没想好囤积版权之后该怎么办。众所周知,Wrox的书从来都是良莠不齐鱼龙混杂,其中不乏Expert One-to-One J2EE Design and Development这样的旷世佳作,也充斥着Professional JSP这样索然无味的次品——从封面上堆积着的18个人头不难推知它的质量。这两家出版商好象从来就没有打算为读者先做一次遴选,只管一股脑地把所有书码上货架。在所有的媒体上,你看不到这两家出版商为Wrox的书做任何宣传——当然了,既然无法从上百部著作中挑出精品,宣传自然也就无从做起。翻译质量低劣的根源也在于此:出版商原本的计划就是广种薄收,还能期望他们去寻找多么出色的译者?即便有出色的译者,他们知道该把那几本书作为重点来翻译吗?
如果说“遴选精品”要求技术水平的话,这些Wrox图书拙劣的编辑、校对、制作则把两家出版商的业务水平展现无遗。在那本《C#程序设计教程》的最后一页,我用红笔重重地写上:“没娘养的孩子”,这个评语适用于新华书店里绝大多数的红皮书。编辑可以用“不懂技术”作为借口(多么低级的借口)来搪塞技术术语的错误,但对于频频出现的主谓倒装、省略主语、被动语态,难道他们读起来就不嫌别扭?这些可敬的编辑们真的曾经通读过书稿吗?这样的译稿竟然能通过三审三校的编辑流程,让我多少有些耻于承认自己曾经是他们的同行。
结案
Wrox已经死了。从琳琅满目的红皮书里,你再也无法找出任何一个尚有生气的活口。即使在习惯了没有Wrox以后,我又有了新的担忧:下一个受害者是谁?会是J2EE图书的新贵Manning吗?我们是不是还会再看到一场这样的大屠杀?出版商有没有想过刀下留情?读者和媒体该如何“拯救大兵瑞恩”?笔至此,我的心情太灰了,我没有答案。只有祈祷,祈祷Manning那充满异域风情的“In Actions”不要再遭受红皮书曾经遭受的惨剧。