У меня есть хорошая таблица с кодом VBA, который заполняет ее и форматирует автоматически (я работал над этим довольно давно).
Это очень хорошо, быстро, хорошо работает, но когда я смотрю на код, появляются десятки и десятки строк, касающихся форматирования ячеек ...
Есть ли способоптимизировать это, чтобы сделать его более восприимчивым к человеческому глазу / мозгу?
Я даю вам посмотреть:
Application.DisplayAlerts = False 'Deactivate the alerts in case the cell is filled
With Range("A" & PosStartLine + (TPICode * 3) - 3 & ":A" & PosStartLine + (TPICode * 3) - 1)
.Select
.Value = FullTPICode
.Interior.Color = RGB(220, 230, 241)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Borders.LineStyle = xlContinuous
.Font.Size = 11
.Font.Bold = True
.Merge 'Merging the 3 cells
.EntireRow.Borders(xlEdgeTop).Weight = xlMedium
.EntireRow.Borders(xlEdgeBottom).Weight = xlMedium
End With
Application.DisplayAlerts = True
'Writes down the details on the next column (as we're there... why not?)
With Worksheets(RealData).Range("B" & PosStartLine + (TPICode * 3) - 3)
.Select
.Value = "Nb cars done"
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.Interior.Color = RGB(216, 228, 188)
.Borders.LineStyle = xlContinuous
.Font.Size = 11
End With
With ActiveCell.Offset(1, 0)
.Value = "Nb cars left"
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.Interior.Color = RGB(217, 217, 217)
.Borders.LineStyle = xlContinuous
.Font.Size = 11
End With
With ActiveCell.Offset(2, 0)
.Value = "Price"
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.Interior.Color = RGB(252, 213, 180)
.Borders.LineStyle = xlContinuous
.EntireColumn.AutoFit
.Font.Size = 11
End With
Где-то еще:
Worksheets(RealDataReg).Activate
With Worksheets(RealDataReg).Range(Split(Cells(1, PosStartColumn).Address, "$")(1) & PosStartLine + (TPICode * 3) - 3 & ":" & _
Split(Cells(1, PosStartColumn + 61).Address, "$")(1) & PosStartLine + (TPICode * 3) - 3)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.Interior.Color = RGB(235, 241, 222)
.Borders.LineStyle = xlContinuous
.Font.Size = 11
End With
With Worksheets(RealDataReg).Range(Split(Cells(1, PosStartColumn).Address, "$")(1) & PosStartLine + (TPICode * 3) - 2 & ":" & _
Split(Cells(1, PosStartColumn + 61).Address, "$")(1) & PosStartLine + (TPICode * 3) - 2)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.Interior.Color = RGB(242, 242, 242)
.Borders.LineStyle = xlContinuous
.Font.Size = 11
End With
With Worksheets(RealDataReg).Range(Split(Cells(1, PosStartColumn).Address, "$")(1) & PosStartLine + (TPICode * 3) - 1 & ":" & _
Split(Cells(1, PosStartColumn + 61).Address, "$")(1) & PosStartLine + (TPICode * 3) - 1)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.Interior.Color = RGB(253, 233, 217)
.Borders.LineStyle = xlContinuous
.Font.Size = 11
End With
'Putting the calculation in the last cell of the table
With Worksheets(RealDataReg)
.Cells(PosStartLine + (TPICode * 3) - 3, PosStartColumn + 61).Formula = "=SUM(" & _
.Cells(PosStartLine + (TPICode * 3) - 3, PosStartColumn + 1).Address(False, False) & ":" & _
.Cells(PosStartLine + (TPICode * 3) - 3, Split(Cells(1, PosStartColumn + 60).Address, "$")(1)).Address(False, False) & ")"
End With
'Formatting the cells with the calculations
With Worksheets(RealDataReg).Range(Split(Cells(1, PosStartColumn + 61).Address, "$")(1) & PosStartLine + (TPICode * 3) - 3)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.Interior.Color = RGB(216, 228, 188)
.Borders.LineStyle = xlContinuous
.Font.Size = 11
.Select
End With
И так далее,и так далее ...
Кто-нибудь знает умный способ сделать все это форматирование более эффективным? nerer? Как вы, наверное, видели, форматирование каждый раз действительно похоже, но появляются небольшие различия (цвет, границы, диапазоны и т. д.)
Я думал о создании функции, которую я буду вызывать, но мне придется предоставить ей все ту же информацию, так что, думаю, это совершенно бессмысленно ... Например, еслиЯ беру этот блок форматирования:
With Worksheets(RealDataReg).Range(Split(Cells(1, PosStartColumn).Address, "$")(1) & PosStartLine + (TPICode * 3) - 3 & ":" & _
Split(Cells(1, PosStartColumn + 61).Address, "$")(1) & PosStartLine + (TPICode * 3) - 3)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.Interior.Color = RGB(235, 241, 222)
.Borders.LineStyle = xlContinuous
.Font.Size = 11
End With
Это могло бы выглядеть примерно так:
Call FormatFunction( Worksheets(RealDataReg), Range(Split(Cells(1, PosStartColumn).Address, "$")(1) & PosStartLine + (TPICode * 3) - 3 & ":" & _
Split(Cells(1, PosStartColumn + 61).Address, "$")(1) & PosStartLine + (TPICode * 3) - 3), xlRight, xlCenter, (235, 241, 222), xlContinuous, 11))
Но, конечно, были бы некоторые параметры, которые не нужны в некоторых случаях, поэтому яПри передаче параметров придется «стремиться к хорошим»проще сделать это с помощью стандартного форматирования VBA, я думаю ...
Я думаю, что есть стандартный умный способ сделать это, но я не смог ничего найти в Google (он просто дает мне результаты накак отформатировать таблицы, но я уже знаю, что: D)
Спасибо заранее!