В настоящее время я создаю таблицу в VBA и настраиваю TableStyle, которая работает хорошо. Однако иногда ячейки в таблице имеют форматирование ячейки или столбца до ее создания, что портит стиль таблицы. Когда я создаю таблицу, я хочу сначала очистить форматирование, КРОМЕ NumberFormat, который я хочу сохранить.
Я нашел этот ответ для захвата NumberFormat, а затем повторно применить к диапазону после использования ClearFormats,но, похоже, не работает в моем случае. Мой код:
Sub CreateTable(ws As Worksheet, rng As Range, tblname As String)
On Error Resume Next
ws.ListObjects(tblname).Unlist
On Error GoTo 0
Dim tbl As ListObject
Set tbl = ws.ListObjects.Add(xlSrcRange, rng, , xlYes)
Dim numfmt
numfmt = tbl.Range.NumberFormat
tbl.Range.ClearFormats 'works
tbl.Range.NumberFormat = numfmt ' doesn't work
'tbl.Range.NumberFormat = "0.00%" 'works
'Range("AE8:AE10").NumberFormat = "0.00%" ' works
tbl.TableStyle = "TableStyleMedium15"
tbl.Name = tblname
End Sub
Private Sub Workbook_Open()
Dim ws As Worksheet
Set ws = Worksheets("sheetname")
' Inject Main Table
Dim rng As Range
Set rng = ws.Range(ws.Range("A7"), ws.Range("A7").SpecialCells(xlLastCell))
Dim tblname As String
tblname = "MyTable"
Call CreateTable(ws, rng, tblname)
...
End Sub
Как сохранить форматы номеров ячеек / столбцов, не допуская другие форматы, которые могут конфликтовать с моей таблицей?
Обновление # 1
Основываясь на комментариях, я попробовал следующее, но мой синтаксис явно не совсем правильный, и цикл также невероятно медленный.
Dim numfmt
numfmt = tbl.Range.NumberFormat
tbl.Range.ClearFormats
For Each cell In tbl.Range
cell.NumberFormat = numfmt
Next cell
Я также нашел этот ответ: https://stackoverflow.com/a/3857225/7619676, которыйПохоже, что можно установить NumberFormat из массива, но с этим решением также борется с синтаксисом для двумерного диапазона.