У меня есть лист, который добавляет таблицу для каждого проекта, который я получил в списке.
Но я не могу найти код для редактирования заголовков таблицы после добавления таблицы. Возможно, есть простое решение, но я не могу его найти.

Sub getAllProjectsTest()
    Dim totalSheet As Worksheet
    Set totalSheet = ThisWorkbook.Sheets("Total Overview")

    totalSheet.Range("A2:Z4000").Clear

    For Each project In Sheets("Projects-Tasks").Range("Projects")
        Dim LastRow As Long
        LastRow = totalSheet.Cells(Rows.Count, 1).End(xlUp).Row

        With totalSheet.Range("A" & LastRow).Offset(3, 0)
            .Value = project
            .Font.Size = 16
            .Font.Bold = True
        End With

        Dim ListStart As String
        ListStart = totalSheet.Range("A" & LastRow).Offset(4, 0).Address

        Dim TableWidth As String
        TableWidth = totalSheet.Range("A" & LastRow).Offset(4, 3).Address

        totalSheet.ListObjects.Add(xlSrcRange, Range(ListStart & ":" & TableWidth), , xlYes).Name = "Table" & project
        Range(ListStart & ":" & TableWidth).HorizontalAlignment = xlCenter

    Next project
End Sub
2
Goos van den Bekerom 15 Сен 2014 в 12:12

2 ответа

Лучший ответ

Становится проще, если работать с объектами. См. Этот пример

'
'~~> Rest of the code
'
Dim tbl As ListObject

Set tbl = totalSheet.ListObjects.Add(xlSrcRange, _
          Range(ListStart & ":" & TableWidth), , xlYes)

With tbl
    .Name = "Table" & project
    Debug.Print .HeaderRowRange.Address
End With
'
'~~> Rest of the code
'
1
Siddharth Rout 15 Сен 2014 в 12:21
Спасибо, это действительно делает его лучше, но как мне отредактировать заголовки таблицы из этого HeaderRowRange?
 – 
Goos van den Bekerom
15 Сен 2014 в 12:24
1
Вы имеете в виду tbl.HeaderRowRange.Cells(1, 1).Value = "Blah Blah"?
 – 
Siddharth Rout
15 Сен 2014 в 12:26
Да спасибо! Это должно сработать. немного пораскинул мозгами по этому поводу.
 – 
Goos van den Bekerom
15 Сен 2014 в 12:29

Еще один более интересный способ сделать это.

Sub trimHeaders()

Dim wlistobj As ListObject
Dim wlistcol As ListColumn
Set wlistobj = ThisWorkbook.Sheets(1).ListObjects(1)


For Each wlistcol In wlistobj.ListColumns
    wlistobj.HeaderRowRange.Cells(wlistcol.DataBodyRange.Column) = Trim(wlistobj.HeaderRowRange.Cells(wlistcol.DataBodyRange.Column))
Next wlistcol

End Sub
0
John 21 Авг 2019 в 00:20