我有一些简单的.doc文件,这些文件是我在Word 2007中制作的,其中更改了文本颜色并使用突出显示来比较一些相似的文本。我想做的是将绿色文本或灰色突出显示的任何实例更改为各自的不同颜色。
我敢肯定有一种简单的方法可以用VBA做到这一点,但也欢迎其他任何答案。
编辑:虽然我很欣赏答案,但允许我将.doc文件保留为.docs的方法是首选。
例如,我希望只要更改文档属性面板中的"标题"字段,就会自动更新正文中的"标题"字段和文档的页眉.我知道如何更新字段,但我想知道事件的名称,它会在文档属性发生变化时告诉我.
我们将不胜感激.谢谢.
我也在MSDN论坛上问过它.
我有一个宏,它基于存储在网络共享上的模板创建一个新文档.此宏作为文件"macros.dotm"存储在每个用户的Word\STARTUP文件夹中,并由添加到工具栏的按钮执行.
一旦执行宏代码,模板文件就会被锁定,只要衍生文档仍由其他用户打开,模板文件就会保持锁定状态.
它对基于宏打开新文档的能力没有影响,但如果我想编辑模板,我必须要求他们关闭Word(希望没有其他人进入它).
宏代码:
Documents.Add Template:="F:\templates\letterhead.dotm", NewTemplate:=False, DocumentType:=0`
Run Code Online (Sandbox Code Playgroud) 我可以将外部代码链接到Word文档吗?我有很多带有宏的文字文件(VBA代码).全部使用相同的代码.我希望代码可以从外部源代码而不是从所有这些文档中运行.这样,如果我必须更新代码,我只有一个地方我必须进行更新.
我想将整个word文档文本转换为变量,并希望将字符串拆分为带有换行符作为分隔符的数组.我怎样才能做到这一点?
Dim str
str = ActiveDocument.?
Run Code Online (Sandbox Code Playgroud) 我希望我的Word应用程序在自动化完成后进入前台.
Excel中的等效项是直接的 - Excel Application对象具有.Hwnd属性,您可以将其与Windows API结合使用:
SetForegroundWindow((IntPtr)excelApp.Hwnd);
Run Code Online (Sandbox Code Playgroud)
但是,Word应用程序没有.Hwnd属性.
我尝试在这个序列中使用Activate():
wordDoc.Activate();
wordApp.Activate();
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我已经看过使用应用程序名称查找进程,但可能有多个Word运行副本.
谢谢
乔
我的代码需要在MS Word 2010中启用拼写检查,以便用户可以在拼写错误下看到红色下划线.
在当前版本中,我尝试执行此操作以启用拼写检查:
wordApplication.Options.CheckSpellingAsYouType = true;
wordApplication.Options.SuggestSpellingCorrections = true;
wordApplication.ActiveDocument.ShowSpellingErrors = true;
wordApplication.ActiveDocument.CheckSpelling();
Run Code Online (Sandbox Code Playgroud)
我打开Word并输入"Test texxt string".在此之后我运行我的代码但没有任何反应:

我没有在"texxt"下看到任何下划线.如果我转到选项,我会看到"键入时检查拼写"选项已启用:

现在,如果我检查这个属性:
wordApplication.ActiveDocument.SpellingErrors[0].Text
Run Code Online (Sandbox Code Playgroud)
它将包含"texxt",这意味着实际上已经检查了拼写.
此外,如果我只是重新启动MS Word并输入相同的文本 - 红色下划线变为可见:

我还尝试调用Application.ScreenRefresh并设置ScreenUpdating属性,但这没有任何效果.
注意:当文档中没有文本时,我在开头运行此代码/宏.如果有一些文字 - 它有效.
注2:重现的确切步骤:
启动MS Word.转到选项并禁用"在键入时检查拼写".重启Word.
启动Word并运行以下宏:
Options.CheckSpellingAsYouType = true
Options.SuggestSpellingCorrections = true
ActiveDocument.ShowSpellingErrors = true
Run Code Online (Sandbox Code Playgroud)键入以下文本:"测试texxt字符串.".按Enter键.
运行以下宏
MsgBox ActiveDocument.SpellingErrors(1).Text
您将在MessageBox中看到"texxt"但不是红色下划线
有没有办法让Word 2013宏的VBA代码作为块执行,所以如果我撤消它,它不会通过它执行的各个步骤撤消宏?我希望宏更像内置函数.
我有宏将光标移动到单词的末尾然后删除前三个字母.如果我撤消它,我会看到这三个字母中的每一个都会逐一重新出现.
我可能没有措辞这个权利.我想知道是否有代码来包装一个宏来让Word处理宏像一个内置的工作命令执行所有一次而不是执行一系列记录的步骤.然后,如果我运行一个宏并决定我不喜欢结果,我可以点击撤销,整个宏倒带和撤消.
编辑:如果你有一个VBA的例子,我会接受它.我只是想了解如何将Range对象与Tables集合一起使用来复制和粘贴多个表而不进行循环.换句话说,如何使用Tables集合指定1..lastTable的范围?如果我能看到一个有效的VBA示例,我将处理VBA - > Perl转换.
我正在尝试使用Perl的Win32 :: OLE模块(通过Dave Roth的优秀书籍)来自动完成我需要在某些Word文档上重复执行的几项任务.但是,本书(以及大多数Web示例)倾向于使用Excel作为示例,因此我不确定如何使用Tables集合对象有效地复制和粘贴.
这是我的代码片段:
my $originalDoc = $MSWord->Documents->Open('C:\Perl\testDocument.doc');
my $newDoc = $MSWord->Documents->Add;
my $selection = $MSWord->Selection(); # this may be spurious
my $Count = int( $originalDoc->Tables()->{Count} );
my $range = $originalDoc->Tables()->Range( { Start => $originalDoc->Tables(1)->{Range}->{Start},
End => $originalDoc->Tables($Count)->{Range}->{End}
} );
$range->Copy();
$newDoc->Range()->Paste();
Run Code Online (Sandbox Code Playgroud)
原始代码使用段落,而不是表,所以我假设一些错误是来自该代码的工件(或者更可能是我对该代码的不理解).
我大约有100个Word文档,其中包括外国名字的音译。这些文档的作者使用了一种称为e2的特殊字体,该字体具有大约十二个特殊音译字符(所有这些字符均以Microsoft Sans Serif字体提供)。
我想遍历文档的每个字母,每当.Font = "e2"我想遍历十二个字母(很容易猜出它们是什么)并将其替换为Microsoft Sans Serif等效语言时。但是我不知道如何通过字母循环。像在Excel电子表格中的单元格中循环一样吗?
word-vba ×10
ms-word ×7
vba ×5
c# ×2
automation ×1
copy-paste ×1
highlighting ×1
perl ×1
range ×1
win32ole ×1
word-2007 ×1