3

一般的な質問: Microsoft Office で「記録」することによって作成された VBA マクロの機能を、.vbs ファイルにある Windows で実行可能な VBScript に「変換」するにはどうすればよいですか?

具体的な質問: Windows エクスプローラーで表示する Word 文書のサムネイルをバッチで作成する方法を教えてください。

別の質問: VBS を使用した MS Word ドキュメントの操作に関するドキュメントはどこにありますか?


私の最終的な目標は、MS Word ドキュメントのサムネイルを作成するプロセスをバッチ処理することです。

私の人間が行った方法は次のとおりです。

  • Word ドキュメントを開く
  • 「名前を付けて保存」を押します
  • 「サムネイルを保存」にチェックを入れる
  • 保存して置き換える

小さな Web サイトで、.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

2 つのアプローチのそれぞれが私の問題の一部を解決しますが、2 つを統合することはできませんでした。したがって、私は誰かを尋ねています -

  • VBAマクロが実行したことをWindows実行可能スクリプトに変換することにより、2つのアプローチを統合/結合/何でも支援できます。または
  • Windows Explorer で 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 オブジェクト モデルのリファレンスは、ここにあります。
あなたの特定の質問に関する限り、オブジェクトActiveDocumentのプロパティです(こちらを参照)。したがって、VBS では、対応するコードは次のようになります。Application

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 自体が機能しないからです。Microsoft でさえサムネイルを気にしていないようです: http://msdn.microsoft.com/en-us/library/office/ff836084(v=office.14).aspx .

「特定の質問」の要件は、質問者が意図したアプローチでは満たすことができませんでした。

于 2012-12-03T08:59:11.903 に答える