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