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