Так что у меня что-то вроде этого:#NAME? Ошибка в 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
, что если вы делаете '.Formula = "= ЕСЛИОШИБКА (А1 - А2 "" N/A" "")' –
Или попробуйте это '.Formula = "= ЕСЛИОШИБКА (" & Ячейки (1, colcnt) .address (false, false) & "-" & Cells (2, colcnt) .address (false, false) & "," "N/A" ")' –
'workheet' похоже, undefined ... И ваш код запускается через UDF 'Function'? Или через' Sub'? Я бы ожидал, что он сработает, если запустится как функция. –