VBAを使ったエクセルテンプレート適用ツールを作成しているのですが
そのVBAのことで教えてください。
現在自作のフォーム上にあるテキストボックスにフルパスが入っているとします(添付図参照)。
*この前提は必須と考えてください。
次に作成ボタンをクリックすると
Step1 新しいブックが開かれ行幅や書式などが自動で調整されます。
Step2 ブックの保存ダイアログが自動で開きます。
ただし、保存ダイアログが開いた時点で自作フォーム中の
テキストボックスで指定したフルパスに移動しており、
且つ移動先のフォルダ名(<-注意!!フルパス名ではありません!!)と
同じ文字列をファイル名入力欄に自動で入力されるようにします。
ex) D:\MyProject\Project01\TaskA\にブックを作成し保存する場合、
保存ダイアログのファイル名欄にTaskAとだけ書く。
マクロ自体はここでストップし、これ以降はユーザーがそのファイルメモで
保存してよいかどうかを判断し、問題なければ手動でダイアログ上の「保存」ボタンを押します。
問題はStep2で、保存先のフォルダ名と同じ文字列を保存ダイアログのファイル名に記入するには
どのようなコードを書いたらよいでしょうか。
私自身としては下記の二案を考えているのですがそれぞれについて疑問があるので教えてください。
案1 作成ボタンを押した時点でテキストボックスに書かれているフルパスの文字列から
末尾にあるフォルダ名だけを取得して変数に代入し、これを保存ダイアログの
ファイル名欄に反映させる。
疑問:テキストボックスのValue値に書かれているフルパスを示す文字列から
末尾のフォルダ名だけを取得するためのコードは何と書けばよいのでしょうか?
案2 ブックの保存ダイアログが開いて保存先のパスに移動してから今保存ダイアログで
開いているフォルダ名を取得する。
疑問:今アクティブになっているブックが保存されているフォルダ名だけを取得する
方法なら確かあったような気がしています。
しかし今保存ダイアログで表示されているフォルダ名を取得するコードは何と
書けばよいのでしょうか?
そもそもそういったコードや操作自体VBAにあるのでしょうか?
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんばんは。
>そもそもそういったコードや操作自体VBAにあるのでしょうか?
あるというよりも、ゴリ押しという感じですね。
あまり自然なコードとは言えませんね。なぜかというと、
>保存ダイアログのファイル名欄にTaskAとだけ書く。
ここが特殊です。ミスタイプした時は、エラーを出すか、新たにフォルダーを作るかどちらかになってしまいます。
だから、私などは、
Application.Dialogs(xlDialogSaveAs).Show
Application.GetSaveAsFilename
と、使うのが通例で、あまり凝った方法はしません。
私は、フォルダを選ぶために、こんなものを使っていました。
昔作ったものが、Windows7 だと違うコードになりましたので、ちょっと変形になってしまいました。
フォルダーを選ばせるダイアログを出すものです。ただし、フォルダーの数が多すぎると、使いづらいです。
'//
Dim objShell As Object
Dim wsShell As Object
Dim wsSysEnv As Object
Dim User As String
Dim objFolder As Object
Set objShell = CreateObject("Shell.Application")
Set wsShell = CreateObject("WScript.Shell")
Set wsSysEnv = wsShell.Environment("PROCESS")
User = wsSysEnv("USERNAME")
Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", _
0, "C:\Users\" & User & "\My Documents\")
MsgBox objFolder.Self.Path
'//
最後の、「"C:\Users\" & User & "\My Documents\"」が、ベース(基点)となるわけです。
---
>今アクティブになっているブックが保存されているフォルダ名
myPath = CurDir()
「今保存ダイアログで表示されているフォルダ名を取得するコードは何と書けばよいのでしょうか?」というなら、
Filename = "C:\Users\TestUser\Documents\Text\test2014-04-29.txt"
myPath = Left(Filename, InStrRev(Filename, "\"))
'myPath は、"C:\Users\TestUser\Documents\Text\" と取れる
など、いくつか方法はあります。
No.1
- 回答日時:
ファイル名を含むパスからフォルダパスを取得するには
Dir関数でファイル名を取得してから元のパスからファイル名を消せば手軽にできます。
http://officetanaka.net/excel/vba/tips/tips78.htm
以下サンプルです
'Dim buf() As Variant
file_path = "U:\テストフォルダ\テストファイル.txt"
'置換でフォルダパスを取得
Debug.Print Replace(file_path, Dir(file_path), "")
'1文字ずつチェック
For i = Len(file_path) To 1 Step -1
If Mid(file_path, i, 1) = "\" Then Debug.Print Left(file_path, i): Exit For
Next i
Dirは存在するファイルのファイル名を取得するため、実際にファイルが無い場合はほかの方法を使ってください
ほかにもsplitで[\]で区切った後、最後の要素を外して結合し直すとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) Excel VBA 同じ名前のフォルダがあれば作成したブックを格納するマクロをつくりたい 2 2023/01/16 16:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
A列に記載されているフォルダ...
-
Eclipse
-
エクセルVBAで一つ上の階層...
-
パスワード保護されたExcelファ...
-
【VBA】ExcelマクロでCSVファイ...
-
【Excel VBA】Power Qurry のソ...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
AccessからExcel最小化
-
VBAで、VBのapp.pathと同じ機能...
-
Excel VBAでテキストファイルを...
-
初心者powershellのPS1ファイル...
-
VBAとResgen.exeを使用して、re...
-
OleDbDataAdapterのエラー
-
fopenでのパス指定
-
1行単位のデータをテキストファ...
-
SaveAsの保存先について
-
フォルダ ショートカット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
初心者powershellのPS1ファイル...
-
【VB.NET】App.configにファイ...
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルのマクロで特定フォル...
-
VBA★PDFをPDFアプリで印刷し...
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
ExcelVBAの使い方 ¥の使い方...
-
Windows PowerShellでscoopコマ...
-
開いているファイルを削除し、...
-
VBS パスに変数を入れたい
-
C#でのProcess.Startと変数path
-
コマンドプロンプトのコピー関...
-
EXCEL(VBA)で指定フォルダ内の...
-
実行ファイルのパスを取得したい
おすすめ情報