Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
730 views
in Technique[技术] by (71.8m points)

vbscript - handling MS Word with VBS on Windows

General question: how can functionality in VBA macros created by 'recording' in Microsoft Office be 'translated' into Windows-executable VBScripts that could be in .vbs files?

Specific question: how to batch create thumbnails of Word documents for viewing in Windows Explorer?

Alternative question: where can i find documentation on manipulating MS Word documents with VBS?


my final goal is to batch the process of creating thumbnails for MS Word docs.

my humanly-done method is:

  • open a Word doc
  • press 'save as'
  • tick 'save thumbnail'
  • save and replace

i found out from a small website that VBS, in the form of .vbs files, can manipulate Word documents. example that can be executed by double clicking the .vbs file in Windows Explorer:

'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()

i also found out that by 'recording macros', i can get some VBA code that saves a document with a thumbnail. here is a macro that i recorded:

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

each of the two approaches solve part of my problems, but i couldn't integrate them two. therefore i'm asking if anyone -

  • can help integrate/combine/whatever the two approaches by converting what the VBA macro did into a windows-executable script, or
  • can give a suggestion on how to batch create thumbnail for MS Word docs in Windows Explorer, or
  • know of the existence of some reference documentation somewhere that provides more information about this CreateObject.("Word.Application") and .Documents.Add() and .Selection and ..SaveAs - whatever, all sorts.

hope i have worded the question well enough. thanks in advance for any help.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The initial starting point is different. VBA is usually hosted by another application, which provides a set of built-in objects; for example, if your VBA is hosted in Word, you'll have access to the Word Application which refers to the currently running Word application. In VBS, you have to either create a new Application object and save it in a variable:

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

or get a reference to an already running Word Application:

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

Once you've done that, the code between them is virtually interchangeable:

Dim wdDoc
Set wdDoc = wdApp.Open("pathodocument.docx")


Bear in mind that in VBA variables can have a type. Instead of the previous variable declaration (Dim wdDoc), in VBA you can see this:
Dim wdDoc As Word.Document
'alternatively:
'Dim wdDoc As Document

Also, VBA generally has access to enum constants, such as wdFormatDocument. In VBScript, you can either define the constants manually:

Const wdFormatDocument = 0

Or use the value of the constants directly:

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


Reference for the Word object model can be found here.
As far as your specific question goes, ActiveDocument is a property of an Application object, (see here). So in VBS, the corresponding code might look something like this:
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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...