VBA的方式来手动保存基于“dynamic”parameter passing的Excel文件。

我已经使用excelmacros创build了一个应用程序,用户通过button点击macros来提供某些值并将其保存到多个目录path。

当我从下拉菜单中select一个区域时,它应该将文件保存到指定的区域文件夹中。 例如说,当selectNY时,文件将被保存到共享驱动器和2016 – NY文件夹。 但是,现在,决定应用程序的未来,我正在考虑在工作表中将“年”作为一个单独的字段,从用户那里检索年份值。 我如何实现这一点,而不必每年都要更改代码。 这个过程将从现在开始持续数十年。 提前致谢 !

FileName1 = Range("D3").Value filenameOfNewBook = FileName1 If location = "Illinois" Then ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\Illinois\" & FileName1 & "-" & "checklist" & ".xlsm" ElseIf location = "LA" Then ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\LA\" & FileName1 & "-" & "checklist" & ".xlsm" ElseIf location = "NY" Then ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\NY\" & FileName1 & "-" & "checklist" & ".xlsm" Else ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\Atlanta\" & FileName1 & "-" & "checklist" & ".xlsm" End If MsgBox "File Saved successfully!", , "Save" ActiveWorkbook.save Application.DisplayAlerts = True 

从我的办公任务目的经验来看,最好不要参考当年,而是用户设定的年份,所以例如2017年1月用户仍然可以对2016年的相关文件进行操作。您可以去掉以下内容:

 If location = "Illinois" Then ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\Illinois\" & FileName1 & "-" & "checklist" & ".xlsm" ElseIf location = "LA" Then ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\LA\" & FileName1 & "-" & "checklist" & ".xlsm" ElseIf location = "NY" Then ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\NY\" & FileName1 & "-" & "checklist" & ".xlsm" Else ActiveWorkbook.SaveAs FileName:="W:\Audits\2016\Atlanta\" & FileName1 & "-" & "checklist" & ".xlsm" End If 

而是使用:

 Dim myYear as String, locations() as String, locationForPath as String Dim locCounter as Long myYear = ThisWorkbook.Worksheets("Sheet1").Range("a2").value2 'the cell with year value, for example 2016 locations = Split("Illinois,LA,NY",",") For locCounter = LBound(locations) to UBound(locations) If location = locations(locCounter) Then locationForPath = location: Exit For Next locCounter If locationForPath = vbNullString Then locationForPath = "Atlanta" ActiveWorkbook.SaveAs FileName:="W:\Audits\" & myYear & "\" & locationForPath & "\" & FileName1 & "-" & "checklist" & ".xlsm"