我试图写一个函数来查找Excel工作簿中最近创建的表对象(或者我猜工作表也可以)。
运行下面的代码将返回以下内容:
第一个月
我不明白为什么,但它显示错误是在第12行。我相信它是在“tbl.Created”,但这是用在第11行以及没有问题。
Sub TableWorx()
' Get the name of most recent Table (existing table on new sheet)
Dim ws As Worksheet
Dim tbl As ListObject
Dim newestObjectCreatedTime As Date
Dim eTableName As String
newestObjectCreatedTime = #1/1/1900# 'this is Excel's date with serial no of 0
For Each ws In ThisWorkbook.Worksheets
For Each tbl In ws.ListObjects
If tbl.Created > newestObjectCreatedTime Then
newestObjectCreatedTime = tbl.Created
eTableName = tbl.Name
End If
Next tbl
Next ws
MsgBox "The latest table object: " & eTableName
'eventually will add code to set new table name, it may end up in a separate sub
End Sub
字符串
有什么建议如何让这个或一个等效的功能工作?我觉得自己像个无知的人。
尝试将上述代码作为模块中的函数、作为现有函数int“ThisWorkbook”的一部分、作为“ThisWorkbook”中的独立函数运行。
回到这个错误:Run-time error '438': Object doesn't support this property or method
个
1条答案
按热度按时间mnemlml81#
正如其他人所指出的,
ListObject
既没有.Created
方法也没有属性,因此直接获取所需的内容是不可能的。然而,通过一些假设(限制),您仍然可以弄清楚这一点。每次向工作簿中添加表时,它都会获得一个格式为“Table#"的默认名称。#是表的编号。因此,工作簿中的第一个表的默认名称为Table1,第二个表的默认名称为Table2,依此类推。因此,如果工作簿中的所有表都使用默认名称,则名称中数字最大的表是最后创建的表。(请注意,如果创建了一个表,然后将其删除,则下一个表的名称仍将递增。例如,如果我在一个工作簿中有两个表,并且删除了Table1,则我创建的下一个表的名称将为Table3。)
于是:
ListObject
字符串
当然,这里省略了错误处理,整个过程是基于一些可能令人望而却步的假设,但这是我所能想到的尝试获取此信息的最佳方法。