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
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
KenKen_SPさま
超初心者の私に、貴重なお時間を割いていただき、感謝感激です。研究すればするほど、泥沼のような深みにはまって、その難しさに戸惑った2・3日でしたが、完璧なプログラムを作っていただきもうしわけありません。プロの領域のあなた様の文章を教科書として、これから更に勉強しなければ・・・。ほんとうにありがとうございました。
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
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. 必要であれば、カレントフォルダを元に戻しておく
頑張ってください。では。
この回答への補足
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
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 がインストールされてないなどという前提からはずれた
ケースは考慮してません。
まず、ご自分でコードを書いてみて、どうしても分からなければサンプル
コードを書きますので、その旨書き込みして下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
VBA★PDFをPDFアプリで印刷し...
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルVBAで一つ上の階層...
-
C++でネットワークパスのファイ...
-
outlook開けない
-
【VB.NET】App.configにファイ...
-
VBS パスに変数を入れたい
-
エクセルのマクロで特定フォル...
-
ExcelのVBAで上書き保存を確...
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
VBAでの共有パスにつきまして
-
アプリケーションのインストー...
-
xcopyコマンドの進行状況を表示...
-
Excel2010VBAでエラーが出る相...
-
Excel VBAでテキストファイルを...
-
VBAでファイル名の取得方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
エクセルのマクロで特定フォル...
-
エクセルVBAで一つ上の階層...
-
VBA★PDFをPDFアプリで印刷し...
-
開いているファイルを削除し、...
-
ExcelVBAの使い方 ¥の使い方...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
コマンドプロンプトのコピー関...
-
C#でのProcess.Startと変数path
-
ExcelのVBAで上書き保存を確...
-
実行ファイルのパスを取得したい
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
VBAで、VBのapp.pathと同じ機能...
-
【Excel VBA】Power Qurry のソ...
おすすめ情報