首页 > 解决方案 > 找到最后添加的工作表 (vba)?

问题描述

如何获取在 excel 中创建的最后一张工作表?我使用了 GetSheets.Last,它可以工作,但他发现我最后一张纸在排队,这是对的,但如果我的最后一张纸不遵循排队的顺序,例如它在中间,函数 GetSheets .Last 不起作用。是否存在机器人可以找到或了解最后创建的工作表的某些功能?

感谢和问候

标签: excelvba

解决方案


当您以编程方式添加工作表时,该Worksheets.Add函数会生成对刚刚添加的Worksheet对象的引用:这通常是 VBA 代码获取“最后创建的工作表”句柄的方式。

Dim newSheet As Worksheet
Set newSheet = book.Worksheets.Add
'use newSheet object to refer to the newly added worksheet.

如果我们谈论的是手动添加的工作表,那么事情需要得到更多……参与。

假设您需要跟踪添加到所有工作簿的所有工作表,您可以使用 Excel 加载项来处理应用程序范围的事件,如下所示:

Private WithEvents app As Excel.Application

Private Sub Workbook_Open()
    Set app = ThisWorkbook.Application
End Sub

Private Sub app_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object)
    If Not TypeOf Sh Is Excel.Worksheet Then Exit Sub

    Dim ws As Worksheet
    Set ws = Sh

    ws.CustomProperties.Add "DateCreated", Now

End Sub

排除Application.EnableEvents = False,我不是 100% 相信处理程序会在可以创建工作表的所有可能情况下运行,但我想总比没有好。

然后,您可以使用一个函数来获取DateCreated给定Worksheet实例的自定义属性:

Public Function GetDateCreated(ByVal ws As worksheet) As Date
    Dim p As CustomProperty
    For Each p In ws.CustomProperties
        If p.Name = "DateCreated" Then
            GetDateCreated = p.Value
            Exit Function
        End If
    Next
    GetDateCreated = 0 ' unknown
End Function

然后剩下要做的就是编写一个程序,该程序可以根据相关联的DateCreated自定义属性值对工作表进行排序。


推荐阅读