繁体   English   中英

#名称? Excel VBA中的错误

[英]#NAME? Error in Excel VBA

所以我有这样的事情:

        A        B        C      ...
1       11       12       13
2       10       20       15
3       1        -8       -2
...

所以A3B3 ,和C3减去产生的A1A2等。

如果您看一下表格的顶部,则有一个长长的公式栏,当您单击它时,它会显示一个单元格的公式。 如果您是手动填写工作表,则可以在该栏中输入= A1 - A2 ,它将为您填充A3

就我而言,我在代码中使用.Formula = "IFERROR(A1 - A2, ""N/A""")

我遇到的问题是,生成工作表时,而不是上面显示的所需输出,它显示的是这样的内容

       A        B        C      ...
1      11       12       13
2      10       20       15
3      #NAME?   #NAME?   #NAME?
...

如果我单击该单元格,则公式栏实际上表明它正在应用正确的公式,如果在单击公式栏后单击Enter,则会显示正确的数字。 就像我手动输入公式一样。

这是我的代码。 ConvertToLetter()接受一个整数并转换为列字符。

Public Function ProcessExcelRpt(dataArray(,) As Object) As Integer
   Dim ws As Worksheet
   Dim r As Range

   Try
       For i As Integer = 1 To xlWorkBook.Sheets.Count
           ws = xlWorkBook.Sheets(i)

           r = ws.Range("A8")
           ws.Range("A8").Resize(dataArray.GetUpperBound(0) + 1, dataArray.GetUpperBound(1) + 1).Value2 = dataArray
           ws.Range("A2").Value2 = ws.Range("A2").Value2.ToString() & FormatDate(ReportDate, "MMMM dd, yyyy")

           FormatColumns(ws, 8, dataArray.GetUpperBound(0) + 8)
           excel.CalculateFull()

           xlWorkBook.SaveAs(saveAs)
           Exit For
       Next
   Catch ex As Exception    
        Return -1
   End Try  

   Return 0
End Function

Public Sub FormatColumns(ws As Worksheet, ByVal firstRow As Integer, ByVal lastRow As Integer)
    Dim rng As Range

    Try
        Dim colCnt, rowCnt, i As Integer
        i = 0
        For rowCnt = firstRow To lastRow
           Dim row1, row2 As Integer

           row1 = rowCnt - 2 ' go back 2 rows 
           row2 = rowCnt - 1 ' go back 1 row

           ' Apply formula to each cell in each row
           For colCnt = 1 To 3
               rng = ws.Range(ConvertToLetter(colCnt) & rowCnt) ' A1 for ex  
               rng.Formula = "=IFERROR(" & ConvertToLetter(colCnt) & row1 & "-" & ConvertToLetter(colCnt) & row2 & ", ""N/A"")"
           Next

       Next      
    Catch ex As Exception

    End Try
End Sub

如果您将其作为Sub运行,则对我有用:

Sub foo(firstRow, lastRow)
Dim rng As Range
For rowCnt = firstRow To lastRow
   Dim row1, row2 As Integer

   row1 = rowCnt - 2 ' go back 2 rows
   row2 = rowCnt - 1 ' go back 1 row

   ' Apply formula to each cell in each row
   For colCnt = 1 To 3
      Set rng = Cells(rowCnt, colCnt) ' A1 for ex
      rng.Formula = "=IFERROR(" & Cells(row1, colCnt).Address & "-" & Cells(row2, colCnt).Address & ", ""N/A"")"
   Next

Next
End Sub

如果您尝试通过Function调用作为UDF执行此操作,则该操作将不起作用,因为对工作表上的UDF可以进行哪些操作有明确的限制,特别是您不能:

更改另一个单元格的值。

https://support.microsoft.com/zh-CN/kb/170787

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM