Возникла проблема с HeaderRowRange, чтобы перебрать все заголовки и изменить их значения - PullRequest
0 голосов
/ 22 октября 2019

Я пытался перебрать все заголовки в моей таблице в Excel, чтобы изменить их значения, если нет лучшего подхода.

Идея состоит в том, чтобы проверить, существует ли таблица, и если она не существует,однако создайте новую таблицу, и, поскольку (насколько мне известно) невозможно создать таблицу и дать имена заголовкам перед созданием, я должен изменить их имена после. Для этого я пытался использовать .HeaderRowRange.Address для зацикливания true всех ячеек в этом диапазоне и изменения значений заголовков, но С 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

Заранее спасибо

1 Ответ

1 голос
/ 22 октября 2019

Попробуйте выполнить итерацию по 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

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...