- ベストアンサー
マクロでエクセル・ワード文書をひらく
- 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
- みんなの回答 (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
その他の回答 (3)
- KenKen_SP
- ベストアンサー率62% (785/1258)
提示したキーワードはご自分でもっと掘り下げて下さいね。 とは言えお困りでしょうから、いくつか例示しておきます。 ' // 定番の方法 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)
#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. 必要であれば、カレントフォルダを元に戻しておく 頑張ってください。では。
補足
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)
こんばんは。 > 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 がインストールされてないなどという前提からはずれた ケースは考慮してません。 まず、ご自分でコードを書いてみて、どうしても分からなければサンプル コードを書きますので、その旨書き込みして下さい。
補足
もうしわけありません。今の私の実力では・・。ご指摘のキーワードを研究しないと理解できないかと。・・いまから少し研究してみます。
お礼
KenKen_SPさま 超初心者の私に、貴重なお時間を割いていただき、感謝感激です。研究すればするほど、泥沼のような深みにはまって、その難しさに戸惑った2・3日でしたが、完璧なプログラムを作っていただきもうしわけありません。プロの領域のあなた様の文章を教科書として、これから更に勉強しなければ・・・。ほんとうにありがとうございました。