web-dev-qa-db-ja.com

VBAコードで「名前を付けて保存」を実行して、現在のExcelブックを日付スタンプで保存する方法は?

フォームボタンをクリックして、現在の日付のファイル名でブックのコピーを保存するExcelブックがあります。

次のActiveWorkbook.SaveAs ("\\filePath\FormFlow To MSExcel\" & Left(Now(), 10))を試し続けていますが、Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.を受信して​​います

誰もこれで私を助けることができますか?私はまだExcel向けの開発を始めたばかりです。

17

ほとんどの場合、アクセスしようとしているパスは存在しません。相対的な場所に保存しようとしており、その文字列にファイル拡張子がありません。相対パスを使用する必要がある場合は、ActiveWorkbook.FullNameからパスを解析できます

編集:より良い構文もなります

ActiveWorkbook.SaveAs Filename:=myFileName, FileFormat:=xlWorkbookNormal
22
chancea

この関数を使用する最も簡単な方法は、「マクロの記録」から開始することです。記録を開始したら、ファイルを目的の場所に目的の名前で保存し、もちろんファイルタイプを設定します。ほとんどの場合は「Excel Macro Enabled Workbook」〜「XLSM」

記録を停止すると、コードの検査を開始できます。

ファイルが元々あった場所のパスを使用してワークブックを保存できるようにするコードを以下に記述し、「イベント[セル[A1]の日付]」と命名しました。

Option Explicit

Sub SaveFile()

Dim fdate As Date
Dim fname As String
Dim path As String

fdate = Range("A1").Value
path = Application.ActiveWorkbook.path

If fdate > 0 Then
    fname = "Event " & fdate
    Application.ActiveWorkbook.SaveAs Filename:=path & "\" & fname, _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Else
    MsgBox "Chose a date for the event", vbOKOnly
End If

End Sub

コードを新しいモジュールにコピーし、セル「A1」に日付を書き込みます。 01-01-2016->サブルーチンをボタンに割り当てて実行します。 [注意]新しいワークブックはデフォルトの自動保存場所に保存されるため、このスクリプトが機能する前に保存ファイルを作成する必要があります。

10

デフォルトのフォーマットがファイル拡張子と一致しない可能性があります。ファイル名とともにファイル形式を指定し、形式が拡張子と一致することを確認する必要があります。

With someWorkbook
.SaveAs "C:\someDirector\Awesome.xlsm", fileformat:=xlOpenXMLWorkbookMacroEnabled
End With

OTOH、.SaveAsファイル名に拡張子がありません。これをプログラムで行う場合は、1つ提供する必要があるかもしれません。 GUIインターフェースから拡張機能を提供する必要がないのは理にかなっていますが、プログラマーは明確なコードを書くことが期待されています。拡張機能と一致する形式を追加することをお勧めします。ファイル形式のリストについては、 このmsdnページ を参照してください。正直に言うと、説明についてはあまり認識していません。

xlExcel8 = 56は.xls形式です

xlExcel12 = 50は.xlsb形式です

xlOpenXMLWorkbook = 51は.xlsx形式です

xlOpenXMLWorkbookMacroEnabled = 52は.xlsm形式です

xlWorkbookDefaultはalsoの値51でリストされています。これは、デフォルトのフォーマットを変更できると思ったので困惑しています。

1
riderBill

私はこれが古い投稿であることを知っていますが、似たようなものを探していました...あなたの問題は、Now()を使用すると、出力が「6/20/2014」になることだと思います...これはファイルの問題です名前に「/」が含まれているため。ご存知かもしれませんが、ファイル名に特定の記号を使用することはできません。

乾杯

0
Corey

1つのファイルで次のメソッドを正常に使用しましたが、

しかし、まったく同じエラーが再び発生します...最後の行のみがエラーになります

Newpath = Mid(ThisWorkbook.FullName, 1, _
 Len(ThisWorkbook.FullName) - Len(ThisWorkbook.Name)) & "\" & "ABC - " & Format(Date, "dd-mm-yyyy") & ".xlsm"
ThisWorkbook.SaveAs (Newpath)
0
Isu

私は苦労していましたが、最終的には以下がうまくいきました!

Dim WB As Workbook

Set WB = Workbooks.Open("\\users\path\Desktop\test.xlsx")

WB.SaveAs fileName:="\\users\path\Desktop\test.xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
0
Pedro Luque