如何激活具有日期标签的Excel工作表

时间:2018-01-31 19:08:44

标签: excel vba excel-vba

喜爱 我目前的宏在多个工作簿中引入了大约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

enter image description here

2 个答案:

答案 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