VBA 运行时错误 1004:范围(“ ”)。公式

LieTheng

基本上,我想根据另一个单元格的有效数字的数量更改一个单元格的有效数字。

我得到了一个适用于工作表单元格的公式,神奇公式的来源:https : //stackoverflow.com/a/41891803/9111492

现在,我想将该公式移动到 vbe,以便在按下按钮时将公式插入到单元格中。但我正面临一个错误。

这是我编辑并得到的代码

错误 1004

Dim NRC As Range
Range(NRC.Offset(-1, 35), NRC.Offset(-1, 38)).Formula = _
        "=TEXT(IF(" & NRC.Offset(-1, 39).Address & "<0,""-"","""")&LEFT(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""0.""&REPT(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00"")," & NRC.Offset(-1, 41).Address & "+1)*10^FLOOR(LOG10(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""0.""&REPT(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00"")),1),(""""&(IF(OR(AND(FLOOR(LOG10(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""0.""&REPT(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00"")),1)+1=" & NRC.Offset(-1, 41).Address & ",RIGHT(LEFT(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""0.""&REPT(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00"")," & NRC.Offset(-1, 41).Address & "+1)*10^FLOOR(LOG10(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""" & _
        "T(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00"")),1),1)=""0""),LOG10(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""0.""&REPT(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00""))<=" & NRC.Offset(-1, 41).Address & "-1),""0."",""#"")&REPT(""0"",IF(" & NRC.Offset(-1, 41).Address & "-1-(FLOOR(LOG10(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""0.""&REPT(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00"")),1))>0," & NRC.Offset(-1, 41).Address & "-1-(FLOOR(LOG10(TEXT(ABS(" & NRC.Offset(-1, 39).Address & "),""0.""&REPT(""0""," & NRC.Offset(-1, 41).Address & "-1)&""E+00"")),1)),0)))))"

NRC 是范围的名称

NRC.Offset(-1, 39) 是包含我想更改有效数字的数字的单元格

NRC.Offset(-1, 41) 是包含有效数字的单元格

任何帮助表示赞赏!

阿什利多格
  1. 您尝试复制的答案复制整个公式是它精确副本

=TEXT(IF(A1<0,"-","")&LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),(""&(IF(OR(AND(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)+1=sigfigs,RIGHT(LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),1)="0"),LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"))<=sigfigs-1),"0.","#")&REPT("0",IF(sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1))>0,sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)),0)))))

  1. 使用示例数据创建一个新工作簿

    • FileNewBlank Workbook在新工作表上:
    • 12.345在单元格中输入数字A1
    • 6在单元格中输入数字B1(并点击Enter
  2. 创建一个命名单元格sigfigs

    • 右键单击单元格B1,单击Define Name...
    • 输入sigfigs并按下Enter
  3. 接下来,创建一个新的VBA模块Alt+ F11 Alt+ I Alt+M

  4. 在新模块中,从第一行开始:(Option Explicit 始终您工作每个模块的顶部使用,尤其是在学习或排除代码故障时。)

  5. 跳过(空白)行,然后开始一个新的子,如:

    Sub PrecisionTest()

    ...然后点击Enter,VBE 将添加End Sub下面行。

  6. 在两Sub...之间End Sub将公式粘贴到 VBA 编辑器中:Ctrl+V

  7. 更换每组有引号的2套报价:

    • Ctrl+H
    • 找什么: "
    • 用。。。来代替: ""
    • 单击Replace All(应该说进行了 62 次替换。)
    • 单击OK并单击 X 以关闭Replace窗口。
  8. 粘贴的代码行开头,输入:Range("C1").Formula="

  9. 粘贴的代码行末尾,再输入一组引号:(或者只需单击不同的行,它将自动添加,因为它从末尾丢失。)"

你的模块现在应该是这样的:

Option Explicit

Sub PrecisionTest()

    Range("C1").Formula = "=TEXT(IF(A1<0,""-"","""")&LEFT(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00""),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00"")),1),(""""&(IF(OR(AND(FLOOR(LOG10(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00"")),1)+1=sigfigs,RIGHT(LEFT(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00""),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00"")),1),1)=""0""),LOG10(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00""))<=sigfigs-1),""0."",""#"")&REPT(""0"",IF(sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00"")),1))>0,sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),""0.""&REPT(""0"",sigfigs-1)&""E+00"")),1)),0)))))"

End Sub
  1. 单击sub某处并按 执行它F5工作表单元格C1将填充公式,其结果将是一个字符串: 12.3450

复制其他人发布的(工作)代码片段在所有经验水平的编码人员中都很常见,但是首先尝试准确复制代码以复制它很重要。

只有验证您的副本按预期工作(正确的结果;没有错误)之后,您才应开始根据需要添加自己的修改。一次做一个小的改变,在每次改变后执行代码来测试它以确保它仍然有效...... (特别是在 VBA 学习曲线的开始。)

此外,Excel 单元格用字母(列)和数字(行)表示,因此没有像您尝试做的那样带有负数的位置(并且您没有显示任何将NRC声明为对象的代码,也没有显示Set是一个Range,所以你没有Offset正确使用

这是一个链接,显示了Range对象的语法和示例,这是一个关于Offset方法的链接。我还建议您查看:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试插入公式时VBA运行时错误'1004'

VBA 中的 IF 条件公式 - 运行时错误“1004”

运行时错误1004在vba中复制长数组公式

在单元格中插入值或公式时,Excel VBA运行时错误1004

Excel VBA:在单元格中插入公式会给出运行时错误“ 1004”

带有Count和Countif公式VBA的运行时错误1004

如何在VBA中使用公式创建命名范围(运行时错误438)

Excel VBA运行时错误1004

VBA - 运行时错误“1004”

范围的VBA运行时错误1004“应用程序定义的错误或对象定义的错误”

运行时错误1004复制公式数组

替换公式时出现运行时错误1004

插入公式会导致运行时错误1004

VBA运行时错误1004:无法设置范围类的FormulaArray属性

VBA运行时错误1004的object_global范围失败

运行时错误'1004':范围类的选择方法失败VBA 2010

VBA 调试 - 运行时 1004:未计算 R1C1 公式

Excel VBA 运行时错误 1004 - ThisWorkbook.Connections

Excel VBA-运行时错误1004

Excel VBA宏出现运行时错误'1004'

在列中选择数据的VBA运行时错误1004

如何修复VBA运行时错误1004或424

Excel VBA Vlookup运行时错误1004

Excel VBA查找函数获取运行时错误1004

excel vba 错误 1004 范围

VBA运行时错误1004:尝试在Excel 2013中创建表时,对象_Global的方法范围失败

Excel VBA:运行时错误(对象“范围”的方法“值”失败),但仅在连续运行时

Excel-VBA-公式错误1004-

Excel VBA-表列公式-错误1004