dポイントプレゼントキャンペーン実施中!

大量のワードのファイルをテキスト保存する仕事が入り、フォルダ内にあるワードファイルをテキスト保存し、テキストボックスやオートシェープの中のテキストも抜き出すプログラムを「VBScript」で作りました。

テキスト保存する際、Unicode形式で保存しなければならず、調べると、「SaveAs …, 7」がUnicodeによるテキスト保存だと分かったのですが、実際にやってみると、拡張子が「.rtf」ファイルだけが、Unicodeによるテキスト保存され、「.doc」や「.docx」は、「シフトJIS」保存されてしまいました。

私、何か間違っているのでしょうか?

以下、一応、プログラムをコピーしておきます。

問題の部分は「行13」です。

なお、ワードは「Word2010」です。

01 Option Explicit
02 Public a, b, c, d, e, f, g, h, t, u, v, w, x, y, z
03 Set w = CreateObject("Word.Application")
04 w.Application.DisplayAlerts = False
05 w.Visible = False
06 Set x = CreateObject("Scripting.FileSystemObject")
07 Set y = x.GetFolder(".")
08 For Each a In y.Files
09 b = LCase(x.GetExtensionName(a.Name))
10 If b = "doc" or b = "docx" or b = "rtf" Then
11 h = x.GetBaseName(a.Name)
12 Set z = w.Documents.Open(y & "\" & a.Name)
13 z.SaveAs y & "\" & h & ".txt", 7
14 z.Close
15 Set z = Nothing
16 End If
17 If b = "docx" Then
18 Set z = w.Documents.Open(y & "\" & a.Name)
19 z.SaveAs y & "\qkza934irs2801wuptc56ynv7bm.doc", 0
20 z.Close
21 Set z = Nothing
22 Set z = w.Documents.Open(y & "\qkza934irs2801wuptc56ynv7bm.doc")
23 Call o
24 z.Close
25 Set z = Nothing
26 x.DeleteFile(y & "\qkza934irs2801wuptc56ynv7bm.doc")
27 ElseIf b = "doc" or b = "rtf" Then
28 Set z = w.Documents.Open(y & "\" & a.Name)
29 Call o
30 z.Close
31 Set z = Nothing
32 End If
33 If f > "" Then
34 Set t = x.CreateTextFile(y & "\TB_" & h & ".txt", True, True)
35 t.Write f
36 t.Close
37 End If
38 Next
39 w.Quit
40 Set z = Nothing
41 Set y = Nothing
42 Set x = Nothing
43 Set w = Nothing
44 MsgBox("Finished!")
45 Sub o
46 f = ""
47 For Each c In w.ActiveDocument.Shapes
48 If c.Type = 1 or c.Type = 17 then
49 Set v = c.TextFrame
50 e = v.TextRange
51 f = f & e
52 Set d = Nothing
53 ElseIf c.Type = 6 Then
54 For Each g In c.GroupItems
55 Set u = g.TextFrame
56 e = u.TextRange
57 f = f & e
58 Set u = Nothing
59 Next
60 End if
61 Next
62 End Sub

よろしく、お願いします。

A 回答 (1件)

VBScriptについては門外漢なので、どこが問題なのか知りませんが。



WordのVB関連についての参考サイトだけ紹介しますね。

Document.SaveAs メソッド
http://msdn.microsoft.com/ja-jp/library/microsof …
MsoEncoding Enumeration
http://msdn.microsoft.com/ja-jp/library/microsof …
Document.SaveAs2 メソッド
http://msdn.microsoft.com/ja-jp/library/ff836084 …

Word VBA ファイル操作 
テキスト・ファイルの文字コード変換
http://makoto-watanabe.main.jp/WordVba_file.html …

msoEncodingUTF7で指定できませんか?

この回答への補足

ありがとうございます!

教えて頂いたサイトを、今一度じっくり見ていると、そこから、「SaveAs」のパラメータの一覧があり、「Encode」のところで「1200」を指定すると、思っていた「UTF-16LE(BOM付き)」に書き出せました。

具体的には、「行13」を

「z.SaveAs y & "\" & h & ".txt", 7,,,,,,,,,,1200」

とすれば良かったのです。

しかし、マイクロソフトの説明などでは、「SaveAs FileName, 7」でUnicodeによるテキスト保存になっているのに…、分かりにくい!

なお、ついでに、「65001」がよく使う「UTF-8」だそうです。

すなわち、「1200」のところを「65001」にすると、「UTF-8」でテキスト保存されます。

ありがとうございました。

問題は解決しました。

補足日時:2014/03/19 21:06
    • good
    • 0
この回答へのお礼

ありがとうございます。

教えて頂いたサイトのいくつかは私も調べていく中で、発見していて、その中から、「7」という数字を見つけました。

そして、上記のとおり、「rtf」ファイルでは、実際に「7」だと、「Unicode」のテキストファイルになっているのです。

いろいろ調べて頂き、ありがとうございました。

お礼日時:2014/03/19 17:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!