【问题标题】:Excel VBA - Add new table columns with specific header namesExcel VBA - 添加具有特定标题名称的新表格列
【发布时间】:2016-06-01 19:45:44
【问题描述】:

我有一个简单的 vba 问题。我想要一个宏,它将在我的表对象(“Table1”)中添加正好 4 个新列。我也希望这些按从左到右的顺序命名:

AHT、目标 AHT、传输、目标传输

我下面的代码很好地添加了列,但我不确定如何单独命名。另外,有人可以告诉我如何循环那段代码。谢谢!

Sub insertTableColumn()
Dim lst As ListObject
Dim currentSht As Worksheet

Set currentSht = ActiveWorkbook.Sheets("Sheet1")
Set lst = ActiveSheet.ListObjects("Table1")

'below is the code that I would like to have looped
    lst.ListColumns.Add
    lst.ListColumns.Add
    lst.ListColumns.Add
    lst.ListColumns.Add

End Sub

【问题讨论】:

    标签: vba excel for-loop


    【解决方案1】:

    变量数组是将变量存储在循环序列中的好地方。

    Sub insertTableColumn()
        Dim lst As ListObject
        Dim currentSht As Worksheet
        Dim h As Long, hdrs As Variant
    
        hdrs = Array("AHT", "Target AHT", "Transfers", "Target Transfers")
    
        Set currentSht = ActiveWorkbook.Sheets("Sheet1")
        Set lst = ActiveSheet.ListObjects("Table1")
    
        With lst 'ActiveSheet.ListObjects("Table1")
            For h = 0 To 3
                .ListColumns.Add
                .ListColumns(.ListColumns.Count).Name = hdrs(h)
            Next h
        End With
    
    End Sub
    

    以这种方式创建字符串数组时,请记住变量数组的索引默认情况下是从零开始的。

    【讨论】:

    • 感谢您提供有关从零开始的索引的信息。我当然会质疑 0。
    • 我知道这是旧的,但如果您将硬编码:For h = 0 To 3 更改为以下内容:For h = Lbound(hdrs) to Ubound(hdrs),您可以避免整个“基于 0”的问题。这样做的好处是只需要维护进入数组的内容。
    【解决方案2】:

    以下代码会创建一个包含您要添加的列名的数组,然后根据要添加的标题循环多次并同时设置名称。

    Sub insertTableColumn()
    Dim lst As ListObject
    Dim currentSht As Worksheet
    
    Set currentSht = ActiveWorkbook.Sheets("Sheet1")
    Set lst = ActiveSheet.ListObjects("Table1")
    ColumnNames = Array("AHT", "Target AHT", "Transfers", "Target Transfers")
    
    ' below is the code that I would like to have looped
    For iLoop = 0 to UBound(ColumnNames)
        Set oLC = lst.ListColumns.Add
        oLC.Name = ColumnNames(iLoop)
    Next
    
    End Sub
    

    【讨论】:

    • 非常感谢您对 UBound 函数的介绍。我以前没有遇到过。只是一个简单的一般性问题 - 如果我想声明您的“ColumnNames”变量,我该怎么做?我试图将其声明为字符串,但我的代码生成了一个错误。声明要用作数组的变量的最佳实践是什么?再次感谢!
    • 你可以直接使用Dim ColumnNames As Variant(老实说我应该添加那行),但是如果你不指定变量类型是什么,VBA会自动将它定义为Variant,这将几乎可以接受任何类型,所以你可以简单地使用Dim ColumnNames :)
    猜你喜欢
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多