プロが教える店舗&オフィスのセキュリティ対策術

次のプログラムでコピーできるのですが、コピーされたSample1.xlsxを立ち上げると「ファイル形式と拡張子が一致していません」となってしまいます。
Sub Sample()
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs "C:\Sample1.xlsx"
Application.DisplayAlerts = True
End Sub

質問者からの補足コメント

  • これだと現在開いているブックが閉じてしまいます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2024/04/20 09:38

A 回答 (5件)

こんにちは



以下でもいけると思います。

Sub Sample()
Const p = "C:\Sample1.xlsx"

With CreateObject("Excel.Application")
.Application.DisplayAlerts = False
.Workbooks.Open(ThisWorkbook.FullName).SaveAs p, 51
.Workbooks(1).Close
.Quit
End With
End Sub
    • good
    • 2
この回答へのお礼

希望のものができました。
皆様ありがとうございました。

お礼日時:2024/04/20 12:54

No.3です。

やったことなかったのですが、Worksheets.Copyはシート指定しないと全シートがコピーされますね。ということで、

Worksheets.Copy
ActiveWorkbook.SaveCopyAs "C:\Sample1.xlsx"

でOKでした。
    • good
    • 0
この回答へのお礼

再度ありがとうございます。でもやはりうまくいきませんでした。
No.4のプログラムは、瞬きしないし、入れ替わらないし、拡張子が不正にもならないし、警告も出ないし、何より短くて良かったので、そちらをBAにしました。

お礼日時:2024/04/22 11:35

ワークシートはいくつもあるのでしょうか?一つだけならWorksheets.Copyでコピー先を指定しなければ新しいブックができるので、それをSaveAsで保存すればいいです。

他にシートがあるなら新しいブックに追加でコピーしてSaveAsすればいいです。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2024/04/20 12:55

力技なら


Dim bk As Workbook
Dim bkPath, bkName
ActiveWorkbook.Save
bkPath = ActiveWorkbook.Path
bkName = ActiveWorkbook.Name
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="C:\Sample1.xlsx", FileFormat:=51
Set bk = ActiveWorkbook
Workbooks.Open bkPath & "\" & bkName
bk.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2024/04/20 12:56

SaveCopyAsではなく、別名保存としてSaveAsを使います。


このとき、xlOpenXMLWorkbookを指定することでマクロなしで
保存ができます。
http://officetanaka.net/excel/vba/tips/tips214.htm
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご提示のプログラムはやったことがありますが、実行すると、現在編集中のブックが新しくできたブックに入れ替わってしまいます。引き続き編集できるようにするにはどうすれば良いでしょうか。

お礼日時:2024/04/20 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A