首页 > 解决方案 > HeaderRowRange 循环遍历所有标题并更改其值的问题

问题描述

我试图遍历 Excel 表格中的所有标题以更改它们的值,除非有更好的方法。

这个想法是检查表是否已经存在,如果不存在,则创建一个新表,但是,由于(据我所知)不可能创建表并在创建之前为标题命名,我必须更改它们的名称后。为此,我试图使用.HeaderRowRange.Address循环该范围内的所有单元格并更改标题的值,但未触发With tCells

这是我的代码:

Sub novaLinha()
Dim iRow As Long
Dim ws As Worksheet
Dim tbl As ListObject
Dim tCells As Ranges
Dim tCell As Range

On Error Resume Next

Set ws = Worksheets("Dados")

If ws.ListObjects.count Then

Else
    Set tbl = ws.ListObjects.Add(xlSrcRange, Range(cells(1, 1), cells(1, 5)), , xlYes)

    With tbl
        .Name = "TabelaDados"
        .TableStyle = "TableStyleMedium2"
        Set tCells = Range(.HeaderRowRange.Address)
        Debug.Print Range(.HeaderRowRange.Address)
        With tCells
            Debug.Print tCells
            For Each tCell In tCells
                Debug.Print tCell
            Next tCell
        End With
    End With
End If

'iRow = ws.Cells(Rows.count, 1).End(xlUp).Row
'ws.Cells(iRow, 1).Value = ws.ListObjects.count
Exit Sub
    If Err.Number > 0 Then
        Debug.Print Err.Number & ":" & Err.Description
    End If
End Sub

提前致谢

标签: excelvba

解决方案


试试这个直接迭代tbl.HeaderRowRange.Cells

With tbl
    .Name = "TabelaDados"
    .TableStyle = "TableStyleMedium2"
    For Each tCell In tbl.HeaderRowRange.Cells
        Debug.Print tCell
    Next tCell
End With

注意上面的评论:错误处理:

  • Exit Sub在错误处理程序之前使用。因此,即使Err.Number > 0,您也不会打印错误。
  • On Error Resume Next只是告诉 IDE忽略所有错误。这意味着错误可能会加剧并导致进一步的错误,从而使故障排除变得更加困难。通常不赞成使用它,On Error Resume Next 尤其是当您将子例程的整个可执行主体包装在那种处理程序中时。有一些有限的/一次性使用的函数可以使用这个构造,但在这种情况下实现这不是一个好主意。

(据我所知)不可能在创建表之前创建表并为标题命名

如果您首先填充将构成范围的单元格,然后添加一个表格,则这是可能的:

Dim hdrRange As Range
Set hdrRange = Range("A1:E1")
Const HEADERS As String = "Alpha,Beta,Gamma,Delta,Epsilon"
hdrRange.Value = Application.Transpose(Application.Transpose(Split(HEADERS, ",")))
' Creates table with the headers already in place:
Set tbl = ws.ListObjects.Add(xlSrcRange, Range(Cells(1, 1), Cells(1, 5)), , xlYes)

With tbl
    .Name = "TabelaDados"
    .TableStyle = "TableStyleMedium2"
    For Each tCell In tbl.HeaderRowRange.Cells
        Debug.Print tCell
    Next tCell
End With

在此处输入图像描述

在此处输入图像描述


推荐阅读