Vba 正在尝试将工作簿保存到用户指定的文件夹

Vba 正在尝试将工作簿保存到用户指定的文件夹,vba,excel,Vba,Excel,您好,我正在尝试制作一个宏,将报告保存到特定文件夹。我们的文件夹每天都会生成,如C://Report\u Type/2017/11/10(其中/10是我要将文件保存到的文件夹) 我使用的代码提示用户提供日期,以便找到文件夹,然后根据指定的名称保存文件 但是,当我运行宏时,它会将文件保存在C://Report\u Type/2017/11根文件夹中,忽略基于用户输入的日期。有人能帮我找出哪里错了吗 解释起来有点复杂,但是如果你检查代码,那么它就有意义了 Sub PSSaveFile() D

您好,我正在尝试制作一个宏,将报告保存到特定文件夹。我们的文件夹每天都会生成,如
C://Report\u Type/2017/11/10
(其中
/10
是我要将文件保存到的文件夹)

我使用的代码提示用户提供日期,以便找到文件夹,然后根据指定的名称保存文件

但是,当我运行宏时,它会将文件保存在
C://Report\u Type/2017/11
根文件夹中,忽略基于用户输入的日期。有人能帮我找出哪里错了吗

解释起来有点复杂,但是如果你检查代码,那么它就有意义了

Sub PSSaveFile()
    Dim myVal2 As Variant
    Dim myDate As String
    Dim mFilePath As String

    myVal2 = InputBox("Please enter today's date in mm\dd format")
    myDate = Date - 1
    mFilePath = "\\sample\sample_emea\sec_REPORTS\APPS\Reports\Regional\sample_security_app\2017\" & myVal2

    ActiveWorkbook.SaveAs FileName:=mFilePath & "SampleLogs-" & myDate & "-12352_checked"
End Sub

提前感谢您的帮助

为什么要把它弄得这么复杂?我的意思是,为什么要问你能自动得到的日期

这就是你正在尝试的(未经测试的)吗

事情很少

  • 命名文件时避免使用特殊字符,如
    \/:*?“<>|
    因此我们在上述代码中使用了
    替换(日期-1,“/”,“-”
  • 提及文件扩展名和文件格式编号
  • 将代码分解为易于理解的“部分”。使代码更易于理解和管理

  • 是的,这是一种更简单的方法,不幸的是,将使用宏的用户经常检查积压,因此她查看的日期并不总是今天或昨天的日期,因此用户输入函数–Rhyfelwr 14分钟前

    由于您使用的是InputBox,因此可能需要使用此

    Sub PSSaveFile()
        Dim FilePath_A As String, FilePath_B As String, FilePath_C As String
        Dim sFile As String
        Dim Ret As Variant
    
        Ret = InputBox("Please enter date in mm\dd format")
    
        If Ret = "" Then Exit Sub
    
        FilePath_A = "\\sample\sample_emea\sec_REPORTS\APPS\Reports\Regional\sample_security_app\2017\"
        FilePath_B = Ret
    
        '~~> Check if the folder path exists
        If FileFolderExists(FilePath_A & FilePath_B) Then
            FilePath_C = "\SampleLogs-" & Replace(Date - 1, "/", "-") & "-12352_checked.xlsx"
    
            sFile = FilePath_A & FilePath_B & FilePath_C
    
            ActiveWorkbook.SaveAs sFile, 51
        Else
            MsgBox "The folder path " & FilePath_A & FilePath_B & " doesn't exist"
        End If
    End Sub
    
    Public Function FileFolderExists(strFullPath As String) As Boolean
        On Error GoTo Whoa
        If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True
    Whoa:
        On Error GoTo 0
    End Function
    

    为什么要把它弄得这么复杂?我的意思是,当你能自动得到它的时候,为什么还要问日期

    这就是你正在尝试的(未经测试的)吗

    事情很少

  • 命名文件时避免使用特殊字符,如
    \/:*?“<>
    ,因此我们在上述代码中使用
    Replace(Date-1,“/”,“-”
  • 提及文件扩展名和文件格式编号
  • 将代码分解为易于理解的“部分”。使代码更易于理解和管理

  • 是的,这是一种更简单的方法,不幸的是,将使用宏的用户经常检查积压,因此她查看的日期并不总是今天或昨天的日期,因此用户输入函数–Rhyfelwr 14分钟前

    由于您使用的是InputBox,因此可能需要使用此

    Sub PSSaveFile()
        Dim FilePath_A As String, FilePath_B As String, FilePath_C As String
        Dim sFile As String
        Dim Ret As Variant
    
        Ret = InputBox("Please enter date in mm\dd format")
    
        If Ret = "" Then Exit Sub
    
        FilePath_A = "\\sample\sample_emea\sec_REPORTS\APPS\Reports\Regional\sample_security_app\2017\"
        FilePath_B = Ret
    
        '~~> Check if the folder path exists
        If FileFolderExists(FilePath_A & FilePath_B) Then
            FilePath_C = "\SampleLogs-" & Replace(Date - 1, "/", "-") & "-12352_checked.xlsx"
    
            sFile = FilePath_A & FilePath_B & FilePath_C
    
            ActiveWorkbook.SaveAs sFile, 51
        Else
            MsgBox "The folder path " & FilePath_A & FilePath_B & " doesn't exist"
        End If
    End Sub
    
    Public Function FileFolderExists(strFullPath As String) As Boolean
        On Error GoTo Whoa
        If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True
    Whoa:
        On Error GoTo 0
    End Function
    

    这只是一个输入错误:
    SampleLogs
    之前缺少了一个
    \
    ,我想:
    ActiveWorkbook.SaveAs文件名:=mFilePath&“\SampleLogs-”&myDate&“-12352\u选中”
    。所以路径和文件名之间必须有一个反斜杠。好吧,该死的,这样一个小小的错误造成了如此巨大的差异。非常感谢你指出这一点!我永远也想不到。你能把它写下来作为一个答案,这样我就可以给你投票了吗?
    myDate=Date-1
    也会给你错误。此外,您没有指定文件扩展名和文件格式numberit将其另存为普通工作簿(如果用户希望将其另存为无宏工作簿,则提示用户),“myDate=Date-1”在我这端工作得非常好,文件名没有问题。
    “\SampleLogs-”&Date-1&&12352\u已选中”
    为您提供了
    \SampleLogs-28/11/2017-12352_checked
    ,这将产生问题,因为“/”这只是一个输入错误:在
    SampleLogs
    之前只缺少一个
    \
    我想:
    ActiveWorkbook.SaveAs文件名:=mFilePath&“\SampleLogs-”&myDate&“-12352_checked”
    。所以路径和文件名之间必须有一个反斜杠。好吧,该死的,这样一个小小的错误造成了如此巨大的差异。非常感谢你指出这一点!我永远也想不到。你能把它写下来作为一个答案,这样我就可以给你投票了吗?
    myDate=Date-1
    也会给你错误。此外,您没有指定文件扩展名和文件格式numberit将其另存为普通工作簿(如果用户希望将其另存为无宏工作簿,则提示用户),“myDate=Date-1”在我这端工作得非常好,文件名没有问题。
    “\SampleLogs-”&Date-1&&12352\u已选中”
    为您提供了
    \SampleLogs-28/11/2017-12352\u检查过的
    ,这会产生问题,因为“/”是的,这是一种更简单的方法,不幸的是,将要使用宏的用户经常检查积压日志,因此她查看的日期并不总是今天或昨天的日期,因此用户输入函数OK在这种情况下修改
    文件路径。但请注意我在你的评论下的评论question@Peh:没错。。修正:)是的,这是一种更简单的方法,不幸的是,将使用宏的用户经常检查积压,因此她查看的日期并不总是今天或昨天的日期,因此用户输入函数OK在这种情况下修改
    文件路径。但请注意我在你的评论下的评论question@Peh:没错。。固定:)