Ваш код отключает флажки, но не включает их снова. После отключения их значение не может быть сброшено. Я предлагаю этот код вместо того, что у вас есть.
Dim Check As Boolean
Check = (Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 28).Value = "T")
With chkMorning
.Enabled = vbTrue
.Value = Abs(Check)
.Enabled = .Value
End With
Теперь, с помощью какого метода конкретная ячейка в указанном рабочем листе получает значение «T», или нет, я не могу сказать. Я уже предложил изучить последовательность. Учитывая, что изменение, внесенное во время, повлияет на проверяемую ячейку для флажка, это изменение может вступить в силу только в том случае, если Excel пересчитает лист, пока VBA выполняет вашу пользовательскую форму. Это я не знаю. Поэтому я не буду опираться на это.
Базовая c схема - это - или должна быть - считывать данные в форму, когда она открыта (инициализирована), добавлять, изменять или манипулировать этими данными в форме в то время как пользователь смотрит на него и возвращает обратно на лист дополнительные, измененные или измененные данные, когда пользователь готов (с помощью формы). Ваша концепция не следует этой схеме. Поэтому это создает проблемы, с которыми вам не нужно сталкиваться.