excel 查找具有最近创建日期的表

jhdbpxl9  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(117)

我试图写一个函数来查找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

mnemlml8

mnemlml81#

正如其他人所指出的,ListObject既没有.Created方法也没有属性,因此直接获取所需的内容是不可能的。
然而,通过一些假设(限制),您仍然可以弄清楚这一点。每次向工作簿中添加表时,它都会获得一个格式为“Table#"的默认名称。#是表的编号。因此,工作簿中的第一个表的默认名称为Table1,第二个表的默认名称为Table2,依此类推。因此,如果工作簿中的所有表都使用默认名称,则名称中数字最大的表是最后创建的表。(请注意,如果创建了一个表,然后将其删除,则下一个表的名称仍将递增。例如,如果我在一个工作簿中有两个表,并且删除了Table1,则我创建的下一个表的名称将为Table3。)
于是:

  • 迭代所有工作表
  • 获取每个工作表上的最后一个ListObject
  • 跟踪桌号
  • 返回最大(最新)的表
Private Function GetLastTable() As ListObject

    ' Purpose:
    ' Return the most recently created Table, assuming all Tables are using default names
    
    Dim largestTableNumber As Long, tableName As String, tableNumber As Long, lastTable As ListObject
    
    ' Iterate through all worksheets
    Dim ii As Long
    For ii = 1 To ThisWorkbook.Sheets.Count
        
        ' The last object in the ListObjects is the most recently created table
        With ThisWorkbook.Sheets(ii)
            tableName = .ListObjects(.ListObjects.Count).Name
        End With
        
        ' Get the table's default number
        tableNumber = Replace(tableName, "Table", "")
        
        ' If this number is larger than the one in storage, this table was created more recently
        If tableNumber > largestTableNumber Then
            largestTableNumber = tableNumber
            Set lastTable = ThisWorkbook.Sheets(ii).ListObjects("Table" & tableNumber)
        End If
        
    Next ii

    Set GetLastTable = lastTable

End Function

字符串
当然,这里省略了错误处理,整个过程是基于一些可能令人望而却步的假设,但这是我所能想到的尝试获取此信息的最佳方法。

相关问题