[英]#NAME? Error in Excel VBA
所以我有这样的事情:
A B C ...
1 11 12 13
2 10 20 15
3 1 -8 -2
...
所以A3
, B3
,和C3
减去产生的A1
到A2
等。
如果您看一下表格的顶部,则有一个长长的公式栏,当您单击它时,它会显示一个单元格的公式。 如果您是手动填写工作表,则可以在该栏中输入= 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可以进行哪些操作有明确的限制,特别是您不能:
更改另一个单元格的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.