找到最后添加的表格(vba)?

时间:2019-01-28 16:21:59

标签: excel vba

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

谢谢 问候

2 个答案:

答案 0 :(得分:1)

以编程方式添加工作表时,Worksheets.Add函数将产生对刚刚添加的Worksheet对象的引用:通常,这是VBA代码如何获取“上次创建的工作表”上的句柄的方式。 / p>

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

如果我们要谈论的是手动添加的工作表,则需要更多...参与。

假设您需要跟踪添加到 all 工作簿的 all 工作表,则可以使用一个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自定义属性值对工作表进行排序。

答案 1 :(得分:0)

您可以尝试访问工作表的代号。这是带序列号的后缀。

应该提到的是,如果您a)删除工作表,b)关闭然后重新打开工作簿,并且c)添加新工作表,则可能为该新工作表分配了旧的代号,使该方法不可靠。

尽管它不像更改工作表的名称那样普遍,但是也可以手动更改工作表的代号。

function getLastAddedWorksheet()

    dim i as long, mx as long, ws as worksheet

    on error resume next

    for i = 1 to worksheets.count
        if mx < val(mid(worksheets(i).codename, 6)) then
             set ws = worksheets(i)
             mx = val(mid(ws.codename, 6))
        end if
    next i

    getLastAddedWorksheet = ws.name

    on error goto 0

end function