简体   繁体   English

在 vba 中使用 SaveAs function 保存新文件时出错

[英]Error when saving a new file using SaveAs function in vba

I am accepting a date from Input Box and filtering my data and saving it in a new workbook.我正在接受输入框中的日期并过滤我的数据并将其保存在新工作簿中。 When I am saving this new workbook, its giving me a Run-time error 1004 with a sentence as:当我保存这个新工作簿时,它给了我一个运行时错误 1004,其中包含以下语句:

Method 'SaveAs'of object'_Workbook' failed.方法 'SaveAs'of object'_Workbook' 失败。

I am unable to find a solution to this.我无法找到解决方案。

Sub GIACTSDS121()
   Dim dte As Date
   mBox = InputBox("Enter a date")

   If IsDate(mBox) Then
      dte = CDate(mBox)
      Dim Lastrow As Long
      Lastrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
      ActiveSheet.Range("A1:AC" & Lastrow).AutoFilter Field:=2, Criteria1:=">=" & dte, _
              Operator:=xlAnd, Criteria2:="<" & dte + 1

      Range("U1").Select
      ActiveSheet.Range("A1:AC" & Lastrow).AutoFilter Field:=21, Criteria1:="Yes"


      Range("A1").Select
      Range(Selection, Selection.End(xlDown)).Select
      Range(Selection, Selection.End(xlToRight)).Select
      Selection.Copy
      Workbooks.Add
      ActiveSheet.Paste
      ActiveSheet.Range("A:A,E:E,I:I,M:N,Q:T,X:Z").EntireColumn.Delete

      ActiveWorkbook.SaveAs Filename:="K:\K_Drive\RP\RPS-Metrics-ops\' Operations Metrics\Investigation Documentation\GIACT Investigations\SDS_Cases\_" & dte & ".xlsx", FileFormat:=51
      ActiveWorkbook.Close

   Else
     MsgBox "This is not a date. Please try again"

   End If
End Sub

The Filename parameter passed to SaveAs contains an invalid character that windows does not accept for a filename传递给SaveAsFilename参数包含 windows 不接受文件名的无效字符

Filename:="K:\K_Drive\RP\RPS-Metrics-ops\' Operations
                                         ^
                                         |
                                 maybe this is the cause!

Get rid of all ActiveSheet , ActiveWorkbook and all .Select if possible (see How to avoid using Select in Excel VBA ). Get rid of all ActiveSheet , ActiveWorkbook and all .Select if possible (see How to avoid using Select in Excel VBA ).

Also specify a worksheet for every object that is located in a worksheet like Range , Cells , Rows , Columns .还要为位于RangeCellsRowsColumns等工作表中的每个object 指定一个工作表。

Public Sub GIACTSDS121()
    Dim ws As Worksheet
    Set ws = ActiveSheet 'better define by name as: Set ws = ThisWorkbook.Worksheets("Sheet1")

    Dim mBox As Variant
    mBox = InputBox("Enter a date")

    If IsDate(mBox) Then
        Dim dte As Date
        dte = CDate(mBox)

        Dim LastRow As Long
        LastRow = ActiveSheet.Range("A" & ws.Rows.Count).End(xlUp).Row
        ws.Range("A1:AC" & LastRow).AutoFilter Field:=2, Criteria1:=">=" & dte, _
                Operator:=xlAnd, Criteria2:="<" & dte + 1

        ws.Range("A1:AC" & LastRow).AutoFilter Field:=21, Criteria1:="Yes"

        ws.Range(ws.Range("A1"), ws.Range("A1").End(xlDown).End(xlToRight)).Copy

        Dim NewWb As Workbook
        Set NewWb = Workbooks.Add

        NewWb.Worksheets(1).Paste
        NewWb.Worksheets(1).Range("A:A,E:E,I:I,M:N,Q:T,X:Z").EntireColumn.Delete

        NewWb.SaveAs Filename:="K:\K_Drive\RP\RPS-Metrics-ops\' Operations Metrics\Investigation Documentation\GIACT Investigations\SDS_Cases\_" & dte & ".xlsx", FileFormat:=51
        NewWb.Close SaveChanges:=False
    Else
        MsgBox "This is not a date. Please try again"
    End If
End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM