• ベストアンサー

エクセルVBAで一つ上の階層を指定して保存したい

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

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.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"

suikaman
質問者

お礼

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

その他の回答 (5)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> Msgboxでは、確かに一つ上の階層が取得できています。しかし、そこに保存させるところができません。 #2 merlionXXです。 取得できれば保存は簡単だと思いますが・・・・。 ActiveWorkbook.SaveAs Filename:=Left(ActiveWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1) & "\test.xls"

suikaman
質問者

補足

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

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

>の前に上記の記述をしただけではいけないのでしょうか?。 だめです。 保存先を指定する場合は、ファイル名の前にパス名も一緒に指定します。 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"

suikaman
質問者

お礼

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

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

こんなのでも。 Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox FSO.getparentfoldername(ThisWorkbook.Path) Set FSO = Nothing

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

Sub test() MsgBox Left(ActiveWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\") - 1) End Sub で取得できました。

suikaman
質問者

補足

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

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>どう指定すればよいのでしょうか? 取得したパスから文字列関数を使って必用な文字列を取出します。 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

suikaman
質問者

補足

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

関連するQ&A

  • 保存場所を指定する(VBA)

    エクセルでVBAを使用し、業務書類を作っていますが、 書類を保存する際に、指定場所に自動で保存させたいと思っています。 現在使用しているものは、下記の通りですが、 これでは、元ファイルと同じ場所に保存されてしまうので 元ファイルを削除されてしまうなどの恐れがあります。 そこで、フォルダを作りそのフォルダに自動的に保存したいと 思っています。フォルダは元ファイルがある下に作りたいと思います。 宜しくお願いします。 下記現在のものです。 Sub 保存() タイトル = "確認" メッセージ = "ファイルを保存します。よろしいですか?" スタイル = vbYesNo + vbQuestion + vbDefaultButton1 + vbApplicationModal yesno = MsgBox(メッセージ, スタイル, タイトル) If yesno = vbYes Then Sheets("新築").Select パス = ActiveWorkbook.Path 別名 = Application.InputBox(prompt:="拡張子(.xls)は不要です", _ Title:="保存用のブック名を入力してください", Type:=2) ' 別名 = パス & "\" & 別名 & ".xls" Sheets(Array("見積新築")).Copy ActiveWindow.DisplayWorkbookTabs = False ActiveWorkbook.SaveAs Filename:=別名 ActiveWorkbook.Close MsgBox "書類を保存しました。", vbInformation, "保存完了" End If End Sub

  • VBAでのパスの取得

    使用アプリ:Exel2000 コーディングしたマクロをVBAProject(XLCALS.XLM)に保存してあります。 その中で Dim fpath As String fpath = ThisWorkbook.Path 若しくは fpath = ActiveWorkbook.Path でファイルパスを取得しようと思ったのですが、XLStartフォルダのパスが取得されてしまいます。 どうすれば現在開いているファイルパスを取得する事が出来るのでしょうか。

  • シンクライアントでのVBAによるファイル保存

    ExcelのテンプレートファイルにVBAマクロを記述しています。 VBAにより新しいブックを開き、データを作り込んだ後、テンプレートファイルが置かれているフォルダに保存するマクロを作成しました。 リッチクライアント上では問題なく動くのですが、シンクライアント上で実行すると、  ActiveWorkbook.SaveAs Filename:='フルパスのファイル名'  ※フルパスのファイル名は、"C:\folder\file.xlsx"というような形式になっています。 のところでエラーになってしまいます。 パス付きのファイル名について、作法があるようでしたらお教えいただけますか。 よろしくお願い致します。

  • Excel VBA カレントフォルダのひとつ上のフォルダを指定したい

    はじめて質問をさせていただきます。 ExcelのVBA初心者なのですが、既存のファイルに継ぎ足しで新規のファイルを作成しております関係上、カレントフォルダのひとつ上のフォルダを指定したいと考えております。 変数=thisworkbook.path のようにカレントフォルダの取得の仕方は分かったのですが、そこからひとつ上を指定する方法などはあるのでしょうか? よろしくお願いいたします。

  • エクセル・マクロ(VBA)で、指定範囲を保存したい。

    エクセルマクロ(VBA)で、セル範囲を指定してその指定した部分だけをファイルに保存したいのですが、どのようにしたらよろしいのでしょうか?

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

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

  • VBAを用いた場合のマクロの保存先について

    VBAを用いて作ったマクロの保存先は、どこかで設定できるのでしょうか。 これまで、何も考えずに保存していました。 しかし最近、マクロを記録→個人用ブックに保存した後は、変更しなければ自動的に個人ブックに保存されると知りました。 VBAで作ったマクロに関しても、このことは当てはまるのでしょうか。 当てはまるのなら、どこで保存先を設定できますか? よろしくお願いいたします。

  • VB6.0でエクセル保存する時の保存場所の指定。

    VB6.0からデータをエクセルに保存させようとしています。 保存する方法は、エクセルを開くのではなく、 ボタンを押したらそのまま自動で保存させるようにしています。 そしてその名前をつけて保存をさせる処理で、ファイルの保存場所を示す パスの指定で少々困っております。 EXEファイルがある位置をカレントとして同一フォルダ内にあるtestフォルダに 全てデータは保存したいと考えています。 絶対パスを固定で指定すればそこに保存できますが、それだと違うPC上で実行すると 動作しない危険性がありますので、相対パスで指定したいと思っています。 ですが、実行ファイルから"./test/test.xls"と指定してもパスのエラーとなり 保存できません。 しかし絶対パスの固定でフォルダを指定すると保存できます。 ws.Name = "C:\vb_test\test\test.xls" これをEXEファイルのある位置からの相対パスで指定するにはどうすればいいでしょうか?

  • 【VBA】フォルダ指定の方法【Excel2000】

    独学で学んでいるVBA初心者です。 Summary.xlsにLog.xlsの内容をコピーするマクロを作りたいと思っています。 しかしDataフォルダは一定の場所にあるわけではないので相対パスで指定したいと思っています。 いろいろ自分なりに調べて Workbooks.OpenText Filename:=ActiveWorkbook.Path & "\..\Log\Log.xls" と記述したのですがLog.xlsが見つかりませんとエラーがでてしまいます。 (図中のData,Summary,Logはフォルダ名です。) Summary.xlsを基準にした相対パスでLog.xlsを開きたい時にどう記述すればいいのか どなたかご教授下さい、お願いします。

  • エクセルVBAで指定場所にフォルダー作成

    エクセルのVBAマクロ機能を使い、 自動フォルダー作成&リンクするマクロを作成したのですが、 現在のマクロですと「A(仮名)」の中にフォルダーに作ってしまいますので 下記の様に階層で指定出来る様にしたいのですが、教えて頂けないでしょうか? 出来れば、そのままマクロ貼り付けで使える様にしたいので、 下記に途中までのマクロを編集して頂ければ助かります。 「A(仮名)」と言うフォルダーの中にエクセルファイルの管理表を入れ 「A」のフォルダーの中に「B(仮名)」と言うフォルダーを作り、 その中に管理台帳で自動作成されるフォルダーがつくられる様にしたい。 現在のマクロ Sub MakeHyLink() Dim wkStr As String If ActiveCell.Column <> 1 Then Exit Sub If ActiveCell.Value = "" Then MsgBox "アクティブセルは未入力、やり直し" Exit Sub End If wkStr = ThisWorkbook.path & "\" & ActiveCell.Value If Dir(wkStr, vbDirectory) = "" Then MsgBox "フォルダー:" & wkStr & vbLf & " を、作成します。" MkDir wkStr Else MsgBox "フォルダー:" & wkStr & vbLf & " は、存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr End Sub

専門家に質問してみよう