3

-まとめ:現在の日付の名前で自動的に保存されるコードを書こうとしています

-問題:コンパイラが保存する行に到達すると、「オブジェクト'_Workbook'のメソッド'SaveAs'が失敗しました」というエラーがポップアップします。他のすべては機能します。参考までに関数全体を示しました。

Function createRecord()

    Dim rowCount As Integer

    Dim theDate As Date

    theDate = Format(Now(), "MM-DD-YY")

    Sheets("New Data").Select
    Cells.Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    Application.ActiveSheet.Name = "ChaseHistory"
    ActiveSheet.Paste
    rowCount = ActiveSheet.UsedRange.Rows.Count

    Sheets("Exceptions").Select
    'rowCount = ActiveSheet.UsedRange.Rows.Count
    Application.CutCopyMode = False
    ActiveSheet.UsedRange.Rows.Select
    Selection.Copy
    Sheets("ChaseHistory").Select
    ActiveSheet.Range("A" & rowCount + 2).Select
    ActiveSheet.Paste
    Range("A1").Select
    Cells.Select
    Selection.Copy

    ChDir "Z:\Customer_Service_Accounting\REPORTING & CONTROLS TEAM\Book And Balance_Katie\Chase Booking History"       'loads the crystal report

    Workbooks.Open Filename:= _
        "Z:\Customer_Service_Accounting\REPORTING & CONTROLS TEAM\Book And Balance_Katie\Chase Booking History\Do_Not_Delete.xlsx"

    Windows("Do_Not_Delete").Activate
    ActiveSheet.Paste

    Application.DisplayAlerts = False
                 '---------------This is the problem child--------------                                                                  'SAVING WORKBOOK
    ActiveWorkbook.SaveAs Filename:="Z:\Customer_Service_Accounting\REPORTING & CONTROLS TEAM\Book And Balance_Katie\Chase Booking History\" & CStr(theDate), FileFormat:= _
    xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
    , CreateBackup:=False

    Application.DisplayAlerts = True

End Function

-問題の原因である可能性があると思ったのですが、同じ結果が得られたため、日付に文字列への変換メソッドを追加しました。ここで何か問題があれば教えてください。ありがとう!

4

2 に答える 2

10

問題:コードでExcelからのプロンプトを無効にしていたため、保存しようとしたときに、不適切な形式で保存しようとしていることを示すプロンプトが表示されませんでした。

基本的に、Excelは、ファイル名にバックスラッシュ( "/")が含まれていることを嫌っていました(これは私が本当に知っているはずです)。

修正:私はこのステートメントを使用することになりました:

ActiveWorkbook.SaveAs Filename:="Z:...\" & "Chase " & _
    Month(theDate) & "_" & Day(theDate) & "_" & Year(theDate) & ".xlsx"

したがって、ここで実際に行ったのは、月、日、年をまとめて、悪意のある円記号を避けるためにアンダースコアで区切られた文字列にすることだけでした。

ガフィを助けてくれてありがとう!

于 2012-07-06T14:56:31.163 に答える
4

このようなことを試しましたか?

ActiveWorkbook.SaveAs Filename:="Z:\Customer_Service_Accounting\REPORTING & CONTROLS TEAM\Book And Balance_Katie\Chase Booking History\" & Format(theDate, "mm.dd.yy"), FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False

強調表示するには:に変更CStr(theDate)しましFormat(theDate, "mm.dd.yy") & ".xlsx"たが、必要に応じて他の形式を使用できます。

説明:

theDateは型であるためDate(:を参照Dim theDate As Date)、を使用すると返されるのは完全な日付/時刻形式の文字列ですCStr()。これにより、次のようになります。

Debug.Print CStr(Now()) 
7/6/2012 7:23:38 AM

これにより、システムがファイル名の無効な文字を拒否する可能性があります。

于 2012-07-06T14:22:15.987 に答える