通过宏保存Excel文件时,如何解决“文件名或数字错误”错误?

时间:2019-04-04 11:54:54

标签: excel vba

我需要使用宏保存我的excel文件,而我使用的是我前一段时间制作的旧宏-效果很好。但是现在,我遇到了一个错误,我似乎不太了解。

代码:

Option Explicit

Sub SaveFile()

    Dim strDir As String, saveDate As String, userMachine As String, Filename As String, yearDate As String, monthDate As String, filePath As String        
    Dim ws1 As Workbook

    Set ws1 = Workbooks("Template.xlsm")
    Application.DisplayAlerts = False
    saveDate = "01/02/2019"
    yearDate = Year(saveDate)
    monthDate = Format(saveDate, "MMMM")
    saveDate = Format(saveDate, "dd-mm-yyyy")
    userMachine = "User - 12345"
    strDir = "C:\user12345\desktop\Final Results\" & yearDate & "\" & monthDate & "\" & Format(saveDate, "dd-mm-yyyy") & "\"
    filePath = ""
    Filename = userMachine & " - " & saveDate & ".xlsx"
    filePath = Dir(strDir & Filename)

    If Dir(strDir, vbDirectory) = "" Then
        MkDir strDir
        If filePath = "" Then    
            ws1.SaveAs Filename:=filePath, FileFormat:=51, CreateBackup:=False
        Else
            MsgBox filePath & " Execution File Exists"        
        End If
    Else
        If filePath = "" Then            
            ws1.SaveAs Filename:=filePath, FileFormat:=51, CreateBackup:=False
        Else
            MsgBox filePath & " Execution File Exists"
        End If
    End If

End Sub

错误在此行filePath = Dir(strDir & Filename)上,错误是:

  

文件名或数字错误

据我所知,我文件的名称符合保存文件的要求,所以我在这里完全不知所措。

我原来的代码是这样的:

strDir = "C:\username\desktop\" & Format(DateAdd("d", -1, Date), "dd_mm_YY") & "\"
FilePath = Dir(strDir & "myFile.xlsx")

1 个答案:

答案 0 :(得分:0)

文件名或数字错误表示您用于保存文件的字符串无效。

您可以使用功能的相对引用将硬编码的字符串替换为您的桌面,例如:

Function getDeskTopPath() As String
'Get Desktop path as string
'Command can be exchanged for other information... see list below
'AllUsersDesktop
'AllUsersStartMenu
'AllUsersPrograms
'AllUsersStartup
'Desktop
'Favorites
'Fonts
'MyDocuments
'NetHood
'PrintHood
'Programs
'Recent
'SendTo
'StartMenu
'Startup
'Templates

    Dim oShell As Object
    Set oShell = CreateObject("Wscript.Shell")
    getDeskTopPath = oShell.SpecialFolders("Desktop")
    Set oShell = Nothing
End Function
相关问题