【问题标题】:Runtime error 1004 when inserting simple formula with division插入带除法的简单公式时出现运行时错误 1004
【发布时间】:2020-02-04 05:47:10
【问题描述】:

我有这个小代码允许根据之前计算的数据填写表格:

(我们感兴趣的最后一行)

'inserts the values calculated
For Each CellCalc In Worksheets(WsPrevData).Range("D" & FirstLine + 2 + NbLinesYear * Counter + 2 * RegionCount - 2 & ":O" & FirstLine + 2 + NbLinesYear * Counter + 2 * RegionCount - 2)
    CountCells = 0
    CellCalc.Select
    For PackOfLines = FirstLine + 2 To FirstLine + 2 + NbLinesYear * Counter - NbLinesYear + 2 * RegionCount - 2 Step NbLinesYear
        If IsNumeric(Range(Split(Cells(1, CellCalc.Column).Address, "$")(1) & PackOfLines).Value) Then
            CellCalc.Value = CellCalc.Value + Range(Split(Cells(1, CellCalc.Column).Address, "$")(1) & PackOfLines).Value
            CountCells = CountCells + 1
        End If
    Next
    pouet = CellCalc.Value
    CellCalc.Formula = "=" & pouet & "/" & CountCells 'Runtime error 1004 here -_-
Next

基本上,它只是获取已填充数据中不同单元格中的值,然后对这些单元格进行平均,并将其写入最后一个单元格。

我希望除法得到值,而不是简单的纯数字。

因此,我使用“.formula”并尝试插入公式。这是我收到他以下错误消息的时候:

运行时错误 1004:应用程序定义或对象定义错误

pouet = 120,166907548137(双)

CountCells = 3(整数)

我尝试了不同的方法:

  • 删除“=”符号允许插入公式(变得无用)

  • 直接插入结果有效(但我想要计算的细节)

  • 将“pouet”转换为整数可以使其工作,但我会丢失小数...

  • 另一方面,将两个变量都设为 Double 并不能正常工作

  • 删除长数字中的一些数字不会改变任何事情

  • 删除斜线没有任何作用

  • 将 CountCells 定义为 double 不会改变任何事情

  • 使用 .FormulaR1C1 而不是 .Formula 没有任何改变

【问题讨论】:

  • Formula改成FormulaR1C1看看会发生什么
  • @Foxfire And Burns And Burns 什么都没有发生......仍然是同样的错误:(
  • 如果你想要一个“简单的普通数字”,我认为你的意思是一个整数,请使用int functionround function
  • @TimStack 引用:“我希望除法得到值,而不是简单的纯数字。” (好的,我编辑了它以使其更易于理解^^)
  • @TimStack 您的意思是替换变量“pouet”中包含的数字中的“小数分隔符”?我以前从来没有遇到过这个问题...我只是尝试将“pouet”转换为整数,它可以工作...但是我需要逗号:(

标签: excel vba formula


【解决方案1】:

我已将 Formula 更改为 FormulaLocal,它非常适合我

Dim pouet As Double
Dim CountCells As Integer

pouet = 120.166907548137

CountCells = 3 

Range("A1").FormulaLocal = "=" & pouet & "/" & CountCells

Range.FormulaLocal property

在 VBA 中,小数点分隔符是点,但在某些国家/地区(例如我的国家,我猜像您的国家),小数分隔符是逗号。当您使用FormulaFormulaR1C1 时,VBA 需要英文格式的值(并且公式的名称必须是英文,并且参数用逗号分隔等等),但是如果您使用FormulaLocal,您可以使用您的区域设置。

上面的代码非常适合我。希望这会有所帮助

更新:嗯,另一件令人惊讶的事情是:

Range("A1").Formula = "=" & Replace(pouet, ",", ".") & "/" & CountCells

【讨论】:

  • 嗯,非常感谢!我仍然对 Excel 产生这样的问题感到震惊......但是,这是否意味着在小数分隔符不是逗号的国家,它仍然可以工作?
  • 问题是您正在构建一个带有双精度值的字符串,其中包含一个点作为小数点。例如:Range("A1").Formula = "=10.5/0.5" 将正常工作。一旦涉及变量,您可能会遇到@FoxFireAndBurnsandBurns 在此处描述的问题。
  • 好问题,我不确定它是否有效。来自美国的人应该测试我发布的代码并检查会发生什么。我可以说,如果您将FormulaLocal 与带有您的语言名称的函数结合使用,它肯定会失败。
  • @FoxfireAndBurnsAndBurns 它有效,它只是“逗号 - 点”小数分隔符问题......让我震惊的是“CellCalc.Value”(也称为“pouet”)中的值来自Excel的计算,我自己没有输入值...因此,Excel会产生它自己的问题...无论如何,谢谢大家:)
猜你喜欢
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多