11.VB6.0 からワードを起動・終了する基本的な操作 |
1.VB6.0 からワード(Word)を起動する 2.VB6.0 からワード(Word)を終了する 3.上記実行上の留意事項 4. 5. 6. ※ 実行時バインディング(レイトバインディング/参照設定しなくても使用できる方法)での起動方法は、ご自分でコードが書け ないような人が使用するとトラブルの元となり却って時間がかかる事になりかねませんので、私としては理解しないままで使ってほしくないので今回の見直しから紹介をしない事にしました。 |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Word 2007/Word 2010(Word 2000〜Word 2003) Option :[Option Explicit] 参照設定:Microsoft Word *.* ObjectLibrary / Microsoft Scripting Runtime 参照設定方法参照 使用 API: その他 :ツール→オプション→全般→エラートラップで[エラー発生時に中断]以外にチェックを入れておいて下さい。 : |
1.VB6.0 からワード(Word)を起動する |
Option Explicit '--------------------- Private 変数の宣言部分 ---------------------------- Private Fso As New FileSystemObject 'ファイルを扱う場合、FileSystemObject を使った方が便利なので Private WithEvents wdApp As Word.Application Attribute wdApp.VB_VarHelpID = -1 Private wdDocs As Word.Documents Private wdDoc As Word.Document Private frgClose As Boolean 'Word が起動中のフラグ '------------------------------------------------------------------------------- '--------------------- Word の起動処理関係 ---------------------------- Private Sub Command1_Click() 'Word を起動 ' Call WordOpen(Fso.BuildPath(App.Path, "test.doc")) '既存のファイルをオープンして、Word を起動 Call WordOpen("") '新規ファイルをオープンして、Word を起動 End Sub Private Sub WordOpen(ByVal FilePath As String) 'Word のオープン処理用プロシージャ If Not wdApp Is Nothing Then Exit Sub 'すでに起動中の場合の処理 frgClose = False '起動中は、ユーザーが Word を閉じれないように 'ファイル名が未指定の場合は、新規ファイルを開く If Len(FilePath) = 0 Then '新規のファイルを開く場合 Set wdApp = New Word.Application Set wdDocs = wdApp.Documents Set wdDoc = wdDocs.Add Else 'ファイル名の指定がある場合はそのファイルの有無を確認 If Fso.FileExists(FilePath) Then '既存のファイルを開く場合 Set wdApp = New Word.Application Set wdDocs = wdApp.Documents Set wdDoc = wdDocs.Open(FilePath) Else MsgBox "ファイルが見つかりません。" '指定のファイルが見つからないので新規のファイルを開く Set wdApp = New Word.Application Set wdDoc = wdDocs.Add End If End If wdApp.Visible = True End Sub |
2.VB6.0 からワード(Word)を終了する |
'--------------------- Word の終了処理関係 ---------------------------- Private Sub Command2_Click() 'Word を終了 '名前をつけて、Doc 形式で保存 Call WordClose(Fso.BuildPath(App.Path, "Test01.docx"), True) 'False の場合保存しないで終了 End Sub Private Sub WordClose(ByVal FilePath As String, Optional ByVal CancelSave As Boolean = True) 'Word の終了処理用プロシージャ(Word 2010 / Windows 7 / VB6.0 の環境で動作確認) If wdApp Is Nothing Then Exit Sub '起動していない場合は処理しない 'ツール→オプション→全般→エラートラップ でエラー発生時に中断以外にチェックを入れておいて下さい。 On Error Resume Next 'エラーが発生しても解放処理を実行したいので frgClose = True 'True : 閉じる事ができる(プログラムからの終了なので) Const wdFormatDocumentDefault = 16 'Word 2007 以下ではエラーがでるので wdApp.DisplayAlerts = False '保存時の問合せのダイアログを非表示に設定 '保存する場合 If CancelSave Then Dim kts As String Dim fm As Variant 'Word ファイルの拡張子を取得 kts = Fso.GetExtensionName(FilePath) kts = LCase(kts) '拡張子を小文字で取得 '拡張子に合せて保存形式を変更(環境や仕様に合わせて変更修正願います。) Select Case kts Case "txt" '(3) 改行が保持された Windows テキスト形式 fm = wdFormatTextLineBreaks Case "doc" '(0) Microsoft Word 97〜2003 形式 97〜2003 fm = wdFormatDocument Case "docx" '(16) Word の既定の文書形式。Word 2007 以降では、DOCX 形式です。 If Val(wdApp.Version) >= 12 Then fm = wdFormatDocumentDefault End If Case "rtf" '(6) リッチテキスト形式 (RTF) fm = wdFormatRTF Case Else '必要なものは、追加して下さい。 If Val(wdApp.Version) >= 12 Then fm = wdFormatDocumentDefault Else fm = wdFormatDocument End If MsgBox "ファイルの保存形式を確認して下さい。" End Select If Val(wdApp.Version) >= 14 Then '今のところ SaveAs でも使用できるようですが、一応新機能の方を使い分けしています。 wdDoc.SaveAs2 FileName:=FilePath, FileFormat:=fm '名前を付けてファイルに保存 Else 'Word 2010 のVBAのヘルプでは、見当たらないし、インテリセンス機能でも表示されませんが '使用できるようです、どうも Word 2010 からは、SaveAs2 に変わったようなので使い分けを 'しております。 wdDoc.SaveAs FileName:=FilePath, FileFormat:=fm '名前を付けてファイルに保存 End If End If Set wdDoc = Nothing 'wdDoc を解放 Set wdDocs = Nothing 'wdDocs を解放 If CancelSave = False Then '保留中の変更を保存しません。(問い合わせのダイアログボックスを表示しない) wdApp.Quit SaveChanges:=wdDoNotSaveChanges 'wdApp.DisplayAlerts = wdAlertsNone でも表示されるので Else wdApp.Quit 'Word を終了します。 End If Set wdApp = Nothing 'wdApp を解放 If Err.Number <> 0 Then MsgBox "終了処理中にエラーNo." & Err.Number & " のエラーが発生しましたので確認下さい。" Err.Clear End If End Sub Private Sub Form_Unload(Cancel As Integer) '終了時の処理 'WinWord.EXE が起動していたら閉じる If Not wdApp Is Nothing Then Call WordClose("", False) End If End Sub Private Sub wdApp_DocumentBeforeClose(ByVal Doc As Word.Document, Cancel As Boolean) 'VB6.0 から Word の DocumentBeforeClose イベントを監視してユーザーが Word を閉じれないようにする '(VB6.0 から Word を操作している途中でユーザーが勝手に Word を閉じるとエラーが発生するので) If frgClose = False Then Cancel = True 'ユーザーが Word を閉じようとしたので、処理をキャンセルする Else Cancel = False 'キャンセルしない(閉じる) End If End Sub |
3.上記実行上の留意事項 |
上記、実行図及びコントロール類の配置図(下記のように作っておくとコードを試したりする場合にも便利かと) 1.Excel 同様に間違った操作をすると、プロセスが残る事があります。 詳しくは、[VBからExcel及びWordを操作する時の注意事項]をご覧下さい。 2.Word 2010 /Windows 7 /VB6.0 の環境で動作確認をしております。又、できる限り下位バージョンでも動作するように 配慮はしておりますが全ての環境で動作確認をした分けではありませんので、ご使用環境で十分テスト願います。 (プロセスが残っていないかどうか等) 3.VB6.0 からWord を操作しているコードは、殆ど見かけません、VBA のコードを移植するか、Word 上でやりたい事をマクロに 記録して、そのマクロをVBのコードに移植して下さい。 |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
VB6.0 から Word を起動する VB6.0 から Word を終了する VB6.0 から ワード を起動する VB6.0 から ワード
を終了する Microsoft Word 2000 Word 2002 Word 2003 Word 2007 Word 2010 VBA Visual Basic for Applications |