プロが教えるわが家の防犯対策術!

お世話になります。
苦労しながらもエクセル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

A 回答 (5件)

こんにちは。



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

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

なお、読み違えていましたら、申し訳ありません。
    • good
    • 1
この回答へのお礼

どうもありがとうございました。おかげさまで解決です。本当に助かりました。またよろしくお願いします。

お礼日時:2005/08/26 22:44

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



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

こんにちは。

KenKen_SP です。

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

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

ThisWorkbook.Path

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

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

このどちらかで対応できませんか?
    • good
    • 0
この回答へのお礼

どうもありがとうございました。初心者なもので、わかりにくいこともあったかと思いますが、親切に教えていただきまして、ありがとうございました。

お礼日時:2005/08/26 22:47

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




'参考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

参考URL:http://www2s.biglobe.ne.jp/~iryo/vba/VBA14.html# …
    • good
    • 0

カレントフォルダを変更してはどうでしょうか?


ActiveWorkbook.Pathからドライブ名とパス名をそれぞれ拾って、ChDrive と ChDir で変更すればよいのでは?

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

参考URL:http://www2s.biglobe.ne.jp/~iryo/vba/VBA14.html# …
    • good
    • 0
この回答へのお礼

いろいろお手数をおかけして、申し訳ありませんでした。本当に助かりました。またよろしくお願いします。

お礼日時:2005/08/26 22:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています