Excel 是否查找最后添加的工作表(vba)?
如何获取在excel中创建的最后一张工作表? 我使用了GETABLE。最后,它工作了,但他找到了最后一张表,它是排队的,它是对的,但是如果我的最后一张表没有按照排队的顺序排列,例如它在中间,函数GETABLE。 是否存在一些功能,机器人可以找到或了解最后创建的工作表 谢谢Excel 是否查找最后添加的工作表(vba)?,excel,vba,Excel,Vba,如何获取在excel中创建的最后一张工作表? 我使用了GETABLE。最后,它工作了,但他找到了最后一张表,它是排队的,它是对的,但是如果我的最后一张表没有按照排队的顺序排列,例如它在中间,函数GETABLE。 是否存在一些功能,机器人可以找到或了解最后创建的工作表 谢谢 关于您可以尝试访问工作表的代码名。这是一个序列号的后缀 需要注意的是,如果a)删除工作表,b)关闭然后重新打开工作簿,c)添加新工作表,则可能会为新工作表分配旧的代码名,从而使此方法不可靠 虽然它不像更改工作表的名称那样常见,
关于您可以尝试访问工作表的代码名。这是一个序列号的后缀 需要注意的是,如果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
函数getLastAddedWorksheet()
尺寸i为长,mx为长,ws为工作表
出错时继续下一步
对于i=1到worksheets.count
如果mxWorksheets.add
函数生成对刚刚添加的工作表
对象的引用:这通常是VBA代码获取“上次创建的工作表”句柄的方式
如果我们谈论的是手动添加的工作表,那么需要更多地……参与其中 假设需要跟踪添加到所有工作簿中的所有工作表,则可以使用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
自定义属性:
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
自定义属性值对工作表进行排序。据我所知,工作表不携带此类元数据-您无法知道是先添加还是后添加的工作表,也无法按照创建顺序对其进行排序。我可能错了。你的代码是在创建表单吗?如果是这样,您可以使用CustomProperties
存储一些Timestamp
元数据。。。但是,对于不是由宏创建的工作表,这没有帮助。您可以使用工作表(Worksheets.Count)
。这将为您提供编号最高的工作表的索引号,它应该是最后一个创建的。@DarrellH直到工作表(Worksheets.Count)
被移动,是的。好的,既然没有其他人提到过,我会咬一口,问您为什么需要知道工作表的添加顺序。听起来好像您试图将工作表本身视为数据,这表明存在设计问题。对于工作表代码名称没有进行更系统的更改,我感到非常遗憾。还有一个ThisWorkbook.Workbook\u NewSheet事件子项。@user10970498是,但这只会在本工作簿中增加新的工作表。我想这取决于“最新工作簿”要求对多台计算机上的一本工作簿还是一台计算机上的多本工作簿更重要。Excel外接程序并不总是最容易分发的,但是XLSM/XLSB本身带有它的SUB。。。TBH我同意,这很可能不是OP实际需要做的事情——但这是一个值得尝试和解决的有趣问题:)…OP没有指定是关于工作簿还是任何工作簿。。我选择了更广泛的选择
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