Excel VBA – 根据更改的名称从同一文件夹中的其他工作簿导入数据

我想从一个封闭的工作簿导入一些数据到一个打开的工作簿。

每个星期都会有另一个工作簿被创build – “AIMS_Report_w *”,其中*是星期编号。

当当前工作簿是“AIMS_Report_w31”时,我想要从“AIMS_Report_w30”中获取数据。

我到目前为止是这样的

Sub Import_Data() Dim rng As Range Dim WB2 As Workbook Dim FName As String FName = Application.ActiveWorkbook.Path + "AIMS_Report_w" Set WB2 = Workbooks.Open(Filename:=FName) ThisWorkbook.ChampSpecific.Range("L3:O6").Value = WB2.Worksheets(1).Range("M3:P6").Value WB2.Close End Sub 

macros将从“AIMS_Report_w31”工作簿中的button运行。 我想下面的代码将工作,但我不知道什么语法将是FName = Application.ActiveWorkbook.Path + "AIMS_Report_w"以获取它在当前之前的星期编号。

一般来说,就在前一周,你需要这样的东西:

 "AIMS_Report_w" & Format((WorksheetFunction.WeekNum(Now) - 1), "00") 

甚至

 "AIMS_Report_w" & WorksheetFunction.WeekNum(Now) - 1 

如果你不需要它格式化。


否则,如果您想要提供之前的当前报告的名称并从中获取前一个报告,则类似这样的内容会很有用:

 Option Explicit Public Function GeneratePreviousWeek(strCurrentWeek As String) As String Dim lngPrevious As Long Dim strResult As String lngPrevious = Right(strCurrentWeek, 2) lngPrevious = lngPrevious - 1 strResult = Left(strCurrentWeek, Len(strCurrentWeek) - 2) GeneratePreviousWeek = strResult + Format(lngPrevious, "00") End Function Sub TestMe() Debug.Print GeneratePreviousWeek("AIMS_Report_w05") Debug.Print GeneratePreviousWeek("AIMS_Report_w15") End Sub 

这是你在即时窗口中得到的:

 AIMS_Report_w04 AIMS_Report_w14 

GeneratePreviousWeek函数使用报表名称的最后两个字符返回一个带有-1的string。 应该使用以下内容:

  • 格式总是带有一个前导0.例如, 02
  • 如果你询问01前一个,它将返回00 。 否则,你应该小心,有时一年可能有53周,所以你也需要提供一年。
  • 您可能会尝试为53以上的值抛出错误