エクセル2016で
下記マクロで指定範囲をCSVで出力するようにしているのですが
名前を付けて保存の画面が表示されたときに
ファイル名の欄に作業中のファイル名が表示されません。
エクセル2010では表示されてたのですが2016ではできなくなりました。
修正案を教えていただけないでしょうか。
よろしくお願いいたします。
Sub CSV()
Dim myRng As Range, myFileName As String
Set myRng = Range("A:A,B:B,C:C")
If myRng Is Nothing Then Exit Sub
myFileName = Application.GetSaveAsFilename(FileFilter:="CSVファイル (*.csv,*.csv")
If myFileName = "False" Then Exit Sub
Application.ScreenUpdating = False
With Worksheets.Add
myRng.Copy .Cells(1, 1)
.Move
End With
With ActiveWorkbook
.SaveAs Filename:=myFileName, FileFormat:=xlCSV
.Close False
End With
Application.ScreenUpdating = True
Set myRng = Nothing
End Sub
No.4ベストアンサー
- 回答日時:
>作業中のファイル名が表示されませんでした。
>エクセル2010では問題ないので、やはりバグなのでしょうか?
>また何かお気付きされましたら教えてください。
ここの掲示板で、Excel 2013以降で再現可能なバグらしきものに出会うことが増えているように思います。SDI(Single Document Interface) せいなのでしょうか。Excel 2010 は、なかなか手放すことができません。
・Application.Dialogs(xlDialogSaveAs).Show , 6
これで表示は出るにしても、古いダイアログでファイル名を単独では取得できないので、あまりお勧めできません。
No.3のコードで、以下の部分にブレークポイントをつけて、bkNameの変数がどうなっているか調べることはできますか?
もし、ご存知でしたら、以下は無視してください。
ブレークポイントは、VBA Editor の上部のデバックメニューか、または、左端の該当する行の枠の部分をワンクリックすると、●が付きます。それで実行すると、その部分で止まります。(添付画像)
myFileName = Application.GetSaveAsFilename(bkName, "CSVファイル (*.csv),*.csv")
そこで、ローカルウィンドウ(表示メニューの中)で、変数のbkNameが取れているかどうかを調べます。それで確認したら、「F8} を押し、実際のダイアログを出します。
変数で取得して も、ダイアログでファイル名が出ないとしたら、別案のFileDialogを提示します。前回のものを入れ替えてみました。(以下は、一部、拡張子を取る部分が無駄があります。また、Excel2016以外では試していませんので、.FilterIndex =16 の部分が、下位バージョンで変わるはずです)
'//
Sub SampleCSV2()
Dim myRng As Range
Dim myFileName As String
Dim bkName As String, i As Long
bkName = ActiveWorkbook.Name
i = InStrRev(bkName, ".")
If i > 0 Then
bkName = Left(bkName, i - 1) '拡張子を取る
End If
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
'Application.ScreenUpdating = False 'ないほうが良いかもしれない。
With Worksheets.Add
myRng.Copy
.Cells(1, 1).PasteSpecial (xlPasteValues) 'ボタンオブジェクトをコピーしないようにする。
.Move 'シートの移動
End With
Application.CutCopyMode = False 'コピーモードを終了
'===========入れ替えしました=======
With Application.FileDialog(msoFileDialogSaveAs)
.InitialFileName = bkName
.FilterIndex = 16 '"*.csv"
If .Show = -1 Then
myFileName = .SelectedItems(1)
Else
ActiveWorkbook.Close False '途中でやめた時、ブックを捨てる
Exit Sub
End If
End With
'===========
With ActiveWorkbook
On Error Resume Next 'ファイル名上書きをキャンセル等した時のため
.SaveAs Filename:=myFileName, FileFormat:=xlCSV
On Error GoTo 0
.Close False
End With
'Application.ScreenUpdating = True
Set myRng = Nothing
End Sub
'//
画像はデバッグの検査
回答ありがとうございます。
No.3のコードで変数のbkNameは取れてました。
そのまま何回か実行してみましたが、問題なく表示されるようになりました。
色々とありがとうございました。
No.3
- 回答日時:
こんばんは。
5~6時間開いたままのExcelのファイルで再びやってみたら、どうやってもて出てこなくなってしまいました。これはバグの一種ではないでしょうか。
Application.Dialogs(xlDialogSaveAs).Show , 6
さらに、代用でこの方法でやっていたら、GetSaveAsFilename が、再び出てきましたね。一体どうなっているのか分かりませんが、一つの想像としては、GetSaveAsFilename から後の手順が多いせいなのかもしれないと思いました。
ご質問者のwa-i-waiさんには、以下は問題解決には直結しないので、不本意かもしれませんが、私の想像の範囲から、書き直してみました。もちろん、元のご質問に出たコードは、何も問題がないと思います。
'//
Sub SampleCSV()
Dim myRng As Range
Dim myFileName As String
Dim myFleName As String
Dim bkName As String, i As long
bkName = ActiveWorkbook.Name
i = InStrRev(bkName, ".")
If i > 0 Then
bkName = Left(bkName, i - 1) '拡張子を取る
End If
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
'Application.ScreenUpdating = False 'ないほうが良いかもしれない。
With Worksheets.Add
myRng.Copy
.Cells(1, 1).PasteSpecial (xlPasteValues) 'ボタンオブジェクトをコピーしないようにする。
.Move 'シートの移動
End With
Application.CutCopyMode = False 'コピーモードを終了
myFileName = Application.GetSaveAsFilename(bkName, "CSVファイル (*.csv),*.csv")
If myFileName = "False" Then
ActiveWorkbook.Close False '途中でやめた時、ブックを捨てる
Exit Sub
End If
With ActiveWorkbook
On Error Resume Next 'ファイル名上書きをキャンセル等した時のため
.SaveAs Filename:=myFileName, FileFormat:=xlCSV
On Error GoTo 0
.Close False
End With
'Application.ScreenUpdating = True
Set myRng =Nothing
End Sub
回答ありがとうございます。
朝一番で頂いたコードで実行してみたのですが
名前を付けて保存の画面でファイル名の欄に
作業中のファイル名が表示されませんでした。
エクセル2010では問題ないので、やはりバグなのでしょうか?
また何かお気付きされましたら教えてください。
よろしくお願いいたします。
No.2
- 回答日時:
こちらも、Excel 2016で試しています。
前回直した3行を、以下に換えて試してみてください。
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
myFileName = Application.GetSaveAsFilename(, FileFilter:="CSVファイル (*.csv),*.csv")
回答ありがとうございます。
前回直した3行を変更してみましたが、
名前を付けて保存の画面でファイル名の欄に
作業中のファイル名が表示されませんでした。
現状下記なのですが、違ってましたら教えてください。
よろしくお願いいたします。
Sub 全角CSV()
Dim Acbk As String
Acbk = ActiveWorkbook.Name
Acbk = Left(Acbk, InStrRev(Acbk, ".") - 1)
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
myFileName = Application.GetSaveAsFilename(, FileFilter:="CSVファイル (*.csv),*.csv")
If myFileName = "False" Then Exit Sub
Application.ScreenUpdating = False
With Worksheets.Add
myRng.Copy .Cells(1, 1)
.Move
End With
With ActiveWorkbook
.SaveAs Filename:=myFileName, FileFormat:=xlCSV
.Close False
End With
Application.ScreenUpdating = True
Set myRng = Nothing
End Sub
No.1
- 回答日時:
ご質問は、この部分のことでしょうか?
myFileName = Application.GetSaveAsFilename(FileFilter:="CSVファイル (*.csv,*.csv")
それは、拡張子を取り除いて上げれば、InitialNameが出てきます。
Dim Acbk As String
Acbk = ActiveWorkbook.Name
Acbk = Left(Acbk, InStrRev(Acbk, ".") - 1)
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
myFileName = Application.GetSaveAsFilename(Acbk, "CSVファイル (*.csv),*.csv")
回答ありがとうございます。
下記部分
Dim myRng As Range, myFileName As String
Set myRng = Range("A:A,B:B,C:C")
If myRng Is Nothing Then Exit Sub
myFileName = Application.GetSaveAsFilename(FileFilter:="CSVファイル (*.csv,*.csv")
を
Dim Acbk As String
Acbk = ActiveWorkbook.Name
Acbk = Left(Acbk, InStrRev(Acbk, ".") - 1)
Set myRng = Range("A:C")
If Application.CountA(myRng) = 0 Then Exit Sub
myFileName = Application.GetSaveAsFilename(Acbk, "CSVファイル (*.csv),*.csv")
に変更してみましたが、ダメでした。
他、何か思い当たる部分はありますでしょうか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Python CSVファイルについて
-
FTPコマンド mgetでとまってし...
-
エクセルのVBAについて とある...
-
アクセスと同フォルダのCSVファ...
-
コマンドによるzip圧縮
-
EXCEL マクロが正常に動かなく...
-
複数のCSVファイルを読み込んで...
-
フォルダ内のファイル読み込み
-
バッチ処理でcsvファイルの文字...
-
excelでMac(-)⇒Win(?)文字化け...
-
コマンドプロンプトのエラーに...
-
コマンドプロンプトの「%1」と...
-
大量のフォルダからひとつのフ...
-
バッチでテキストファイルから...
-
VBAでワークシートを引数として...
-
binフォルダーとは?
-
拡張子を元に戻す
-
make test って何をするための...
-
コマンドプロンプトで、特定の...
-
CSSを1ページに1枚作るのって変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのVBAについて とある...
-
Python CSVファイルについて
-
アクセスと同フォルダのCSVファ...
-
csvファイルをlinuxコマンドで...
-
MAC フォルダ内のPDF件数とペー...
-
エクセル 指定範囲をCSV出力
-
FTPコマンド mgetでとまってし...
-
複数のcsvファイルを統合、でも...
-
【Rコマンダー】データインポー...
-
複数エクセルファイルの合成
-
バッチ処理でcsvファイルの文字...
-
csv形式からbmpを作成
-
csvをVBAを使ってエクセル形式...
-
gnuplotで複数csvファイルから...
-
エクセルマクロ、複数のCSVファ...
-
マクロ 上位モジュールの作成
-
エクセルにまとめたcsvデータを...
-
複数のCSVファイルを読み込んで...
-
Excelの帳票形式をアクセスに取...
-
csvファイルを結合するバッ...
おすすめ情報