【问题标题】:Excel VBA Formula German/French/Italian/Russian/Dutch/Foreign FunctionExcel VBA公式德语/法语/意大利语/俄语/荷兰语/外国函数
【发布时间】:2018-08-28 00:58:41
【问题描述】:

当我向工作簿添加数据时,需要将公式从较早的单元格复制到新的单元格。

我使用以下公式来计算我的增长率:

=WENN(ODER(K9="";L9="");"";WENNFEHLER((L9-K9)/K9;""))

由于这非常耗时,我想用一个宏来改进它,并为此编写了以下代码:

Sub Growth()

Tabelle3.Range("O9").Formula = "=WENN(ODER(K9="";L9="");"";WENNFEHLER((L9-K9)/K9;""))"

Tabelle3.Range("O9:O14").FillDown


End Sub

但是,当我想运行代码“运行时错误'1004':应用程序定义或对象定义错误”发生在这一行:

Tabelle3.Range("O9").Formula = "=WENN(ODER(K9="";L9="");"";WENNFEHLER((L9-K9)/K9;""))"

有谁知道为什么会发生此错误以及如何解决?

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    代码中有两个主要错误 - 未转义 " 字符和使用 .Formula 而不是 .FormulaLocal" 字符应写入两次以在字符串中显示一次。请参阅此代码:

    Public Sub TestMe()
        Debug.Print "test"""""
    End Sub
    

    它打印test""。最后一个" 是字符串的结尾。关于公式,如果您想使用德语公式并加倍双引号,请使用 .FormulaLocal

    Range("O9").FormulaLocal = "=WENN(ODER(K9="""";L9="""");"""";WENNFEHLER((L9-K9)/K9;""""))"
    

    一般而言,避免使用.FormulaLocal 并使用.Formula,以使您的VBA 代码与来自意大利或法国的工作簿兼容,例如。这样的东西适用于 Excel 中的任何本地设置:

    Range("O9").Formula = "=IF(OR(K9="""",L9=""""),"""",IFERROR(((K9-K9)/K9),""""))"


    我通常做的事情如下:

    1. 编写公式,使其在 Excel 中工作;
    2. 手动选择;
    3. 运行这个:

    Public Sub PrintMeUsefulFormula()
    
        Dim strFormula  As String
        Dim strParenth  As String
    
        strParenth = """"
    
        strFormula = Selection.Formula
        strFormula = Replace(strFormula, """", """""")
    
        strFormula = strParenth & strFormula & strParenth
        Debug.Print strFormula
    
    End Sub
    
    1. 它会按照在即时窗口中的样子打印公式;
    2. 复制它;
    3. 在上面的代码中,您可以将Selection.Formula 替换为以下三个之一(以=IF(B1=C1,""Equal"",""Not Equal"") 为例)

      • Selection.FormulaLocal(获取德国的本地公式=WENN()
        =WENN(B1=C1;""Equal"";""Not equal"")
      • Selection.FormulaR1C1(获取 R1C1 格式的公式)
        =IF(RC[1]=RC[2],""Equal"",""Not equal"")
      • Selection.FormulaR1C1Local(使用本地公式获取 R1C1 格式) =WENN(ZS(1)=ZS(2);"Equal";"Not equal")

    【讨论】:

    • 10x @Vityata 为您提供帮助 :)
    • 我还尝试将我的范围从 Tabelle3.Range("O9:O14").FillDown 扩展到 Tabelle3.Range("O9:O").FillDown。它发生“对象'_workbook'的运行时错误1004方法'范围'失败”。你可能也知道这个有什么问题吗? :) @Vityata
    • @HPM - 你需要有一个正常的范围。例如。 Range("O:O")Range(O1:O5)Range(O1:O) 是非法的。这是值得阅读的东西 - rondebruin.nl/win/s9/win005.htm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    相关资源
    最近更新 更多