【问题标题】:Excel VBA - delete table names from WorksheetExcel VBA - 从工作表中删除表名
【发布时间】:2020-10-18 20:08:38
【问题描述】:

我有一个代码可以在不同的 15 个 excel 文件中创建名称相同的表:“TestingTable”。 这是一个每周/每月的报告,它与从文件夹中的 15 张工作表中的查询负载相结合。我需要相同的表名才能在查询中加载和组合它们。 当用户在任何文件中创建新工作表以生成当前报告时,表名递增为“测试表 1”、“测试表 2”等。我的 excel 查询基于名称“测试表”,所以需要确保最新报告的表名不会增加。我想我需要添加到我的代码中,在创建表的行之前,从工作簿中的任何工作表中删除表名的行。尝试在代码中插入以下删除,但没有奏效。有什么想法吗?

Public Sub TestSub()
    Dim lastRow As Integer
    Dim currentRange As Range
    Dim currentRange2 As Range
    Dim currentTable As TableObject
    Dim firstRow As Integer
    Dim columNumber As Integer
    Dim columnName As String
    ThisWorkbook.ListObjects("TestingTable").Delete
    ThisWorkbook.ListObjects("TestingTable3").Delete
        
    
    lastRow = ThisWorkbook.Worksheets("Current").Range("A" & Rows.Count).End(xlUp).Row
    firstRow = ThisWorkbook.Worksheets("Current").Range("A1").End(xlDown).Row
    
    ' step 1 - find last row
        
    For columNumber = 1 To 1000
        columnName = ThisWorkbook.Worksheets("Current").Cells(firstRow, columNumber)
        If columnName = "Current+3" Then
            GoTo Proceed
        End If
    Next columNumber
        
Proceed:
     
    'Set currentRange = shData.Range("A" & firstRow & ":S" & lastRow)
    
    Set currentRange2 = ThisWorkbook.Worksheets("Current").Range(ThisWorkbook.Worksheets("Current").Cells(firstRow, 1), ThisWorkbook.Worksheets("Current").Cells(lastRow, columNumber))
    

    'step 2- find first column
    
    
    ' assign range to a variable
    
    ' crate table from range variable
      ThisWorkbook.Worksheets("Current").ListObjects.Add(xlSrcRange, currentRange2, , xlYes).Name = "TestingTable"
    
End Sub 

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您无法从 Workbook 访问 ListObjects 集合,因为它是 Worksheet 对象的成员,因此您的这部分代码将不起作用

    ThisWorkbook.ListObjects("TestingTable").Delete
    

    应该是ThisWorkbook.Worksheets("SheetName").ListObjects("TestingTable").Delete

    【讨论】:

    • 谢谢,我想我可以遍历所有工作簿并删除表名
    • 是的。也改为引用固定表名称,如“TestingTable1”、“TestingTable2”,最好使用工作表迭代槽 ListObjects,如果名称为“TestingTable *”,则删除此对象。这样可以避免多行代码。
    • 谢谢,我如何在代码中输入指令以根据名称执行操作,如 %Testing 等?
    • 如果你循环处理 ListObjects 让我们说使用 for ... 每个循环。 For each lstObj in wrkSheet.ListObjects If lstObj.Name Like "TestTable*" Then lstObj.Delete Next lstObj
    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多