3

一般问题:如何将由 Microsoft Office 中的“录制”创建的 VBA 宏中的功能“翻译”为可能位于 .vbs 文件中的 Windows 可执行 VBScript?

具体问题:如何批量创建Word文档的缩略图以便在Windows资源管理器中查看?

替代问题:我在哪里可以找到有关使用 VBS 操作 MS Word 文档的文档?


我的最终目标是批处理为 MS Word 文档创建缩略图的过程。

我的人工方法是:

  • 打开 Word 文档
  • 按“另存为”
  • 勾选“保存缩略图”
  • 保存和替换

从一个小网站上发现,VBS 以 .vbs 文件的形式可以操作 Word 文档。可以通过在 Windows 资源管理器中双击 .vbs 文件来执行的示例:

'in a file called "something.vbs"
Set objWord = CreateObject("Word.Application")

objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

objSelection.Font.Name = "Arial"
objSelection.Font.Size = "18"
objSelection.TypeText "Network Adapter Report"
objSelection.TypeParagraph()

objSelection.Font.Size = "14"
objSelection.TypeText "" & Date()
objSelection.TypeParagraph()

我还发现通过“录制宏”,我可以获得一些用缩略图保存文档的 VBA 代码。这是我录制的一个宏:

Sub save_with_thumbnail()
'
' save_with_thumbnail Macro
'
'
    ChangeFileOpenDirectory _
        "E:\"
    ActiveDocument.SaveAs2 FileName:="as90520.doc", FileFormat:= _
        wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=0
End Sub

这两种方法中的每一种都解决了我的部分问题,但我无法将它们两者结合起来。因此我问是否有人-

  • 可以通过将 VBA 宏所做的转换为 Windows 可执行脚本来帮助集成/组合/无论这两种方法,或者
  • 可以就如何在 Windows 资源管理器中为 MS Word 文档批量创建缩略图提供建议,或者
  • 知道某处存在一些参考文档,这些参考文档提供了更多关于这个CreateObject.("Word.Application").Documents.Add().Selection..SaveAs- 无论如何,各种各样的信息。

希望我对这个问题的措辞足够好。提前感谢您的帮助。

4

3 回答 3

6

最初的出发点不同。VBA 通常由另一个应用程序托管,该应用程序提供一组内置对象;例如,如果您的 VBA 托管在 Word 中,您将可以访问Application指向当前运行的 Word 应用程序的 Word。在 VBS 中,您必须创建一个新的 Application 对象并将其保存在变量中:

Dim wdApp
Set wdApp = CreateObject("Word.Application")

或获取对已经运行的 Word 应用程序的引用:

Set wdApp = GetObject(,"Word.Application")

完成此操作后,它们之间的代码实际上是可以互换的:

Dim wdDoc
Set wdDoc = wdApp.Open("path\to\document.docx")


请记住,在 VBA 中变量可以有一个类型。而不是之前的变量声明 ( Dim wdDoc),在 VBA 中您可以看到:

Dim wdDoc As Word.Document
'alternatively:
'Dim wdDoc As Document

此外,VBA 通常可以访问枚举常量,例如wdFormatDocument. 在 VBScript 中,您可以手动定义常量:

Const wdFormatDocument = 0

或者直接使用常量的值:

wdApp.ActiveDocument.SaveAs2 FileName:="as90520.doc", FileFormat:= 0


可以在此处找到 Word 对象模型的参考。
就您的具体问题而言,ActiveDocumentApplication对象的属性,(请参见此处)。所以在 VBS 中,对应的代码可能是这样的:

Dim wdApp
Set wdApp = CreateObject("Word.Application")

'When you open Word from the Start menu, it automatically adds a blank document for you
'When manipulating Word in a program, we need to do this by hand
'Generally we would store this in a variable, but we don't need to store it in order
'to use the ActiveDocument property; it just has to exist
wdApp.Documents.Add

'copied and pasted from before
wdApp.ActiveDocument.SaveAs2 FileName:="as90520.doc", FileFormat:= _
    wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
    True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
    False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
    SaveAsAOCELetter:=False, CompatibilityMode:=0
于 2012-11-19T00:12:06.053 回答
1

这个答案并不是一个完整的答案。

通过录制宏创建的 VBA 代码根本无法解决“部分问题”。它不能解决问题的任何部分。我进行了实验,发现无论是否选中“另存为”对话框中的“保存缩略图”复选框,宏都是相同的。

“使 VBA 代码适应 VBScript”的想法是行不通的,因为 VBA 本身甚至都行不通。甚至微软似乎都不关心缩略图: http: //msdn.microsoft.com/en-us/library/office/ff836084 (v=office.14).aspx 。

提问者的预期方法无法满足“特定问题”中的要求。

于 2012-12-03T08:59:11.903 回答
0

Registry

There is a registry setting to enable saving thhumbnails at "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Common" of type DWORD named SaveThumbnails (1 to save; 0 to NOT save).

于 2017-03-13T13:46:51.053 回答