• ベストアンサー
  • すぐに回答を!

エクセルVBAでブックを相対パスで保存する

  • 質問No.1605798
  • 閲覧数4868
  • ありがとう数4
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 75% (41/54)

お世話になります。
苦労しながらもエクセルVBAをいじっています。仕事の効率を上げるために、VBAで自動化をしていますが、わからないことがありますので教えてください。
月ごとのシートを作成して、その月に完成させたプロジェクトのリストを入力するブックを作り、各契約者に配りたいと思っています。そのブックには、報告書提出を簡素化できるように、作成したい該当月のシートだけを抽出して決められた名前で保存し、電子メールに添付して送信できる状態にした報告書作成のプログラムを組んでいます。が、抽出されたシートだけのブックを、オリジナルのブックがあるフォルダと同じところに保存したいんです。"名前を付けて保存"をVBAに設定すると、絶対パスが必要な要ですし、もしも指定しなければ作業フォルダ(カレントフォルダ)に保存されるようですが、何とかしてオリジナルのブックと同じフォルダに保管できないものでしょうか。
どうぞよろしくお願いします。
ちなみに、下記が自分なりにやってみたものです。
---------------------------------
Private Sub CommandButton1_Click()

Dim myName As String
Dim pasu As String
With ListBox1
If (.ListIndex = -1) Then
MsgBox "提出用報告書を作成するシートを選択してください"
Else

Worksheets(.List(.ListIndex)).Select
pasu = ActiveWorkbook.Path
ActiveSheet.Copy
myName = ActiveSheet.Name

ActiveWorkbook.SaveAs Filename:= _
"" & myName & "" & Application.UserName & ".xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Unload UserForm2

End If
End With
End Sub

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 57% (3570/6233)

こんにちは。

ChDir も一つの考え方かもしれませんが、

シート1つのブックが出来上がって、そのActiveWorkbookと同じ場所に保存するなら、作ったpasu を加えればよいのではありませんか?

  pasu = ActiveWorkbook.Path
  ActiveSheet.Copy
  myName = ActiveSheet.Name
  Fname = pasu & "\" & myName & Application.UserName & ".xls"

ActiveWorkbook.SaveAs Filename:= Fname, _
     FileFormat:=xlNormal, _
     Password:="", _
     WriteResPassword:="", _
     ReadOnlyRecommended:=False, _
     CreateBackup:=False

それから、なるべく、コードは見やすいように整列して書くことが上達の早道と言われています。

なお、読み違えていましたら、申し訳ありません。
お礼コメント
gucci1

お礼率 75% (41/54)

どうもありがとうございました。おかげさまで解決です。本当に助かりました。またよろしくお願いします。
投稿日時:2005/08/26 22:44

その他の回答 (全4件)

  • 回答No.5

ベストアンサー率 35% (777/2173)

半角スペースは詰められるんですよね>整列

なお、各パスを返すプロパティはルートディレクトリだと最後に"\"が入りますので考慮が必要です。そうでないとパス名で終わって、"\"は入らないんですけどね。
  • 回答No.4

ベストアンサー率 62% (785/1258)

こんにちは。KenKen_SP です。

> オリジナルのブックと同じフォルダ

このオリジナルというのが、何なのかよく分からないのですが、

ThisWorkbook.Path

でコードが記載されたブックのパスが返ります。

ActiveWorkbook.Path は現在アクティブになっているブックの
パスが返されます。

このどちらかで対応できませんか?
お礼コメント
gucci1

お礼率 75% (41/54)

どうもありがとうございました。初心者なもので、わかりにくいこともあったかと思いますが、親切に教えていただきまして、ありがとうございました。
投稿日時:2005/08/26 22:47
  • 回答No.2

ベストアンサー率 35% (777/2173)

今、環境が手元に無いので未検証ですが^^


'参考URLより
phn = ActiveWorkbook.Path
dva = Left(phn, 2)
dra = Mid(phn, 3)
ChDrive dva
ChDir dra

'質問文より
ActiveWorkbook.SaveAs Filename:= _
"" & myName & "" & Application.UserName & ".xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Unload UserForm2
  • 回答No.1

ベストアンサー率 35% (777/2173)

カレントフォルダを変更してはどうでしょうか?
ActiveWorkbook.Pathからドライブ名とパス名をそれぞれ拾って、ChDrive と ChDir で変更すればよいのでは?

必要なら、変更前のカレントフォルダ(作業フォルダ)を保存しておいて、VBA終了時に元に戻してはどうでしょうか?
お礼コメント
gucci1

お礼率 75% (41/54)

いろいろお手数をおかけして、申し訳ありませんでした。本当に助かりました。またよろしくお願いします。
投稿日時:2005/08/26 22:47
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ