有什么方法可以使用worksheet_change将concat公式应用于范围吗?

时间:2019-01-04 03:25:37

标签: excel vba excel-vba

最近,我已将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'的方法'Range'失败。

2 个答案:

答案 0 :(得分:0)

Worksheet_Change在当前工作表中的每个内容更改上运行。但是,当此代码还更改了同一工作表中的内容时,则会导致无限循环,因为所有这些更改还一次又一次地运行Worksheet_Change

False中的代码之前将Application.EnableEvents property设置为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

但是,为什么在工作表中每次更改内容时都要设置公式呢?为什么不只设置一次?

答案 1 :(得分:-1)

您需要删除.FormulaR1C1