喜爱 我目前的宏在多个工作簿中引入了大约100个工作表。宏然后过滤并从10或11个特定工作表中提取数据,以创建包含我需要的数据的新工作表。 100张表中的每一张都具有相当独特的名称,从“DataFX GL Data”到“SAP_ALL_175031”。
有一个文件我很难选择。它标有日期。每个月都会添加一个新的工作表,其中包含日期和月份(例如“11月30日”)。我是vba的新手,不知道从哪里开始,所以我只有一个我选择的另一张纸的例子。如何选择标有最新日期的工作表?
Dim Deleterow As Long, EndRow As Long
Dim lRow As Variant
Dim rngRow As Range
Dim rngSelection As Range
Set rngSelection = Range("A1").CurrentRegion
For Each ws In ActiveWorkbook.Worksheets
With ws
If Left(ws.Name, 7) = "Sheet 1" Then
EndRow = LastRow(ws)
For Deleterow = EndRow To 2 Step -1
If .Cells(Deleterow, 9) = .Cells(Deleterow, 12) Then
.Rows(Deleterow).EntireRow.Delete
End If
Next Deleterow
End If
答案 0 :(得分:1)
您可以使用VBA代码中的EOMonth
WorksheetFunction来确定上个月的最后一天:
Dim lastMonth As Date
lastMonth = WorksheetFunction.EoMonth(Date, -1)
Debug.Print lastMonth
Debug.Print Format(lastMonth, "dd mmmm")
结果:
2017年12月31日
12月31日
然后
If ws.Name = Format(lastMonth, "dd mmmm") Then
答案 1 :(得分:0)
要获取具有最新日期的工作表的名称,假设所有日期都在同一年内,您可以执行以下操作:
Option Explicit
Sub LatestWorksheet()
Dim WB As Workbook, WS As Worksheet
Dim wsName As String
Set WB = ThisWorkbook
For Each WS In WB.Worksheets
If IsDate(WS.Name) Then
If wsName = "" Then
wsName = WS.Name
ElseIf DateValue(WS.Name & " 2012") > DateValue(wsName & " 2012") Then _
wsName = WS.Name
End If
End If
Next WS
Debug.Print wsName
End Sub
请注意,我将年份修改为2012年以允许29 Feb
。否则会改变正确的顺序。给定日期/字符串,VBA将采用当前年份。如果文件年份是闰年,而当前年份不是,那么29 Feb
函数会以不期望的方式转换DateValue
。