架空の映画のネタバレレビュー

お世話になります。
VBA初心者なりにマクロの自動記録などで作業しておりますが、自動記録でできない作業を一つ教えてください。
現在作業しているフォルダは、Activeworkbook.Pathなどで指定できますが、その一つ上の階層に保存したいという場合、どう指定すればよいのでしょうか? 自動保存だと"Documentos and Settinng~"などから始まるファイルパスになりますが、ファイルを保存するフォルダは各人によってまちまちですので、自分が保存したフォルダの一つ上という指定をしたいのです。そのような方法があれば教えてください。
よろしくお願いいたします。

A 回答 (6件)

回答番号:No.5 merlionXXです。



> プロシージャの呼び出しが不正と出ます。

それは、ActiveWorkbook.Path が取得できない、つまりまだ保存前の新規BOOKで実行したせいではないかと思います。
エラーを回避するようにしてみました。

If ActiveWorkbook.Path = "" Then
x = ""
Else
x = Left(ActiveWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1)
End If
ActiveWorkbook.SaveAs Filename:=x & "\test.xls"
    • good
    • 2
この回答へのお礼

なるほど、まだ保存前のBookじゃActiveWorkbook.Pathが取得できないはずですね。さすがのご指摘、ありがとうございます。
しかしエラー回避のコードでやってみましたが、X=""の時、testファイルはドライブの一番上の階層に保存されてしまいました。
そこで、最初に
ChDir Left(ActiveWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1)
でPathを取得しといてから作業するとうまくいきました。
わずか1行で取得できたので、こちらの記述を使用したいと思います。
おせわになりました。ありがとうございました。

お礼日時:2008/12/04 22:12

> Msgboxでは、確かに一つ上の階層が取得できています。

しかし、そこに保存させるところができません。

#2 merlionXXです。
取得できれば保存は簡単だと思いますが・・・・。

ActiveWorkbook.SaveAs Filename:=Left(ActiveWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1) & "\test.xls"

この回答への補足

んー、残念ながらうまくいきません。
プロシージャの呼び出しが不正と出ます。
何か、根本的な間違いをしているのでしょう。折角教えていただいたのに申し訳ないです。

補足日時:2008/12/03 20:32
    • good
    • 1

>の前に上記の記述をしただけではいけないのでしょうか?。



だめです。
保存先を指定する場合は、ファイル名の前にパス名も一緒に指定します。

Dim TmpPath As String
TmpPath = ThisWorkbook.Path
If InStrRev(TmpPath, "\") <= 3 Then
TmpPath = Left(TmpPath, 2)
Else
TmpPath = Left(TmpPath, InStrRev(TmpPath, "\"))
End If

ActiveWorkbook.SaveAs Filename:=TmpPath & "\test.xls"
    • good
    • 0
この回答へのお礼

たびたびのご回答ありがとうございました。
無事、目的のものができました。
自分でも作れるように、精進していきます。
本当にありがとうございました。

お礼日時:2008/12/03 20:32

こんなのでも。



Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.getparentfoldername(ThisWorkbook.Path)
Set FSO = Nothing
    • good
    • 0

Sub test()


MsgBox Left(ActiveWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1)
End Sub

で取得できました。

この回答への補足

早速のご回答ありがとうございます。
Msgboxでは、確かに一つ上の階層が取得できています。しかし、そこに保存させるところができません。
上記のあとに
ActiveWorkbook.SaveAs Filename:="test.xls", FileFormat _~
を書くだけではだめなんでしょうね。

補足日時:2008/12/02 22:23
    • good
    • 0

>どう指定すればよいのでしょうか?



取得したパスから文字列関数を使って必用な文字列を取出します。

Dim TmpPath As String
TmpPath = ThisWorkbook.Path
Debug.Print TmpPath
If InStrRev(TmpPath, "\") <= 3 Then
TmpPath = Left(TmpPath, 2)
Else
TmpPath = Left(TmpPath, InStrRev(TmpPath, "\"))
End If
Debug.Print TmpPath

この回答への補足

早速のご回答ありがとうございます。
試してみましたが、ドライブの最初の階層に保存されてしまいます。私が基本的なことが分かっていないからだと思いますが。
ActiveWorkbook.SaveAs Filename:="test.xls", FileFormat _
の前に上記の記述をしただけではいけないのでしょうか?。

補足日時:2008/12/02 22:20
    • good
    • 0

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

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


おすすめ情報

このQ&Aを見た人がよく見るQ&A