Excel VBA 自动保存 IF, THEN, ElSE

Excel VBA Auto-Save IF, THEN, ElSE

我正在尝试制作一个 Excel VBA 宏来自动执行我的保存。因此,如果它是 2022 年或 2023 年,并且是一月、二月、三月等月份。该文件将保存在当年的文件夹和该月的文件夹下。但是,我并不是最擅长 IfThenElse 语句的人。我做了这个 VBA,但在我尝试让它创建文件夹(如果它们不存在)后它不起作用。

Sub auto-organize-save()
'
' auto-organize-save Macro
'

'
    'this is for date
    Dim dateOne As Date
    'This is for making new folder
    Dim fdObj As Object
    Application.ScreenUpdating = False
    Set fdObj = CreateObject("Scripting.FileSystemObject")
         
    If fdObj.FolderExists("C:\temp\april") Then
    If dateOne = April Then
    ActiveWorkbook.SaveAs Filename:= _
        "C:\temp\april\save3.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False
    Else
    fdObj.CreateFolder ("C:\temp\april")
    
    End If
    End If
End Sub

我进一步修改了它,我得到了结果,但我需要弄清楚如何更改文件夹的名称以显示以下内容: "04 - APR" - 4 表示第 4 个月,APR 是缩写版本。在用户 trincot 的帮助下,以下工作完美。

 Sub auto_organize_save1()
    Dim fdObj As Object
    Dim folder As String
    
    Set fdObj = CreateObject("Scripting.FileSystemObject")
    folderYear = "C:\temp\" & Format(Now, "YYYY") & "\"
    folderMonth = "C:\temp\" & Format(Now, "YYYY") & "\" & Format(Now, "MM-MMM") & "\"
    
    
    
    If Not fdObj.FolderExists(folderYear) Then
        MkDir folderYear
    End If
    
    If Not fdObj.FolderExists(folderMonth) Then
        MkDir folderMonth
    End If
    
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=folderMonth & "example2.xlsx"
    Application.DisplayAlerts = False
End Sub

一些问题:

  • 您的代码未获得特定日期,它仅使用默认值 dateOne。而是使用 Now.
  • dateOne = April 引用了一个未定义的变量 April。要获取日期的月份,请使用 Month 函数,并将其与数字进行比较。
  • 像“四月”这样的艰苦编码月份不会为您提供优雅的代码。此外,这甚至不是您要求的格式(“4 - APR”)。
  • 我建议在第 4 个月前加上一个零作为前缀,这样它总是有两位数字,并且当其他条目是“12 - DEC”等时看起来会更好
  • Application.ScreenUpdating = False 只应在您已经拥有运行良好的代码时使用。只要您的代码无法正常工作,就不要使用它。如果你使用它,还要添加相反的内容:Application.ScreenUpdating = True
  • 我不确定将您的文件始终称为“save3”是否是个好主意,但由于我没有关于这方面的信息,所以我就保留了它。

以下是一些您可以使用的代码:

Sub auto_organize_save()
    Dim fdObj As Object
    Dim folder As String
    
    Set fdObj = CreateObject("Scripting.FileSystemObject")
    folder = "C:\temp\" & Format(Now, "MM-MMM") & "\"
    
    If Not fdObj.FolderExists(folder) Then
        MkDir folder
    End If
    
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=folder & "save3.xlsx"
    Application.DisplayAlerts = True
End Sub