• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロでエクセル・ワード文書をひらく)

マクロでエクセル・ワード文書をひらく

このQ&Aのポイント
  • Windows2000 Excel2000でマクロ作成中の超初心者です。コマンドボタンでExcelとWord文書を開いて、その文書を利用しています。次の3点について、ご教示をお願いします。
  • 1)この文書を開いたとき、両方ともマイドキュメントのフォルダに固定したい 2)ワード文書を開くと、タスクトレーにあらわれるため、いちいち最大化ボタンをおさなければならない。これを最初から最大化表示したい 3)他のPCでも使えるコードにしたい
  • ちなみに使っているコードは次の2個です。 Sub ワードをひらく() Dim FileName As String Dim s As String On Error GoTo JumpError FileName = Application.GetOpenFilename("Word文書,*.doc", 1, "Word文書を開く", , False) Shell """C:\Program Files\Microsoft Office\Office\WINWORD.EXE""" & " """ & FileName & """" JumpError: End Sub ----------------------------------- Sub エクセルをひらく() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

コメントは省略しました。 こちらの方はコードは短くて済みますが、Word を開いた後、再び Word を制御しようと思えば困難です。つまり、開きっぱなしに なってしまいます。 そのようなニーズがある場合は、#3 の方法の方が適しています。 ' // Windows の関連付けで開く方法 Sub Sample2()   Dim oShell    As Object   Dim sDocumentsDir As String   Dim sDirBackup  As String   Dim vFilename   As Variant      Set oShell = CreateObject("WScript.Shell")      sDocumentsDir = oShell.SpecialFolders("MyDocuments")   sDirBackup = oShell.CurrentDirectory      oShell.CurrentDirectory = sDocumentsDir      vFilename = Application.GetOpenFilename( _               FileFilter:="Word文書(*.doc),*.doc", _               FilterIndex:=1, _               Title:="Word文書を開く", _               MultiSelect:=False)      If VarType(vFilename) = vbBoolean Then     MsgBox "Cancel されました", vbInformation   Else     oShell.Run Chr(34) & vFilename & Chr(34), vbMaximizedFocus   End If    oShell.CurrentDirectory = sDirBackup   Set oShell = Nothing End Sub

aitaine
質問者

お礼

KenKen_SPさま 超初心者の私に、貴重なお時間を割いていただき、感謝感激です。研究すればするほど、泥沼のような深みにはまって、その難しさに戸惑った2・3日でしたが、完璧なプログラムを作っていただきもうしわけありません。プロの領域のあなた様の文章を教科書として、これから更に勉強しなければ・・・。ほんとうにありがとうございました。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

提示したキーワードはご自分でもっと掘り下げて下さいね。 とは言えお困りでしょうから、いくつか例示しておきます。 ' // 定番の方法 CreateObeject Sub Sample1()   Dim oShell    As Object   Dim sDocumentsDir As String   Dim sDirBackup  As String   Dim vFilename   As Variant ' // String から Variant に変更しました   Dim wdApp     As Object  ' // Word.Application   Dim wdDoc     As Object  ' // Word.Document   ' // MyDocuments パス取得やカレントフォルダを変更するための   ' // ライブラリを参照する   Set oShell = CreateObject("WScript.Shell")      ' // MyDocuments フォルダパス取得   sDocumentsDir = oShell.SpecialFolders("MyDocuments")   ' // カレントフォルダのパスを保存しておく   sDirBackup = oShell.CurrentDirectory      ' // Application.GetOpenFilename の初期フォルダ設定のため   ' // カレントフォルダを MyDocuments に変更する   oShell.CurrentDirectory = sDocumentsDir      ' // ※ファイル名問い合せ   vFilename = Application.GetOpenFilename( _               FileFilter:="Word文書(*.doc),*.doc", _               FilterIndex:=1, _               Title:="Word文書を開く", _               MultiSelect:=False)      ' // ダイアログの結果、取得したファイルを開く   If VarType(vFilename) = vbBoolean Then     ' // vFilename がブール値(False)ならキャンセルボタンが押された     MsgBox "Cancel されました", vbInformation   Else     ' // Word を起動する     Set wdApp = CreateObject("Word.Application")  ' <--- 4-1     ' // Word を表示する     wdApp.Visible = True     ' // Word を最大化する     wdApp.WindowState = 1 ' // wdWindowStateMaximize     ' // ※で指定されたファイルを開く     Set wdDoc = wdApp.Documents.Open(vFilename)  ' <--- 4-2     ' // Word をアクティブにする     AppActivate (wdApp.Caption)   End If   ' // カレントフォルダを元に戻す    oShell.CurrentDirectory = sDirBackup   ' // 後始末   Set wdDoc = Nothing   Set wdApp = Nothing   Set oShell = Nothing End Sub

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

#1 です。 追加ヒント、というよりつなぎ合わせていけば完成しますよ。 1. MyDocuments フォルダのパスを取得する。   PC 環境によりパスが異なるので、WScript.Shell の SpecialFolders で   取得します。      例)#1 で紹介済みだけど再掲     Dim oShell As Object     Dim sDocumentsDir As String     Set oShell = CreateObject("WScript.Shell")     sDocumentsDir = oShell.SpecialFolders("MyDocuments")      2. カレントフォルダを 1. で取得したパスに設定する   同じく、WScript.Shell の CurrentDirectory プロパティーで設定できます。   例)sDocumentsDir は 1. で取得した MyDocuments フォルダパス     oShell は 1. で参照済み     oShell.CurrentDirectory = sDocumentsDir 3. Application.GetOpenFilename でファイル名を問い合わせる 4. 3. の結果、キャンセルでなければ、   4-1) CreateObject で Word を起動   4-2) 3. で受け取ったファイルを開く      例)sFilename には *.doc のパスが代入されている        Dim wdApp As Object     Dim wdDoc As Object     Set wdApp = CreateObject("Word.Application") ' <--- 4-1     wdApp.Visible = True     Set wdDoc = wdApp.Documents.Open(sFilename)  ' <--- 4-2 5. 必要であれば、カレントフォルダを元に戻しておく 頑張ってください。では。

aitaine
質問者

補足

Sub test() Dim oShell As Object Dim sDocumentsDir As String Set oShell = CreateObject("WScript.Shell") sDocumentsDir = oShell.SpecialFolders("MyDocuments") oShell.CurrentDirectory = sDocumentsDir Application.GetOpenFilename 'ダイアログボックスを開く Dim wdApp As Object Dim wdDoc As Object Set wdApp = CreateObject("Word.Application") ' <--- 4-1 wdApp.Visible = True Set wdDoc = wdApp.Documents.Open(sFilename) ' <--- 4-2 この4-2で型が違いますのエラーが発生します。 選択ファイルを開く ' ファイルを最大化で表示 ' Shell(pathname,vbNormalFocus)←ここは赤い字になります。 ' カレントフォルダを元に戻す '  コード不明なのでご教示お願いします。 End Sub

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんばんは。 > 1)この文書を開いたとき、両方ともマイドキュメントのフォルダに > 固定したい ' // 参考: MyDocuments フォルダのパスを取得する Sub Sample1()   Dim sPath As String   sPath = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")   MsgBox sPath End Sub ヒントは、Application.GetOpenFilename の前にカレントフォルダを MyDocuments に変更すれば GetOpenFilename ダイアログの初期ファルダ も変更されます。   --> 調べる際のキーワード:     WSH CurrentDirectory SpecialFolders > 2)ワード文書を開くと、タスクトレーにあらわれるため、いちいち > 最大化ボタンをおさなければならない。これを最初から最大化表示 > したい VBA ヘルプより Shell 関数 Shell(pathname[,windowstyle]) 第2引数 windowstyle に、vbNormalFocus などを指定すれば良いだけです。   --> 質問の前に最低限ヘルプは確認して下さい > 3)他のPCでも使えるコードにしたい 開くアプリを Shell で指定する方法では、パスが通っている場合を除いて EXE をフルパスで指定する必要がありますが、この時点で環境依存する コードになっていますね。この部分は、他の方法に変更する必要があります。   --> 調べる際のキーワード     1. CreateObject(または GetObject)を使う       --> CreateObject("Word.Application")     2. WSH を使って Windows の関連付けから開く       --> CreateObject("WScript.Shell").Run     3. API を使って Windows の関連付けから開く       --> ShellExecute などなど。Word がインストールされてないなどという前提からはずれた ケースは考慮してません。 まず、ご自分でコードを書いてみて、どうしても分からなければサンプル コードを書きますので、その旨書き込みして下さい。

aitaine
質問者

補足

もうしわけありません。今の私の実力では・・。ご指摘のキーワードを研究しないと理解できないかと。・・いまから少し研究してみます。

関連するQ&A