
エクセルのシートをCSVファイルに保存するため以下のようなマクロを書きました。
Sub Macro1()
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs FileName:="C:\WINDOWS\デスクトップ\Book1.csv", FileFormat _
:=xlCSV, CreateBackup:=False
ActiveWindow.Close
ThisWorkbook.Activate
End Sub
一応これで保存できるのですが、自動記録でやったためファイルの名前が出てしまいました。
この部分をわたし以外の誰でも任意の名前をつけ、任意のフォルダーに保存できるように書き換えたいのです。
どのように記述すれば良いかお教えください。お願いします。
No.4ベストアンサー
- 回答日時:
>Application.Dialogs(xlDialogSaveAs).Show ARG2:=6
これはExcelの組み込みダイアログを表示するためのものです。
GetSaveAsFilenameと表示されるものは同じものですが、使い方が若干違います。
Dialogsの場合は、文字通り「名前をつけて保存ダイアログを開く」のが目的です。
つまりメニューの「ファイル-名前をつけて保存...」を選択する操作を、マクロで再現するときに使います。
この場合、ユーザーが何というファイル名を入力したか、把握することはできません。
それにたいしてGetSaveAsFilenameは、「ファイル名を取得する」のが目的です。
ダイアログ自体は同じものを表示しますが、ここで表示される「印刷」「キャンセル」のボタンは、ダミーです。
(つまり、
ファイル名を入力して「保存」ボタンを押しても、
実際に保存するプログラムが書かれていない限り、保存されません。)
処理を自分で各必要がありますが、より柔軟な処理をすることができます。
(独自の警告メッセージを組み込むなど。)
保存の処理の仕方をより細かくプログラムするときに使うものだと思います。
No.3
- 回答日時:
#2です。
>同じファイル名が会った場合、上書きいいえ、またはキャンセルを選ぶとエラーになってしまいます。
そうですね。前回の回答にもそれは書きました。
>これはアラートを出なくするのもまずいのでなんとかしたいのです
うーむ。そうくると思いました。^^;
「ご自分で研究してみてください」、と書いたつもりなんですが。。。
上書き保存の直前にチェックをかけるからマズいのです。
こういう場合は、ファイル名を取得できたらすぐに、同名のファイルがないかチェックをかけます。
「上書きしてもいい」というユーザーの意志がはっきりしてから、
「ブックの追加」や「コピペ」などの処理を開始した方が、
「上書き保存しない」をユーザーが選択したときに、
処理が始まる前に中止できますので、無駄が少ないです。
そうすれば、保存処理のときの確認は不要になりますので、
DisplayAlerts = False
を効かせて、有無を言わさず「保存」でOKです。
Sub Macro1()
Dim varFileName As Variant
Dim myYN As Boolean
'ファイル名をつけさせる
varFileName = Application.GetSaveAsFilename(InitialFileName:="新しいCSVファイル", FileFilter:="CSVファイル (*.csv),*.csv")
If varFileName = False Then Exit Sub
'同名ファイルのチェック
If Dir(varFileName) <> "" Then '同名ファイルが存在しない場合は、Dir関数で""が返る
'上書きの警告を表示する
myYN = MsgBox("同名のファイルがすでに存在します。" & Chr(13) & _
"上書きしてもよろしいですか?", vbYesNo + vbExclamation)
If myYN = vbNo Then Exit Sub
End If
'処理
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
'Excelが表示する上書き警告画面を抑止する
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=varFileName, FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
ThisWorkbook.Activate
Application.DisplayAlerts = True
End Sub
何度もありがとうございます!
完璧です!
実はわたしもまっている間、ネットをいろいろ検索してこんなのをみつけてやってみました。
Sub Macro1()
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
Application.Dialogs(xlDialogSaveAs).Show ARG2:=6 '(.xlsは1だが.csvは6のようでした )
Application.DisplayAlerts = False
ActiveWindow.Close
ThisWorkbook.Activate
Application.DisplayAlerts = True
End Sub
これでも同じですよね?
No.2
- 回答日時:
質問にあるコードをできるだけ生かす方向で、
「名前をつけて保存」する機能を追加してみました。
同じ名前のファイルなどがあったときの「エラー処理」などをまったく組み込んでいないので、
このまま使うというわけにはいかないでしょうが、
そのへんは、ご自分で研究されてみてください。
Sub Macro1()
Dim varFileName As Variant
'保存するファイル名をつけさせる
varFileName = Application.GetSaveAsFilename(InitialFileName:="新しいCSVファイル", FileFilter:="CSVファイル (*.csv),*.csv")
If varFileName = False Then Exit Sub
'ほとんど質問のコードを使いました。
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
'ここで、さきほど取得したファイル名(varFileName)を使いました。
ActiveWorkbook.SaveAs _
Filename:=varFileName, FileFormat:=xlCSV, CreateBackup:=False
'ふたたび、質問のコードを使いました。
ActiveWindow.Close
ThisWorkbook.Activate
End Sub
この回答への補足
ありがとうございますたすかりました。
最後に再度、保存するかどうか聞いてくるところは以下の通りとめられましたが、同じファイル名が会った場合、上書きいいえ、またはキャンセルを選ぶとエラーになってしまいます。これはアラートを出なくするのもまずいのでなんとかしたいのです。
なんとかよろしくお願いいたします。すみません。
Sub Macro1()
Dim varFileName As Variant
varFileName = Application.GetSaveAsFilename(InitialFileName:="新しいCSVファイル", FileFilter:="CSVファイル (*.csv),*.csv")
If varFileName = False Then Exit Sub
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs _
FileName:=varFileName, FileFormat:=xlCSV, CreateBackup:=False
'ふたたび、保存を聞いてくるのをとめた。
Application.DisplayAlerts = False
ActiveWindow.Close
ThisWorkbook.Activate
Application.DisplayAlerts = True
End Sub
No.1
- 回答日時:
こんにちは。
maruru01です。InputBox関数で入力を促すか、どこかのセルに入力してそれを変数に代入すればいいと思います。
Sub Macro1()
Dim tempFolder As String
Dim tempFileName As String
'フォルダ名とファイル名を取得して変数に格納
tempFolder = フォルダ名
tempFileName = ファイル名
(途中省略)
ActiveWorkbook.SaveAs FileName:=tempFolder & tempFileName, FileFormat _
:=xlCSV, CreateBackup:=False
(途中省略)
End Sub
こんな感じです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFを1ページ目から表示させた...
-
CSVファイルで誤って上書き保存...
-
Illustratorでファイルを上書き...
-
Wordの容量が繰り返し保存する...
-
■困っています・・Open O...
-
Excelでファイル開いただけで更...
-
Excel 取り込んだDATファイル...
-
Thunderbirdで受信したメールを...
-
Googleドキュメントのpdf文書に...
-
ファイルの更新日時が変わらない。
-
エクセルを閉じるとき勝手に上...
-
EXCEL のファイルをRTFフ...
-
拡張子・WPXで保存したファ...
-
officeの自動保存について教え...
-
x264guiEx.iniについて。
-
保存されたファイルアイコンが変
-
Cad図面を USBメモリに保存で...
-
イラレのアイコンがPDFに変わる
-
ダウンロードしたPDFファイ...
-
Wordの更新日時が勝手に変更される
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PDFを1ページ目から表示させた...
-
CSVファイルで誤って上書き保存...
-
Illustratorでファイルを上書き...
-
Excelでファイル開いただけで更...
-
Thunderbirdで受信したメールを...
-
Wordの容量が繰り返し保存する...
-
OpenOffice calcで作成したファ...
-
ファイルの更新日時が変わらない。
-
EXCEL のファイルをRTFフ...
-
WORDで文章を保存すると~t...
-
テキストボックスに直接入力が...
-
Wordの更新日時が勝手に変更される
-
アフターエフェクトのAMEファイ...
-
Excel2016タスクバーの順番につ...
-
エクセルで一定時間ごとにバッ...
-
EXCEL2010で名前を付けて保存の...
-
Googleドキュメントのpdf文書に...
-
ツイッターのダイレクトメッセ...
-
Word差し込み後にセクション別...
-
.rtfファイルをWordで編集した...
おすすめ情報