Vba 宏,用于在多个单元格中写入包含变量的公式

Vba 宏,用于在多个单元格中写入包含变量的公式,vba,excel,Vba,Excel,我正在尝试创建一个甘特图,用条件格式更新图形,但为了做到这一点,我需要编写一个公式,在每个单元格中进行更改,我已经编写了一个宏来执行此操作,并且可以正常工作,但在编写完后,需要双击每个单元格才能正常工作,双击它后,它会自动更新,因此启用了自动计算,如果我使用“文本到列”,我可以使它们工作,但它们大约有650列,自动执行的宏不工作 如有任何建议,将不胜感激 这是我正在使用的代码: Sub formula_writer() Row = 2 col = 9 i = 0 row2 = ActiveCel

我正在尝试创建一个甘特图,用条件格式更新图形,但为了做到这一点,我需要编写一个公式,在每个单元格中进行更改,我已经编写了一个宏来执行此操作,并且可以正常工作,但在编写完后,需要双击每个单元格才能正常工作,双击它后,它会自动更新,因此启用了自动计算,如果我使用“文本到列”,我可以使它们工作,但它们大约有650列,自动执行的宏不工作

如有任何建议,将不胜感激

这是我正在使用的代码:

Sub formula_writer()
Row = 2
col = 9
i = 0
row2 = ActiveCell.Row
x = 0
    While i <= 100
        If i >= 99 Then
            x = x + 1
            ActiveSheet.Range("i9").Offset(x, 0).Select
            i = 0
            col = 9
            row2 = row2 + 1
        End If
        If x = 20 Then
            Exit Sub
        Else
            aCell = Cells(Row, col).Address(RowAbsolute:=True, ColumnAbsolute:=True)
            Selection.Formula = "" & "=SI" & "($A$" & row2 & " <> " & Chr(34) & Chr(34) & " , " & aCell & " , " & Chr(34) & Chr(34) & ")"
            ActiveCell = ActiveCell.Offset(0, 1).Select
            i = i + 1
            col = col + 1
        End If
    Wend
i = 0
x = 0
End Sub
子公式_writer()
行=2
col=9
i=0
row2=ActiveCell.Row
x=0
而i=99呢
x=x+1
ActiveSheet.Range(“i9”).偏移量(x,0)。选择
i=0
col=9
第2行=第2行+第1行
如果结束
如果x=20,则
出口接头
其他的
aCell=单元格(行,列).Address(行绝对值:=True,列绝对值:=True)
Selection.Formula=“”&“=SI”&“($A$”&row2&“&Chr(34)&Chr(34)&“,”&aCell&“,”&Chr(34)&Chr(34)&“)
ActiveCell=ActiveCell.Offset(0,1)。选择
i=i+1
col=col+1
如果结束
温德
i=0
x=0
端接头

您可以大大简化代码,但主要问题是代码中的公式(无论是R1C1还是A1)应该使用公式名称的英文版本。请尝试此更新:

Sub formula_writer()

Application.ScreenUpdating = False

Range("I10:DD28").numberformat="General"
Range("I10:DD28").FormulaR1C1 = "=IF(R[10]C1<>"""",R2C,"""")"

Application.Calculate
Application.ScreenUpdating = True
End Sub
子公式_writer()
Application.ScreenUpdating=False
范围(“I10:DD28”).numberformat=“一般”
范围(“I10:DD28”)。公式1C1=“=IF(R[10]C1”“,R2C”“”)
应用。计算
Application.ScreenUpdating=True
端接头

SI公式的代码是什么?这是UDF吗?对不起,我的办公室是西班牙语的,所以“SI”应该是“IF”,我要写的公式是=IF($A19“,$i$2”),谢谢!这要简单得多,但我也遇到了同样的问题,公式没有更新,它给了我一个#名字?错误,直到我双击它。我已将数字格式更改添加到代码中,您的区域最初可能会被格式化为文本?我尝试了您的新建议,但它有相同的问题,我的单元格实际上被格式化为日期,但即使我更改格式,它也会给我#名称?错误让我们试着用英语版本。将代码中的SI更改为IF。