Есть ли способ применить формулу concat для диапазона с worksheet_change? - PullRequest
0 голосов
/ 04 января 2019

Недавно я обновил версию MS Office до Office 365 и обнаружил, что один из моих файлов Excel не работает.Это простой код для применения формулы объединения к некоторым столбцам, когда я вставляю данные в лист.

Что мне нужно делать с кодом?

Private Sub Worksheet_Change(ByVal Target As Range)

Range("B23:B4023").FormulaR1C1 = "=CONCATENATE(IF(RC[2]=""TTL"","""",RC[2]),IF(RC[3]="""","""",RC[3]),IF(RC[4]="""","""",RC[4]),IF(R7C4=""Class"",RC[6],RC[7]),RC[8],RC[5])"

End Sub

Обычно будет формулаприменить к столбцу B, чтобы объединить текст из столбцов D, E, F, G, H, I & J

Однако существует

ошибка времени выполнения '1004': метод 'Диапазон'объекта' _Worksheet 'не удалось.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Worksheet_Change запускается при каждом изменении содержимого в текущей рабочей таблице.Но когда этот код затем также изменяет содержимое в той же самой таблице, это приводит к бесконечным циклам, потому что каждое из этих изменений также запускает Worksheet_Change снова и снова.

Установка Свойство Application.EnableEvents до False перед кодом в Worksheet_Change позволяет избежать этой проблемы.

Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False
 Me.Range("B23:B4023").FormulaR1C1 = "=CONCATENATE(IF(RC[2]=""TTL"","""",RC[2]),IF(RC[3]="""","""",RC[3]),IF(RC[4]="""","""",RC[4]),IF(R7C4=""Class"",RC[6],RC[7]),RC[8],RC[5])"
 Application.EnableEvents = True
End Sub

Но зачем это нужно, если настройкаформулы каждый раз, когда содержимое меняется на листе?Почему бы не установить его только один раз?

0 голосов
/ 04 января 2019

Вам необходимо удалить .FormulaR1C1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...