Word VBA ファイル操作
目次
テキスト・ファイルの文字コード変換
ロシア語のファイル(GUI ライブラリ Window9)の日本語化を行うにあたり、文字コードを「キリル文字」から「ShiftJIS」に変換する必要がありました。
ファイル数が、650もあったので、この文字コード変換マクロを作りました。
このマクロは、Word 2007〜で動作します。
注:拡張子 .htm のファイルを、Word に読み込むと、「Web レイアウト表示」になってしまいます。このため、下のマクロで読み込ます前に、拡張子を .txt に置換して、ソース・コードとして読み込んでいます。
解説:
Documents オブジェクトの Open メソッド は、指定された文書を開き、その文書を Documents コレクションに追加します。
Document オブジェクトを返します。
セキュリティ:
アプリケーション内にパスワードをハードコードしないでください。パスワードが手順で必要な場合は、パスワードをユーザーに要求し、それを変数に格納します。その後、アプリケーションのコード内でその変数を使用します。そのための最もお勧めの方法については、「Microsoft Office ソリューション開発者向けのセキュリティ情報」を参照してください。
expression.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible, OpenConflictDocument, OpenAndRepair? , DocumentDirection, NoEncodingDialog)
expression 必ず指定します。
Documents オブジェクトを表すオブジェクト式を指定します。
FileName 必ず指定します。バリアント型 (
Variant) の値を指定します。文書の名前を指定します。パスを指定することもできます。
ConfirmConversions 省略可能です。バリアント型 (
Variant) の値を指定します。
True を設定すると、ファイルが Microsoft Word 形式でない場合に [ファイルの変換] ダイアログ ボックスが表示されます。
ReadOnly 省略可能です。バリアント型 (
Variant) の値を指定します。
True を設定すると、文書が読み取り専用で開かれます。
メモこの引数によって、保存されている文書の読み取り専用の設定が変更されることはありません。たとえば、読み取り専用の設定をオンにして文書が保存されている場合に、引数
ReadOnly を
False に設定しても、そのファイルが読み込み/書き込みとして開かれることはありません。
AddToRecentFiles 省略可能です。バリアント型 (
Variant) の値を指定します。
True を設定すると、[ファイル] メニューの下に表示される最近使ったファイルの一覧にファイル名が追加されます。
PasswordDocument 省略可能です。バリアント型 (
Variant) の値を指定します。文書を開くためのパスワードを指定します。
PasswordTemplate 省略可能です。バリアント型 (
Variant) の値を指定します。テンプレートを開くためのパスワードを指定します。
Revert 省略可能です。バリアント型 (
Variant) の値を指定します。開いている文書のファイル名を引数
FileName に指定した場合の処理を指定します。
True を設定すると、開いているファイルに対する変更で保存されていないものは廃棄されて、ファイルが再び開かれます。
False を設定すると、開いている文書がアクティブになります。
WritePasswordDocument 省略可能です。バリアント型 (
Variant) の値を指定します。文書への変更を保存するためのパスワードを指定します。
WritePasswordTemplate 省略可能です。バリアント型 (
Variant) の値を指定します。テンプレートへの変更を保存するためのパスワードを指定します。
Format 省略可能です。バリアント型 (
Variant) の値を指定します。文書を開くために使用するファイル コンバータを指定します。
使用できる定数は、次に示す WdOpenFormat クラスの定数のいずれかです。
| wdOpenFormatAllWord |
| wdOpenFormatAuto (既定値) |
| wdOpenFormatDocument |
| wdOpenFormatEncodedText |
| wdOpenFormatRTF |
| wdOpenFormatTemplate |
| wdOpenFormatText |
| wdOpenFormatUnicodeText |
| wdOpenFormatWebPages |
外部のファイル形式を指定するには、
FileConverter オブジェクトに
OpenFormat プロパティを適用して、この引数で使用する値を決定します。
Encoding 省略可能です。バリアント型 (
Variant) の値を指定します。保存された文書を表示するときに Microsoft Word で使用する、文書のエンコード (コード ページまたは文字セット) を指定します。使用できる定数は、有効な
MsoEncoding クラスの定数です。有効な
MsoEncoding クラスの定数の一覧については、Visual Basic Editor のオブジェクト ブラウザを参照してください。既定値はシステム コード ページです。
Visible 省略可能です。バリアント型 (
Variant) の値を指定します。現在表示されているウィンドウに文書が開かれている場合は、
True を設定します。既定値は
True です。
OpenConflictDocument 省略可能です。バリアント型 (
Variant) の値を指定します。オフラインで競合している文書の競合ファイルを開くかどうかを指定します。
OpenAndRepair 省略可能です。バリアント型 (
Variant) の値を指定します。
True を設定すると、文書の破損を防止するために文書が修復されます。
DocumentDirection 省略可能です。文書内での文字列の水平方向の向きを指定します。
使用できる定数は、次に示す WdDocumentDirection クラスの定数のいずれかです。
| wdLeftToRight (既定値) |
| wdRightToLeft |
NoEncodingDialog 省略可能です。バリアント型 (
Variant) の値を指定します。
True を設定すると、エンコード方法が認識されない場合には、エンコード方法を指定するダイアログ ボックスが表示されません。既定値は
False です。
次の使用例は、MyDoc.doc を読み取り専用で開きます。
次の使用例は、WordPerfect 6.x ファイル コンバータを使って Test.wp を開きます。
Encoding プロパティ は、保存された文書を表示するときに Web ブラウザで使用される文書のエンコード (コード ページまたは文字セット) を設定します。値の取得および設定が可能です。
使用できる定数は、次に示す MsoEncoding クラスの定数のいずれかです。AutoDetect というサフィックスを持つ定数は使用できません。これらの定数は、ReloadAs メソッドで使用されます。
| msoEncodingOEMMultilingualLatinI |
| msoEncodingOEMNordic |
| msoEncodingOEMTurkish |
| msoEncodingSimplifiedChineseAutoDetect |
| msoEncodingT61 |
| msoEncodingTaiwanEten |
| msoEncodingTaiwanTCA |
| msoEncodingTaiwanWang |
| msoEncodingTraditionalChineseAutoDetect |
| msoEncodingTurkish |
| msoEncodingUnicodeLittleEndian |
| msoEncodingUTF7 |
| msoEncodingVietnamese |
| msoEncodingEBCDICJapaneseKatakanaExtended |
| msoEncodingEBCDICJapaneseLatinExtendedAndJapanese |
| msoEncodingEBCDICKoreanExtendedAndKorean |
| msoEncodingEBCDICMultilingualROECELatin2 |
| msoEncodingEBCDICSerbianBulgarian |
| msoEncodingEBCDICThai |
| msoEncodingEBCDICTurkishLatin5 |
| msoEncodingEBCDICUSCanada |
| msoEncodingEBCDICUSCanadaAndTraditionalChinese |
| msoEncodingOEMModernGreek |
| msoEncodingOEMMultilingualLatinII |
| msoEncodingOEMPortuguese |
| msoEncodingOEMUnitedStates |
| msoEncodingSimplifiedChineseGBK |
| msoEncodingTaiwanCNS |
| msoEncodingTaiwanIBM5550 |
| msoEncodingTaiwanTeleText |
| msoEncodingThai |
| msoEncodingTraditionalChineseBig5 |
| msoEncodingUnicodeBigEndian |
| msoEncodingUSASCII |
| msoEncodingUTF8 |
| msoEncodingWestern |
| msoEncodingArabic |
| msoEncodingArabicASMO |
| msoEncodingArabicAutoDetect |
| msoEncodingArabicTransparentASMO |
| msoEncodingAutoDetect |
| msoEncodingBaltic |
| msoEncodingCentralEuropean |
| msoEncodingCyrillic |
| msoEncodingCyrillicAutoDetect |
| msoEncodingEBCDICArabic |
| msoEncodingEBCDICDenmarkNorway |
| msoEncodingEBCDICFinlandSweden |
| msoEncodingEBCDICFrance |
| msoEncodingEBCDICGermany |
| msoEncodingEBCDICGreek |
| msoEncodingEBCDICGreekModern |
| msoEncodingEBCDICHebrew |
| msoEncodingEBCDICIcelandic |
| msoEncodingEBCDICInternational |
| msoEncodingEBCDICItaly |
| msoEncodingEBCDICJapaneseKatakanaExtendedAndJapanese |
| msoEncodingEBCDICKoreanExtended |
| msoEncodingEBCDICLatinAmericaSpain |
| msoEncodingEBCDICRussian |
| msoEncodingEBCDICSimplifiedChineseExtendedAndSimplifiedChinese |
| msoEncodingEBCDICTurkish |
| msoEncodingEBCDICUnitedKingdom |
| msoEncodingEBCDICUSCanadaAndJapanese |
| msoEncodingEUCChineseSimplifiedChinese |
| msoEncodingEUCJapanese |
| msoEncodingEUCKorean |
| msoEncodingEUCTaiwaneseTraditionalChinese |
| msoEncodingEuropa3 |
| msoEncodingExtAlphaLowercase |
| msoEncodingGreek |
| msoEncodingGreekAutoDetect |
| msoEncodingHebrew |
| msoEncodingHZGBSimplifiedChinese |
| msoEncodingIA5German |
| msoEncodingIA5IRV |
| msoEncodingIA5Norwegian |
| msoEncodingIA5Swedish |
| msoEncodingISO2022CNSimplifiedChinese |
| msoEncodingISO2022CNTraditionalChinese |
| msoEncodingISO2022JPJISX02011989 |
| msoEncodingISO2022JPJISX02021984 |
| msoEncodingISO2022JPNoHalfwidthKatakana |
| msoEncodingISO2022KR |
| msoEncodingISO6937NonSpacingAccent |
| msoEncodingISO885915Latin9 |
| msoEncodingISO88591Latin1 |
| msoEncodingISO88592CentralEurope |
| msoEncodingISO88593Latin3 |
| msoEncodingISO88594Baltic |
| msoEncodingISO88595Cyrillic |
| msoEncodingISO88596Arabic |
| msoEncodingISO88597Greek |
| msoEncodingISO88598Hebrew |
| msoEncodingISO88599Turkish |
| msoEncodingJapaneseAutoDetect |
| msoEncodingJapaneseShiftJIS |
| msoEncodingKOI8R |
| msoEncodingKOI8U |
| msoEncodingKorean |
| msoEncodingKoreanAutoDetect |
| msoEncodingKoreanJohab |
| msoEncodingMacArabic |
| msoEncodingMacCroatia |
| msoEncodingMacCyrillic |
| msoEncodingMacGreek1 |
| msoEncodingMacHebrew |
| msoEncodingMacIcelandic |
| msoEncodingMacJapanese |
| msoEncodingMacKorean |
| msoEncodingMacLatin2 |
| msoEncodingMacRoman |
| msoEncodingMacRomania |
| msoEncodingMacSimplifiedChineseGB2312 |
| msoEncodingMacTraditionalChineseBig5 |
| msoEncodingMacTurkish |
| msoEncodingMacUkraine |
| msoEncodingOEMArabic |
| msoEncodingOEMBaltic |
| msoEncodingOEMCanadianFrench |
| msoEncodingOEMCyrillic |
| msoEncodingOEMCyrillicII |
| msoEncodingOEMGreek437G |
| msoEncodingOEMHebrew |
| msoEncodingOEMIcelandic |
expression.Encoding
expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。
次の使用例は、文書の既定のエンコードが欧文 (Windows) であるかどうかを調べ、それに応じて変数 strDocEncoding を設定します。
Document.SaveAs メソッド は、指定された文書を、新しい名前または形式で保存します。
このメソッドの引数は [名前を付けて保存] ダイアログ ボックス ([ファイル] メニュー) のオプションに対応します。
構文
式.SaveAs(FileName, FileFormat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter, Encoding, InsertLineBreaks, AllowSubstitutions, LineEnding, AddBiDiMarks)
式 必ず指定します。Document オブジェクトを表す変数を指定します。
パラメータ(全てオプションです)
| 名前 | データ型 | 説明 |
| FileName | バリアント型 (Variant) | 文書の名前を指定します。
既定値は、現在のフォルダおよびファイル名です。
文書がまだ 1 回も保存されていない場合、既定の名前 (たとえば、Doc1.doc) が使用されます。
指定したファイル名が既に存在する場合、文書が上書きされますが、上書きするかどうかを確認するメッセージは表示されません。 |
| FileFormat | バリアント型 (Variant) | 文書の保存形式を指定します。
使用できる定数は、次に示す WdSaveFormat クラスの定数のいずれかです。
別の形式で文書を保存するには、FileConverter オブジェクトの SaveFormat プロパティに適切な値を指定します。 |
| LockComments | バリアント型 (Variant) | True を設定すると、コメントを除く文書は読み取り専用になります。
既定値は False です。 |
| Password | バリアント型 (Variant) | 文書を開くためのパスワードを文字列で指定します (後の「備考」を参照)。 |
| AddToRecentFiles | バリアント型 (Variant) | True を設定すると、文書は [ファイル] メニューに表示される、最近使ったファイルの一覧に追加されます。
既定値は True です。 |
| WritePassword | バリアント型 (Variant) | 文書に変更を保存するためのパスワードを文字列で指定します (後の「備考」を参照)。 |
ReadOnly Recommended | バリアント型 (Variant) | True を設定すると、文書を開くときは常に読み取り専用になります。
既定値は False です。 |
| EmbedTrueTypeFonts | バリアント型 (Variant) | True を設定すると、文書と共に TrueType フォントが保存されます。
この引数を省略した場合、引数 EmbedTrueTypeFonts には EmbedTrueTypeFonts プロパティの値が指定されます。 |
SaveNative PictureFormat | バリアント型 (Variant) | True を設定すると、別のプラットフォーム (たとえば、Macintosh) から画像をインポートした場合、インポートした画像の Windows バージョンだけが保存されます。 |
| SaveFormsData | バリアント型 (Variant) | True を設定すると、ユーザーがフォームに入力したデータはデータ レコードの形式で保存されます。 |
| SaveAsAOCELetter | バリアント型 (Variant) | True を設定すると、文書にヘッダー情報が添付されている場合、文書は AOCE letter として保存され、ヘッダー情報が保存されます。 |
| Encoding | MsoEncoding | エンコードされたテキスト ファイルとして保存する文書に使用するコード ページまたは文字セットを指定します。
既定値はシステム コード ページです。このパラメータにすべての MsoEncoding クラスの定数を指定することはできません。 |
| InsertLineBreaks | バリアント型 (Variant) | True を設定すると、文書をテキスト ファイルとして保存する場合に、文字列の各行の末尾に改行が挿入されます。 |
| AllowSubstitutions | バリアント型 (Variant) | True を設定すると、文書をテキスト ファイルとして保存する場合に、一部の記号を同様な文字列で置き換えることができます。
たとえば、著作権記号は (c) として表示されます。既定値は False です。 |
| LineEnding | バリアント型 (Variant) | テキスト ファイルとして保存する文書内で改行および段落区切りを示す方法を指定します。
使用できる定数は、WdLineEndingType クラスの wdCRLF (既定値) または wdCROnly です。 |
| AddBiDiMarks | バリアント型 (Variant) | True を設定すると、制御文字が出力ファイルに追加されて、元の文書で文字列の双方向レイアウトが維持されます。 |
備考
2007 Microsoft Office system アプリケーションからファイルを PDF 形式または XPS 形式で保存するには、アドインをインストールする必要があります。
詳細については、Office Online で「PDF や XPS など、その他のファイル形式のサポートを有効にする」を検索してください。
セキュリティ
アプリケーション内にパスワードをハードコードしないでください。
パスワードが手順で必要な場合は、パスワードをユーザーに要求し、それを変数に格納します。その後、アプリケーションのコード内でその変数を使用します。
そのための最もお勧めの方法については、「Microsoft Office ソリューション開発者向けのセキュリティ情報」を参照してください。
次の使用例は、作業中の文書に Test.rtf という名前を付け、リッチ テキスト形式 (RTF) で保存します。
次の使用例は、現在の文書に拡張子 ".txt" を付けてテキスト形式で保存します。
次の使用例は、インストールされているすべてのコンバータに対してループ処理を行います。この処理により、WordPerfect 6.0 コンバータが見つかった場合は、このコンバータを使用して現在の文書を保存します。
次の使用例は、文書にパスワードを設定して保存しています。
FileDialog プロパティ は、ファイル ダイアログ ボックスの 1 つのインスタンスを表す FileDialog オブジェクトを取得します。
Dialogs プロパティを使う方法との違いを確認して、使い分けて下さい。
・Word の組み込みのダイアログ ボックスを表示する
expression.FileDialog(FileDialogType)
expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。
FileDialogType 必ず指定します。ダイアログの種類を指定します。
使用できる定数は、次に示す MsoFileDialogType クラスの定数のいずれかです。
| msoFileDialogFilePicker |
| msoFileDialogFolderPicker |
| msoFileDialogOpen |
| msoFileDialogSaveAs |
次の使用例は、[名前を付けて保存] ダイアログ ボックスを表示します。
次の使用例は、[ファイルを開く] ダイアログ ボックスを表示し、ユーザーが複数のファイルを選択して開けるように設定します。
Filters プロパティ は、FileDialogFilters コレクションを取得します。
expression.Filters
expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。
次の使用例は、FileDialog オブジェクトを使用して [参照] ダイアログ ボックスを表示し、選択された各ファイルをメッセージ ボックスに表示します。
また、"イメージ" と名付けられた新しいファイル フィルタを追加します。
FileDialog オブジェクトの Show メソッド は、ファイルのダイアログ ボックスを表示し、アクション ボタン (-1) とキャンセル ボタン (0) のどちらがクリックされたかを示す長整数型 (Long) の値を返します。
Show メソッドを呼び出すと、ファイルのダイアログ ボックスが閉じられるまで、コードの実行は中断されます。
[ファイルを開く] および [名前を付けて保存] ダイアログ ボックスでは、Show メソッドの直後に Execute メソッドを使用して、ユーザーのアクションを実行します。
expression.Show
expression 必ず指定します。FileDialog
オブジェクトを表すオブジェクト式を指定します。
次の使用例は、FileDialog オブジェクトを使用して [参照] ダイアログ ボックスを表示し、選択された各ファイルをメッセージ ボックスに表示します。
InitialFileName プロパティ は、ファイルのダイアログ ボックスに初期表示されるパスやファイル名を設定します。文字列型 (String) の値を使用します。値の取得および設定が可能です。
expression.InitialFileName
expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。
'*' や '?' のワイルドカード文字は、ファイル名の指定には使用できますがパスには使用できません。
'*' は連続する複数の文字を表し、'?' は 1 つの文字を表します。
たとえば、.InitialFileName = "c:\c*s.txt" を指定すると、"charts.txt" と "checkregister.txt" の両方を取得します。
ファイル名のないパスのみを指定した場合、ファイル フィルタによって設定されたすべてのファイルがダイアログ ボックスに表示されます。
初期フォルダに存在するファイルを指定した場合、そのファイルのみがダイアログ ボックスに表示されます。
初期フォルダに存在しないファイル名を指定した場合、ダイアログ ボックスにファイルは表示されません。
InitialFileName プロパティにファイルの種類を指定すると、ファイル フィルタの設定を InitialFileName プロパティの設定に置き換えます。
無効なパスを指定した場合、最後に使用したパスが使用されます。無効なパスを使用すると、警告のメッセージが表示されます。
このプロパティに 256 文字より長い文字列を指定すると、実行時エラーになります。
次の使用例は、FileDialog オブジェクトを使用して [参照] ダイアログ ボックスを表示し、選択された各ファイルをメッセージ ボックスに表示します。