簡體   English   中英

VBA運行時錯誤1004:范圍(“”)。公式

[英]VBA Run-Time Error 1004: Range(“ ”).Formula

基本上,我想根據另一個單元的有效數字來更改一個單元的有效數字。

我有一個在工作表單元格中有效的公式,魔術公式的來源: 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 在新的工作表上:
    • 在單元格A1輸入數字12.345
    • 在單元格B1輸入數字6 (然后按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. 更換每組兩套報價的報價:

    • 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. 單擊子內部的某個位置,然后按F5執行它。 將使用公式填充工作表單元格C1 ,其結果將是字符串12.3450

所有經驗水平的編碼人員中,復制他人發布的(工作中的)代碼片段都很普遍,但是重要的是,首先嘗試完全復制該代碼以進行復制。

驗證副本可以正常工作(正確結果;無錯誤)之后,才應根據需要開始添加自己的修改。 一次進行一個小更改, 在每次更改后執行代碼以對其進行測試,以確保它仍然有效... (尤其是在VBA學習曲線的開頭)。

另外,Excel單元格用字母 (列)和數字 (行)引用,因此沒有像您嘗試的那樣帶有負數的頭寸(並且您沒有顯示任何代碼將NRC 聲明為對象,也沒有顯示Set作為Range ,因此您沒有正確使用Offset

這是一個顯示Range對象的語法和示例的鏈接 ,這是有關Offset方法的鏈接。 我還建議您退房:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM