[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイル保存時のダイヤログ非表示、ファイル保存先を変えるには』(たまま)
すいません、下記マクロを記述しているのですが、追加で
1.「発注書一覧(イメージ).xlsx」の保存先は自分のダウンロードフォルダ「C:\Users\1111\Downloads」としたい
2.また保存時、名前を付けて保存のダイヤログが出力するが、これを表示しないようにしたい
→Application.DisplayAlerts = Falseでいけると思っていたのですが、ダイヤログが表示される
※私がまだ勉強不足で使い方を理解できていないかと。。
どうか、ご助力いただけますでしょうか。
よろしくお願い致します。
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
' 特定シートを別ファイルで名前を付けて保存する
' 別ファイルに出力するシートを選択 Sheets("発注書一覧(イメージ)").Select
Application.DisplayAlerts = False ' 名前を付けて保存するためにダイアログ表示 Save_File = Application.GetSaveAsFilename(InitialFileName:="発注書一覧(イメージ)", _ FileFilter:="Excelファイル,*.xlsx,発注書一覧(イメージ),*.*")
'ファイル名がFalseであれば保存せず終了
If Save_File = "False" Then
Exit Sub
Else
' シートのコピー、ファイル保存 Sheets("発注書一覧(イメージ)").Copy ActiveWorkbook.SaveAs Filename:=Save_File, FileFormat:=xlOpenXMLWorkbook
' ファイルを閉じる ActiveWorkbook.Close
End If
Application.DisplayAlerts = True
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
Private Sub Workbook_AfterSave(ByVal Success As Boolean) Stop 'ブレークポイントの代わり Dim Save_File As String
'ダイアログで保存する(フォルダと)ファイル名を指定してもらう Save_File = Application.GetSaveAsFilename( _ InitialFileName:="発注書一覧(イメージ)", _ FileFilter:="Excelファイル,*.xlsx,発注書一覧(イメージ),*.*")
'ファイル名が指定されなかった(Save_File ="False")場合以外のみ処理 If Save_File <> "False" Then Sheets("発注書一覧(イメージ)").Copy
With Workbooks(Workbooks.Count) .SaveAs Filename:=Save_File, FileFormat:=xlOpenXMLWorkbook .Close False End With End If End Sub
■2
>保存先は〜「C:\Users\1111\Downloads」としたい
ダイアログでそのフォルダを選べばよいだけだと思いますが、それではダメなんですか?
■3
>また保存時、名前を付けて保存のダイヤログが出力するが、これを表示しないようにしたい
おっしゃってる意味が理解できません。
とりあえず、【ブレークポイント】を設定のうえ【ステップ実行】して思うとおりの動作になっているか確認してみてはどうでしょうか?
「Workbook_AfterSave」イベントを使うのは、意図したものですよね? おっしゃる「保存のダイヤログ」は自ブック保存用なのではないかと思いますが・・・・
(もこな2) 2023/04/26(水) 12:19:44
早速のご連絡ありがとうございます。
>■1
すいません、WEB上からの切り貼りが分かってしまいました。
見る人から見ると、汚い感じでしたか。
勉強し、キレイなコードが記述できるようなっていきたいと思います。
>■2
ダイヤログが出ると、変に操作されると、思ったところでないところに保存される可能性もあり
ある意味、強制的に保存場所へバックアップとして保存するように考えていました。
もこな2さんのコードを参考に
.SaveAs Filename:="C:\Users\1111\Downloads\発注書一覧(イメージ)" & ".xlsx"
としてみて、動きそうなのは確認できました。コード的にいかがでしょうか?
>■3
私の説明が足らずで申し訳ございません。
このマクロができれば、これを他者にも展開予定です。
また、発注書一覧のエクセル内には他シートが複数ございます。
■2にもかかりますが、
保存時、(言葉が悪いですが)裏で更新している発注書一覧と別に"C:\Users\1111\Downloads\"にも保存しようとしています。
.GetSaveAsFilenameが名前を付けて保存のダイヤログのようですが、単純に
Save_File = "発注書一覧(イメージ)"
はいかがでしょうか。
→試行的には思った動きになっているように見えますが、もこな2さんから見ると
私の知識足らずのところをご指摘いただければ幸いです。
よろしくお願い致します。
(たまま) 2023/04/26(水) 13:07:03
・コードとは関係なく、この掲示板の特徴として、先頭に半角スペースを1文字以上いれると、ちょっと小さめの文字で 改行なしになるのでその対応
・一部インデントがついてないのでその修正
・変数の宣言がないので追加
・不要なSelectがあったので削除
・ActiveWorkbookに依存するコードになっていたので変更(好みの話です)
・IF文のThen節とElse節を入れ替え(入替後のElse節はあまり意味がないので削除)
ということをしました。
■5
>ダイヤログが出ると、変に操作されると、思ったところでないところに保存される可能性もあり
仰ってることが理解できません。【Application.GetSaveAsFilename】を仕掛けたのは貴方ですよね?
要は、↓で"C:\Users\1111\Downloads"を選べばいいのでは?と言ったつもりです。
Sub 研究01() Dim Save_File As String Save_File = Application.GetSaveAsFilename(InitialFileName:="発注書一覧(イメージ)", FileFilter:="Excelファイル,*.xlsx,発注書一覧(イメージ),*.*") MsgBox "【Save_File】の中身は以下の通りです" & vbLf & vbLf & Save_File End Sub
>保存時、裏で更新している発注書一覧と別に"C:\Users\1111\Downloads\"にも保存しようとしています。
よくわかりませんが、バックアップ的に別途保存をしたいということならば、ファイルパスをダイアログで聞かなければよいのでは?
コードにするとこんな感じです。
Private Sub Workbook_AfterSave(ByVal Success As Boolean) Stop 'ブレークポイントの代わり
Worksheets("発注書一覧(イメージ)").Copy With Workbooks(Workbooks.Count) .SaveAs Filename:=Environ("UserProfile") & "\Downloads\【バックアップ】" & Format(Now, "YYYYMMDD_hhmm_ss"), _ FileFormat:=xlOpenXMLWorkbook .Close False End With End Sub
■6
>試行的には思った動きになっているように見えます
コード全体の提示がないので何とも言えませんが、問題ないのであればよろしいのではないでしょうか。
(もこな2) 2023/04/26(水) 19:18:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.