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
以上的值抛出错误