質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

26776閲覧

名前を付けて保存におけるデフォルトの保存先をカレントディレクトリにする方法

pegy

総合スコア243

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/08/07 08:24

名前を付けて保存のダイアログボックスを表示するために以下のコードを記載したのですが
操作しているエクセルが\shared\hoge\fileと共有フォルダ内なのに、マイドキュメントが指定されてしまいます。これをカレントディレクトリである\shared\hoge\fileに指定(また共有でなくても、例えば、カレントディレクトリがdesktopであればdesktop)することができるのでしょうか?
宜しくお願い申しあげます。

vba

1Private Sub CommandButton2_Click() 2 'ActiveWorkbook.Saved = True 3 Dim FileName As Variant 4 FileName = _ 5 Application.GetSaveAsFilename( _ 6 InitialFileName:=ThisWorkbook.Name _ 7 , FileFilter:="Excel マクロ有効ブック(*.xlsm),*.xlsm" _ 8 , FilterIndex:=1 _ 9 , Title:="保存先の指定" _ 10 ) 11 If FileName <> False Then 12 Application.DisplayAlerts = False 13 ThisWorkbook.SaveAs FileName:=FileName, FileFormat:=xlNormal 14 Application.DisplayAlerts = True 15 End If 16 Unload Me 17End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

InitialFilename をフルパスで指定してください。

投稿2019/08/07 10:01

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/08/07 10:06

たとえば C:\Users\UserName\Desktop に保存するには C:\Users\UserName\Desktop\無題.xlsx を与えてください。
pegy

2019/08/07 23:29

コメントありがとうございます。 会社の複数のメンバーが共有して使うため、相対的にディレクトリを取得しなくてはならないという断りをいれるべきでした。質問の方法も本当によく考えて、回答を得やすいように学ばなければならないと痛感しました。お詫び申し上げます。 宜しくお願い申し上げます。
Zuishin

2019/08/07 23:36 編集

相対ディレクトリからフルパスを得ることができるので、そこは特に問題にならないと思います。 多少大きなプログラムなら、勝手にカレントディレクトリを変えるような行儀の悪いコードはバグの温床になるのでこちらの方法を選ぶべきですが、VBA なら問題ないかもしれませんね。
pegy

2019/08/08 06:30

なるほど、一般的にcd (chdir)等でユーザーのカレントディレクトリを変えることは不適切なケースがあるので注意が必要一つ勉強になりました。 一つ勘違いであれば申し訳ないのですが、 C:\Users\UserName\Desktop\無題.xlsx といったパスは絶対パスではないでしょうか?
Zuishin

2019/08/08 06:39

絶対パスです。相対パスからこれを得ることができます。
Zuishin

2019/08/08 06:43

> 開いているブックのパスに変更するには、 ChDir ThisWorkbook.Path とします。 > 若しくは、 InitialFileName:=ThisWorkbook.FullName _ とする。 これらも絶対パスです。
Zuishin

2019/08/08 06:45

相対パスというのはカレントディレクトリからのパスになるので、カレントディレクトリが変わると同じ相対パスでも示す位置が変わります。 だから、カレントディレクトリは動かさないというのが基本になります。
guest

0

どうやら GetSaveAsFilename には初期フォルダの引数はないようです。
ということで、
・前もってChDirでカレントディレクトリを変更しておく
・FileDialogオブジェクトを使う
のいずれかの方法でどうぞ。

投稿2019/08/07 09:54

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pegy

2019/08/07 23:27

コメントを頂きありがとうございます。 ChDirで解決することができました!
guest

0

ベストアンサー

カレントディレクトリなら以下を参考に。
カレントフォルダを取得・設定する

ですが、開いているブックのフォルダが必要なら以下を参考に。
ブックのパスを取得する

投稿2019/08/07 08:37

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pegy

2019/08/07 09:41

コメント有難うございます。 いずれのディレクトリの取得の方法も分かったのですが、どのプロパティにこの取得したディレクトリを設定するのかマニュアルをみても分からなかったのでご教示を頂けると嬉しいです。 曖昧な質問で申し訳ございませんが、宜しくお願い申し上げます。
sazi

2019/08/07 10:21 編集

Application.GetSaveAsFilenameの前でカレントディレクトリを変更すれば良いですね。 開いているブックのパスに変更するには、 ChDir ThisWorkbook.Path とします。 若しくは、 InitialFileName:=ThisWorkbook.FullName _ とする。
pegy

2019/08/07 23:26

ご返信遅くなりすみません。なるほど、大変勉強になりました。 無事解決することができたので御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問