Если бы формула могла изменить форматирование на листе, это привело бы к совершенно безумным эффектам для всех пользователей, потому что они не знали бы, почему все эти странные вещи действительно случаются. Вероятно, это основная причина, по которой формула / UDF не может ничего изменить на рабочем листе, она может только возвращать значение.
В качестве обходного пути вы можете использовать событие Worksheet_Change для форматирования права ячейки после того, как вы ввели формулу, которая содержит Sec2TS
. Итак, сначала мы проверяем, какие ячейки измененного диапазона (Target
) содержат формулы (Target.SpecialCells(xlCellTypeFormulas)
), а затем проверяем, содержит ли любая ячейка в этом диапазоне "Sec2TS"
в своей формуле, чтобы .NumberFormat
эта ячейка.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim CellsWithFormulas As Range
On Error Resume Next
If Target.Cells.CountLarge > 1 Then
Set CellsWithFormulas = Target.SpecialCells(xlCellTypeFormulas)
ElseIf Target.HasFormula Then
Set CellsWithFormulas = Target
End If
On Error GoTo 0
If CellsWithFormulas Is Nothing Then Exit Sub
Dim Cell As Range
For Each Cell In CellsWithFormulas.Cells
If InStr(1, Cell.Formula, "Sec2TS") > 0 Then
Cell.NumberFormat = "yyyy mmm dd hh:mm:ss"
End If
Next Cell
End Sub
Обратите внимание, что проверка Target.Cells.CountLarge > 1
необходима, поскольку при применении SpecialCells
только к одной ячейке VBA автоматически применяет ее к всем ячейкам рабочего листа , что делает код очень медленным.