- ベストアンサー
保存先のフォルダ名を指定したいとき
希望する事は ファイルを保存するフォルダを指定し、 ファイル名(インプットボックスをつかって 変数として入力させたもの)をつけて保存したい。 フォルダは事前に作成してあるが 保存したい場所はそのときによってまちまちなので 保存するたびにフォルダを指定したい。 具体的には C:\入力済みデータ\【○○】としたいのですが この【○○】の部分を、そのときに応じて選択するにはどうすればいいでしょうか。 または、浅知恵で Application.Dialogs(xlDialogSaveAs).Show arg1:="c:\" というかたちでダイアログボックスを出すまでは出来たのですが ファイル名は空欄になってしまいますよね。 InputBoxでファイル名を変数として入力させたものを 上のファイル名に入れることは可能ですか? どうぞよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
これでできませんか? まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。 Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。 Sub hoge() Dim initPath As String initPath = "C:\入力済みデータ" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls") If Not (saveFilePath = "False") Then ThisWorkbook.SaveAs saveFilePath End If End Sub "ファイル名を指定して保存" のダイアログが表示され、初期フォルダとして C:\入力済みデータ が開かれています。 ファイル名は何も指定されていません。 ダイアログの中には当然、先に作っておいたいくつかのサブフォルダが一覧表示されているので、ユーザーは 1) サブフォルダを選択する。 2) ファイル名を入力する。 3) [保存] ボタンをクリックする。 というアクションを行う。 私のところではダイアログ表示時の初期フォルダとして My Documents ではなく、きちんと C:\入力済みデータ が開かれましたよ。
その他の回答 (5)
- dsuekichi
- ベストアンサー率64% (171/265)
要するに、ExcelVBAで、フォルダを指定できる画面を表示できれば良いんですよね・・・ 「Access2003 VBA でフォルダ参照ダイアログについて」 (http://okwave.jp/qa3341236.html) では駄目?
- Hayashi_Trek
- ベストアンサー率44% (366/818)
VB6もですがVBAではフォルダだけを選択させるのは、大変なんです。 ファイル名の入力にInputBoxを使ってますが 代わりにフォームにして ファイル名とフォルダ名を入力させてはどうでしょう? 使用するコントロールは ファイル名:テクストボックス フォルダ名:リストボックスまたはコンボボックス とすれば、ファイル名は自由に入力できて、かつフォルダ名は規定のものから選択するように出来ます。
- temtecomai2
- ベストアンサー率61% (656/1071)
> の【○○】の部分に > 保存指定フォルダ = InputBox("保存するフォルダ名を半角で入力してください ", "保存フォルダ入力") すみません。ユーザーにはどこまでさせたくて、システム側はどこまでしてあげるのかの境界線がわからなくなりました。。。 ファイル名はユーザーに指定させたくなくて、その一個上のフォルダ名だけを指定させたいってこと? つまり、c:\aaa\bbb\ccc\ddd.xls のうち ccc の名前だけをユーザーに指定させたい? Dim initPath As String initPath = "C:\入力済みデータ\hoge.xls" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFileName(initPath, "Excel File (*.xls),*.xls") ThisWorkbook.SaveAs saveFilePath 上記 2行目。 一階層減らして、代わりにファイル名を固定にしました。 これを実行して名前を付けて保存ダイアログを開いてみてください。 初期パスとして一階層上の "C:\入力済みデータ\" が開かれていて、そのサブフォルダ一覧がダイアログに表示されています。 更に、ファイル名も入力済みの状態です。 あとは質問者さんが言うように InputBox でユーザーに入力させたいフォルダ名をこのサブフォルダ一覧の中からマウスのダブルクリックで開いて [保存] ボタンを押すだけ。 操作手順的にも一般の Windows アプリの手順と同じなのでユーザーが混乱する事もないかと。
補足
ありがとうございます。 やってみましたが、保存先として開いたのはmydocumentになってしまい ファイル名はhoge.xlsと出てしまうのですが… もう一度整理してみます。 手順としては データを入力したあと (1)インプットボックスでファイル名(↓ではファイルナンバーになっていますが…)を入力させる ファイルナンバー = InputBox("ファイルナンバーを半角で入力してください ", "ファイルナンバー入力") (2)保存する場所を選択させる C:\入力済みデータ…この下には10-01、10-02などのフォルダがすでにあるので、この中から選択させたい 選択が出来ないなら、インプットボックスでフォルダ名を指定させても可 保存指定フォルダ = InputBox("保存指定フォルダを半角で入力してください ", "保存指定フォルダ入力"…などで なので、ファイル名を固定されると困ってしまうのです。 もう、どうしたらいいかわからなくなりました(泣)
- imogasi
- ベストアンサー率27% (4737/17069)
>Application.Dialogs(xlDialogSaveAs).Show arg1:="c:\" というかたちでダイアログボックスを出すまでは出来たのですが ファイル名は空欄になってしまいますよね。 その空欄にファイル名を入れるのではないですか。 「保存先」に下記例では「新しいフォルダ」に限定され、そのフォルダのファイルがその下の枠内に表示されている。 Sub test01() Application.Dialogs(xlDialogSaveAs).Show arg1:="C:\Documents and Settings\xxxx\デスクトップ\新しいフォルダ" End Sub ーーー もっと、ファイル名が例えば、fff○○の○○だけ入力したいのなら Sub test01() Application.Dialogs(xlDialogSaveAs).Show arg1:="C:\Documents and Settings\OTO\デスクトップ\新しいフォルダ\fff" End Sub とすれば、「ファイル名」欄に、fffが入って入力待機状態になります。
補足
さっそくのご教示ありがとうございます。 やってみたのですが、思ったようにできませんでした。 もっと、ファイル名が例えば、fff○○の○○だけ入力したいのなら Sub test01() Application.Dialogs(xlDialogSaveAs).Show arg1:="C:\Documents and Settings\OTO\デスクトップ\新しいフォルダ\fff" End Sub とすれば、「ファイル名」欄に、fffが入って入力待機状態になります。 ↑の「fff」の部分を、 ファイルナンバー = InputBox("ファイルナンバーを半角で入力してください ", "ファイルナンバー入力") という形で入力させた値にしたいのですが… これだと、ファイル名欄に"ファイルナンバー"とテキストが入ってしまうのです。
- temtecomai2
- ベストアンサー率61% (656/1071)
InputBox を使う事が希望内容に入ってますが、使わなくちゃダメですか? 通常の 「名前を付けて保存」 ダイアログを使っちゃダメですか? Dim initPath As String initPath = "C:\入力済みデータ\【○○】\" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFileName(initPath, "Excel File (*.xls),*.xls") ThisWorkbook.SaveAs saveFilePath 最後の ThisWorkbook は保存対象のブックに合わせて適宜変更。
補足
さっそくのご教示ありがとうございます。 Dim initPath As String initPath = "C:\入力済みデータ\【○○】\" Dim saveFilePath As String saveFilePath = Application.GetSaveAsFileName(initPath, "Excel File (*.xls),*.xls") ThisWorkbook.SaveAs saveFilePath の【○○】の部分に 保存指定フォルダ = InputBox("保存するフォルダ名を半角で入力してください ", "保存フォルダ入力") という形で入力させた値を入れるにはどうしたらいいでしょうか…
お礼
いいヒントをいただいて、自己解決いたしました。 大変参考になりました。 ありがとうございます。
補足
いろいろとありがとうございます。 言葉足らずで申し訳ないのですが インプットボックスで入力させたファイル名は 一度「ファイル集計」シートの「セルB2」に格納しています。 このデータは ファイルナンバー = Range("B2")として ChDir "C:\入力済みデータ" ActiveWorkbook.SaveAs Filename:=ファイルナンバー & ".xls" のように一度入力済みデータフォルダに保存します。 ただし、入力済みデータフォルダに保存させようとしたときに、 もし同名のファイルが入力済みデータフォルダ存在していた場合、 サブナンバーをつけるようにしているのです。 (たとえば123-456というファイルがすでに入力済みフォルダに存在していて また123-456というファイル名で保存しようとした場合 「セルB2」の値を123-456-1という値に変え、123-456-1というファイル名で保存させる) 方法は以下のような感じです。(他にいいやり方があるかも知れませんが汗) Sub ファイル検索() Dim i As Integer Dim ファイルナンバー As String Sheets("ファイル集計").Select ファイルナンバー = Range("B2") With Application.FileSearch .LookIn = "C:\入力済みデータ" .SearchSubFolders = False .Filename = ファイルナンバー & "*.xls" .FileType = msoFileTypeExcelWorkbooks If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then MsgBox ("サブナンバーに" & .FoundFiles.Count & " をつけて保存します") Sheets("ファイル集計").Select Range("B2") = ファイルナンバー & "-" & .FoundFiles.Count End If End With End Sub 無事に入力済みデータフォルダに保存されたあと、 同じファイルを、もうひとつ納品用のフォルダに保存したいのです。 入力済みデータフォルダには、前述の理由で、以前入力したデータも 蓄積していかなければなりません。 (サブナンバーをつけることが出来無いので) ですが、たとえば10月に入力した部分だけを納品したいとき 2007-10というようなフォルダにまとめて納品したいというのが希望です。 ですから、2007-10というフォルダを作り、そこに保存をしたいのです。 教えていただいたように 保存する際にファイル名を入力させたのでは サブナンバーがつかないし、ファイルのB2セルにもファイル名を反映できないのではないかと思うのですが…