Word VBA ファイル操作

ホームページのトップに戻る目次

Word VBA 目次

スタイル一覧を出力
 ・Selection オブジェクトを使用する
 ・Range オブジェクトを使用する
ワード文書の書式設定
 ・VBA の起動ボタンを設置する方法
 ・Selection、Range で選択する方法
 ・表を使用する
ワード文書の語群をExcelの辞書を使って置換
 ・参照設定
 ・文字列の検索、置換、および書式設定
 ・Word の組み込みのダイアログ ボックスを表示する
 ・コレクションからオブジェクトを取得する
テキスト・ファイルの文字コード変換

索引
 

テキスト・ファイルの文字コード変換


ロシア語のファイル(GUI ライブラリ Window9)の日本語化を行うにあたり、文字コードを「キリル文字」から「ShiftJIS」に変換する必要がありました。
ファイル数が、650もあったので、この文字コード変換マクロを作りました。
このマクロは、Word 2007〜で動作します。

注:拡張子 .htm のファイルを、Word に読み込むと、「Web レイアウト表示」になってしまいます。このため、下のマクロで読み込ます前に、拡張子を .txt に置換して、ソース・コードとして読み込んでいます。


下のマクロをダウンロードできます。→CyrillicLetterToShiftJISvba03.doc

Option Explicit

   Type 属性 'ユーザ定義型(構造体)を宣言
      フルパス As String
      ファイル名 As String
      フォルダパス As String
      上位フォルダパス As String
      拡張子 As String
      拡張子無しファイル名 As String
   End Type
   
   Dim ファイルシステムオブジェクト As Object          ' FileSystemObject
   
   Dim 開始日時 As Variant
   Dim 終了日時 As Variant


Sub キリル文字をShiftJISに変換()
   Dim 対象ファイルサンプル As 属性
   Dim 変換ファイル As 属性
   Dim フォルダ As Object
   Dim ファイル As Object

   
   '文字コード変換するファイルを指定
   MsgBox "文字コード変換は、指定フォルダの指定拡張子の全てのファイルを対象にします。" _
   & vbNewLine & "文字コード変換する対象ファイルのどれか一つを指定して下さい。"
   
   対象ファイルサンプル = ファイル属性("テキストファイル", "*.txt;*.csv")

   Debug.Print 対象ファイルサンプル.フルパス
   Debug.Print 対象ファイルサンプル.ファイル名
   Debug.Print 対象ファイルサンプル.フォルダパス
   Debug.Print 対象ファイルサンプル.上位フォルダパス
   Debug.Print 対象ファイルサンプル.拡張子

'Stop
   開始日時 = Now                ' 開始時刻を変数に格納します。
    
   Set ファイルシステムオブジェクト = CreateObject("Scripting.FileSystemObject")
   
   Set フォルダ = ファイルシステムオブジェクト.GetFolder(対象ファイルサンプル.フォルダパス)
   
   '変換ファイルの保存するフォルダを作成
    ''保存フォルダが存在するかどうか調べます
'    Stop
    If ファイルシステムオブジェクト.FolderExists(対象ファイルサンプル.上位フォルダパス & "\ShiftJIS") Then
      '変換ファイルを登録するフォルダは、既存
    Else
      '保存用のフォルダを作成
       ファイルシステムオブジェクト.CreateFolder 対象ファイルサンプル.上位フォルダパス & "\ShiftJIS"
    End If

'   既存のファイル形式指定の状態 = Application.Options.ConfirmConversions

   '★指定ファイルの存在するフォルダの、全てのファイルを対象に検索
      For Each ファイル In フォルダ.Files
      
         If Right(ファイル.Name, Len(ファイル.Name) - InStrRev(ファイル.Name, ".")) _
         = 対象ファイルサンプル.拡張子 Then
         
            変換ファイル = ファイル名抽出(ファイル.Path)
         
         '*************データの読み込み***********
            Documents.Open _
               FileName:=変換ファイル.フルパス, _
               ReadOnly:=False, _
               AddToRecentFiles:=False, _
               Revert:=False, _
               Encoding:=1251
         
            ActiveDocument.SaveAs _
               FileName:=変換ファイル.上位フォルダパス & "\ShiftJIS\" _
               & 変換ファイル.拡張子無しファイル名 & "ShiftJIS." & 変換ファイル.拡張子, _
               FileFormat:=wdFormatText, _
               EmbedTrueTypeFonts:=False, _
               Encoding:=932, _
               LineEnding:=wdCRLF
'         Stop
            ActiveDocument.Close
            
         End If
         
      Next '★ファイル
   
'   Application.Options.ConfirmConversions = 既存のファイル形式指定の状態
   Set ファイルシステムオブジェクト = Nothing
   
   終了日時 = Now
   MsgBox "処理を終了しました。" & vbNewLine & "処理時間は、" _
   & Format(終了日時 - 開始日時, "hh時間nn分ss秒") & " でした。"

End Sub


Function ファイル属性(ファイル区分 As String, 拡張子 As String) As 属性

   'GetOpenFilename はExcelでしか使えない
'   ファイル属性.フルパス = Application.GetOpenFilename(ファイル区分と拡張子)
   
   Dim ファイルを開くダイアログ As FileDialog

   Set ファイルを開くダイアログ = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
   
   With ファイルを開くダイアログ
      .AllowMultiSelect = False
      .Title = "処理対象のファイルの一つを指定してください。"
'      .InitialFileName = "D:\"     '初期表示パス
      .InitialFileName = ThisDocument.Path
      .Filters.Clear
      .Filters.Add ファイル区分, 拡張子, 1
      If .Show = -1 Then
         ファイル属性.フルパス = .SelectedItems(1)
         ファイル属性.ファイル名 = Dir(ファイル属性.フルパス)
         ファイル属性.フォルダパス = Left(ファイル属性.フルパス, InStrRev(ファイル属性.フルパス, "\") - 1)
         ファイル属性.上位フォルダパス = Left(ファイル属性.フォルダパス, InStrRev(ファイル属性.フォルダパス, "\") - 1)
         ファイル属性.拡張子 = Right(ファイル属性.フルパス, Len(ファイル属性.フルパス) - InStrRev(ファイル属性.フルパス, "."))
      Else
         End
      End If
   End With
End Function


Function ファイル名抽出(フルパス As String) As 属性
   With ファイル名抽出
      .フルパス = フルパス
      .ファイル名 = Dir(フルパス)
      .フォルダパス = Left(フルパス, InStrRev(フルパス, "\") - 1)
      .上位フォルダパス = Left(ファイル名抽出.フォルダパス, InStrRev(ファイル名抽出.フォルダパス, "\") - 1)
      .拡張子 = Right(フルパス, Len(フルパス) - InStrRev(フルパス, "."))
      .拡張子無しファイル名 = Left(ファイル名抽出.ファイル名, InStr(ファイル名抽出.ファイル名, ".") - 1)
   End With
End Function

解説:
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 を設定すると、文書が読み取り専用で開かれます。メモこの引数によって、保存されている文書の読み取り専用の設定が変更されることはありません。たとえば、読み取り専用の設定をオンにして文書が保存されている場合に、引数 ReadOnlyFalse に設定しても、そのファイルが読み込み/書き込みとして開かれることはありません。
 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 を読み取り専用で開きます。

Sub OpenDoc()
    Documents.Open FileName:="C:\MyFiles\MyDoc.doc", ReadOnly:=True
End Sub

 次の使用例は、WordPerfect 6.x ファイル コンバータを使って Test.wp を開きます。

Sub OpenDoc2()
    Dim fmt As Variant
    fmt = Application.FileConverters("WordPerfect6x").OpenFormat
    Documents.Open FileName:="C:\MyFiles\Test.wp", Format:=fmt
End Sub


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 を設定します。

Dim strDocEncoding As String

If Application.DefaultWebOptions.Encoding _
        = msoEncodingWestern Then
    strDocEncoding = "欧文"
Else
    strDocEncoding = "その他"
End If


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 として保存され、ヘッダー情報が保存されます。
EncodingMsoEncodingエンコードされたテキスト ファイルとして保存する文書に使用するコード ページまたは文字セットを指定します。
既定値はシステム コード ページです。このパラメータにすべての 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) で保存します。
Sub SaveAsRTF()
    ActiveDocument.SaveAs FileName:="Text.rtf", _
        FileFormat:=wdFormatRTF
End Sub

次の使用例は、現在の文書に拡張子 ".txt" を付けてテキスト形式で保存します。
Sub SaveAsTextFile()
    Dim strDocName As String
    Dim intPos As Integer

    'ファイル名の拡張子の位置を探します。
    strDocName = ActiveDocument.Name
    intPos = InStrRev(strDocName, ".")

    If intPos = 0 Then

        '文書が保存されていない場合、
        'ファイル名を指定するように要求します。
        strDocName = InputBox("Please enter the name " & _
            "of your document.")
    Else

        '拡張子を削除して、".txt" 拡張子を追加します。
        strDocName = Left(strDocName, intPos - 1)
        strDocName = strDocName & ".txt"
    End If

    '新しい拡張子でファイルを保存します。
    ActiveDocument.SaveAs FileName:=strDocName, _
        FileFormat:=wdFormatText
End Sub

次の使用例は、インストールされているすべてのコンバータに対してループ処理を行います。この処理により、WordPerfect 6.0 コンバータが見つかった場合は、このコンバータを使用して現在の文書を保存します。
Sub SaveWithConverter()

    Dim cnvWrdPrf As FileConverter

    'WordPerfect ファイル コンバータを検索し、
    'FileFormat コンバータ値のコンバータを使用して
    '文書を保存します。
    For Each cnvWrdPrf In Application.FileConverters
        If cnvWrdPrf.ClassName = "WrdPrfctWin" Then
            ActiveDocument.SaveAs FileName:="MyWP.doc", _
                FileFormat:=cnvWrdPrf.SaveFormat
        End If
    Next cnvWrdPrf

End Sub

次の使用例は、文書にパスワードを設定して保存しています。
Sub SaveWithPassword(docCurrent As Document, strPWD As String)
    With docCurrent
        .SaveAs WritePassword:=strPWD
    End With
End Sub


FileDialog プロパティ は、ファイル ダイアログ ボックスの 1 つのインスタンスを表す FileDialog オブジェクトを取得します。

Dialogs プロパティを使う方法との違いを確認して、使い分けて下さい。
 ・Word の組み込みのダイアログ ボックスを表示する

 expression.FileDialog(FileDialogType)
expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。
 FileDialogType 必ず指定します。ダイアログの種類を指定します。
使用できる定数は、次に示す MsoFileDialogType クラスの定数のいずれかです。
msoFileDialogFilePicker
msoFileDialogFolderPicker
msoFileDialogOpen
msoFileDialogSaveAs

次の使用例は、[名前を付けて保存] ダイアログ ボックスを表示します。

Sub ShowSaveAsDialog()
    'FileDialog オブジェクトの変数を宣言します。
    Dim dlgSaveAs As FileDialog

    '[名前を付けて保存] ダイアログ ボックスの FileDialog オブジェクトを作成します。
    Set dlgSaveAs = Application.FileDialog( _
        FileDialogType:=msoFileDialogSaveAs)
    dlgSaveAs.Show

    'オブジェクトの変数に Nothing を設定します。
    Set dlgSaveAs = Nothing
End Sub

次の使用例は、[ファイルを開く] ダイアログ ボックスを表示し、ユーザーが複数のファイルを選択して開けるように設定します。

Sub ShowFileDialog()
    'FileDialog オブジェクトの変数を宣言します。
    Dim dlgOpen As FileDialog

    '[ファイルを開く] ダイアログ ボックスの FileDialog オブジェクトを作成します。
    Set dlgOpen = Application.FileDialog( _
        FileDialogType:=msoFileDialogOpen)
    With dlgOpen
        .AllowMultiSelect = True
        .Show
    End With

    'オブジェクトの変数に Nothing を設定します。
    Set dlgOpen = Nothing
End Sub


Filters プロパティ は、FileDialogFilters コレクションを取得します。

 expression.Filters
expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。

次の使用例は、FileDialog オブジェクトを使用して [参照] ダイアログ ボックスを表示し、選択された各ファイルをメッセージ ボックスに表示します。
また、"イメージ" と名付けられた新しいファイル フィルタを追加します。
Sub Main()

    'FileDialog オブジェクトの変数を宣言します。
    Dim fd As FileDialog

    '[参照] ダイアログ ボックスの FileDialog オブジェクトを作成します。
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    '選択した各アイテムのパスを保存する
    '変数を宣言します。パスは文字列型 (String) ですが、
    '変数はバリアント型 (Variant) である必要があります。Each...Next ルーチンは、
    'バリアント型 (Variant) およびオブジェクト型 (Object) の値でのみ動作します。
    Dim vrtSelectedItem As Variant

    'With...End With ブロックを使用して、FileDialog オブジェクトを参照します。
    With fd

        'GIF イメージおよび JPEG イメージを含むフィルタを追加し、一覧の最初のアイテムとして設定します。
        '複数の拡張子を対象とする場合は、; で区切って列挙します。
        .Filters.Add "イメージ", "*.gif; *.jpg; *.jpeg", 1

        'Show メソッドを使用して [参照] ダイアログ ボックスを表示し、ユーザーのアクションを取得します。
        'ユーザーがアクション ボタンをクリックした場合
        If .Show = -1 Then

            'FileDialogSelectedItems コレクション内のすべての文字列を調べます。
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem は、選択した各アイテムのパスを保存する文字列型 (String) の値です。
                'このパスで使用したいファイルの I/O 関数があれば、使用できます。
                'この使用例では、単にメッセージ ボックスにパスを表示します。
                MsgBox "選択したアイテムのパス : " & vrtSelectedItem

            Next vrtSelectedItem
        'ユーザーが [キャンセル] をクリックした場合
        Else
        End If
    End With

    'オブジェクトの変数に Nothing を設定します。
    Set fd = Nothing

End Sub


FileDialog オブジェクトの Show メソッド は、ファイルのダイアログ ボックスを表示し、アクション ボタン (-1) とキャンセル ボタン (0) のどちらがクリックされたかを示す長整数型 (Long) の値を返します。
Show メソッドを呼び出すと、ファイルのダイアログ ボックスが閉じられるまで、コードの実行は中断されます。
[ファイルを開く] および [名前を付けて保存] ダイアログ ボックスでは、Show メソッドの直後に Execute メソッドを使用して、ユーザーのアクションを実行します。

 expression.Show

expression 必ず指定します。FileDialog
オブジェクトを表すオブジェクト式を指定します。

次の使用例は、FileDialog オブジェクトを使用して [参照] ダイアログ ボックスを表示し、選択された各ファイルをメッセージ ボックスに表示します。

Sub Main()

    'FileDialog オブジェクトの変数を宣言します。
    Dim fd As FileDialog

    '[参照] ダイアログ ボックスの FileDialog オブジェクトを作成します。
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    '選択した各アイテムのパスを保存する
    '変数を宣言します。パスは文字列型 (String) ですが、
    '変数はバリアント型 (Variant) である必要があります。Each...Next ルーチンは、
    'バリアント型 (Variant) およびオブジェクト型 (Object) の値でのみ動作します。
    Dim vrtSelectedItem As Variant

    'With...End With ブロックを使用して、FileDialog オブジェクトを参照します。
    With fd

        'Show メソッドを使用して [参照] ダイアログ ボックスを表示し、ユーザーのアクションを取得します。
        'ユーザーがアクション ボタンをクリックしました。
    If .Show = -1 Then

            'FileDialogSelectedItems コレクション内のすべての文字列を調べます。
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem は、選択した各アイテムのパスを含む文字列型 (String) の値です。
                'このパスで使用したいファイルの I/O 関数があれば、使用できます。
                'この使用例では、単にメッセージ ボックスにパスを表示します。
                MsgBox "パス: " & vrtSelectedItem

            Next vrtSelectedItem
        'ユーザーが [キャンセル] をクリックしました。
    Else
        End If
    End With

    'オブジェクトの変数に Nothing を設定します。
    Set fd = Nothing

End Sub

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


InitialFileName プロパティ は、ファイルのダイアログ ボックスに初期表示されるパスやファイル名を設定します。文字列型 (String) の値を使用します。値の取得および設定が可能です。

expression.InitialFileName
expression   必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。

'*' や '?' のワイルドカード文字は、ファイル名の指定には使用できますがパスには使用できません。
'*' は連続する複数の文字を表し、'?' は 1 つの文字を表します。
たとえば、.InitialFileName = "c:\c*s.txt" を指定すると、"charts.txt" と "checkregister.txt" の両方を取得します。

ファイル名のないパスのみを指定した場合、ファイル フィルタによって設定されたすべてのファイルがダイアログ ボックスに表示されます。

初期フォルダに存在するファイルを指定した場合、そのファイルのみがダイアログ ボックスに表示されます。

初期フォルダに存在しないファイル名を指定した場合、ダイアログ ボックスにファイルは表示されません。
InitialFileName プロパティにファイルの種類を指定すると、ファイル フィルタの設定を InitialFileName プロパティの設定に置き換えます。
無効なパスを指定した場合、最後に使用したパスが使用されます。無効なパスを使用すると、警告のメッセージが表示されます。
このプロパティに 256 文字より長い文字列を指定すると、実行時エラーになります。

次の使用例は、FileDialog オブジェクトを使用して [参照] ダイアログ ボックスを表示し、選択された各ファイルをメッセージ ボックスに表示します。
Sub Main()

    'FileDialog オブジェクトの変数を宣言します。
    Dim fd As FileDialog

    '[参照] ダイアログ ボックスの FileDialog オブジェクトを作成します。
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    '選択した各アイテムのパスを保存する
    '変数を宣言します。パスは文字列型 (String) ですが、
    '変数はバリアント型 (Variant) である必要があります。Each...Next ルーチンは、
    'バリアント型 (Variant) およびオブジェクト型 (Object) の値でのみ動作します。
    Dim vrtSelectedItem As Variant

    'With...End With ブロックを使用して、FileDialog オブジェクトを参照します。
    With fd

        'C:\ ドライブへの初期パスを設定します。
        .InitialFileName = "C:\"

        'Show メソッドを使用して [参照] ダイアログ ボックスを表示し、ユーザーのアクションを取得します。
        'ユーザーがアクション ボタンをクリックした場合
        If .Show = -1 Then

            'FileDialogSelectedItems コレクション内のすべての文字列を調べます。
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem は、選択した各アイテムのパスを保存する文字列型 (String) の値です。
                'このパスで使用したいファイルの I/O 関数があれば、使用することができます。
                'この使用例では、単にメッセージ ボックスにパスを表示します。
                MsgBox "選択したアイテムのパス : " & vrtSelectedItem

            Next vrtSelectedItem
        'ユーザーが [キャンセル] をクリックした場合
        Else
        End If
    End With

    'オブジェクトの変数に Nothing を設定します。
    Set fd = Nothing

End Sub


この種類の目次に戻る↑ 索引へ↓ トップページに戻る


ホームページのトップに戻る