VBA包装IFERROR修改

我对VBA非常生疏,因此我认为对于那些对VBA更加熟悉的人来说,这将是一个简单的修改。 我想修改下面的公式,以便让我的IFERROR函数返回0,“”或n / a,如果发生错误。 目前我在网上find的代码是完美的,但不返回n​​ / a。 如果有人知道如何快速添加一个允许第三个选项循环的代码块将欣赏它。 代码来自www.TheSpreadsheetGuru.com

Sub WrapIfError_v2() 'PURPOSE: Add an IFERROR() Function around all the selected cells' formulas. _ Also handles if IFERROR is already wrapped around formula. 'SOURCE: www.TheSpreadsheetGuru.com Dim rng As Range Dim cell As Range Dim AlreadyIFERROR As Boolean Dim RemoveIFERROR As Boolean Dim TestEnd1 As String Dim TestEnd2 As String Dim TestEnd3 As String Dim TestStart As String Dim MyFormula As String Dim x As String 'Determine if a single cell or range is selected If Selection.Cells.Count = 1 Then Set rng = Selection If Not rng.HasFormula Then GoTo NoFormulas Else 'Get Range of Cells that Only Contain Formulas On Error GoTo NoFormulas Set rng = Selection.SpecialCells(xlCellTypeFormulas) On Error GoTo 0 End If 'Get formula from First cell in Selected Range MyFormula = rng(1, 1).Formula 'Create Test Strings To Determine if IFERROR formula has already been added TestEnd1 = Chr(34) & Chr(34) & ")" TestEnd2 = ",0)" TestStart = Left(MyFormula, 9) 'Determine How we want to modify formula If Right(MyFormula, 3) = TestEnd1 And TestStart = "=IFERROR(" Then Beg_String = "" End_String = "0)" '=IFERROR([formula],0) AlreadyIFERROR = True ElseIf Right(MyFormula, 3) = ",0)" And TestStart = "=IFERROR(" Then RemoveIFERROR = True Else Beg_String = "=IFERROR(" End_String = "," & Chr(34) & Chr(34) & ")" '=IFERROR([formula],"") AlreadyIFERROR = False End If 'Loop Through Each Cell in Range and modify formula For Each cell In rng.Cells x = cell.Formula If RemoveIFERROR = True Then cell = "=" & Mid(x, 10, Len(x) - 12) ElseIf AlreadyIFERROR = False Then cell = Beg_String & Right(x, Len(x) - 1) & End_String Else cell = Left(x, Len(x) - 3) & End_String End If Next cell Exit Sub 'Error Handler NoFormulas: MsgBox "There were no formulas found in your selection!" End Sub 

答案在于在以下代码块中更改End_String的值:

 'Determine How we want to modify formula If Right(MyFormula, 3) = TestEnd1 And TestStart = "=IFERROR(" Then Beg_String = "" End_String = "0)" '=IFERROR([formula],0) AlreadyIFERROR = True ElseIf Right(MyFormula, 3) = ",0)" And TestStart = "=IFERROR(" Then RemoveIFERROR = True Else Beg_String = "=IFERROR(" End_String = "," & Chr(34) & Chr(34) & ")" '=IFERROR([formula],"") AlreadyIFERROR = False End If 

例如,而不是

 & Chr(34) & Chr(34) & ")" 

你可以替代:

 & "NA())" 

这与你正在寻找的东西接近吗?