Excel VBA 自动保存 IF, THEN, ElSE
Excel VBA Auto-Save IF, THEN, ElSE
我正在尝试制作一个 Excel VBA 宏来自动执行我的保存。因此,如果它是 2022 年或 2023 年,并且是一月、二月、三月等月份。该文件将保存在当年的文件夹和该月的文件夹下。但是,我并不是最擅长 If
、Then
、Else
语句的人。我做了这个 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
我正在尝试制作一个 Excel VBA 宏来自动执行我的保存。因此,如果它是 2022 年或 2023 年,并且是一月、二月、三月等月份。该文件将保存在当年的文件夹和该月的文件夹下。但是,我并不是最擅长 If
、Then
、Else
语句的人。我做了这个 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