2017-06-26 134 views
0

我試圖修改下面的代碼來檢查字符串,---。如果字符串存在,則返回值9999,否則進行公式:公式如果單元=值執行公式其他... Excel VBA

.Formula = "=IF(" & strLowLimCol & "2" = ""---"," & _ strMeasCol & "2-" & strLowLimCol & "2," & _ 9999)"

你能告訴我在哪裏,我的錯誤是什麼?

下面是完整的代碼:

Option Explicit 

Sub ReturnMarginal() 

    Dim ws As Worksheet 
    Dim lngLowLimCol As Long, strLowLimCol As String 
    Dim lngHiLimCol As Long, strHiLimCol As String 
    Dim lngMeasCol As Long, strMeasCol As String 
    Dim lngLastRow As Long 
    Dim wsf As WorksheetFunction 

    ' get worksheetfunction references 
    Set wsf = Application.WorksheetFunction 

    ' iterate worksheets 
    For Each ws In ThisWorkbook.Worksheets 

     ' validate LowLimit label is on sheet 
     If Not (ws.Rows(1).Find("LowLimit") Is Nothing) Then 

     ' get location of input data columns and number of rows 
     lngLowLimCol = wsf.Match("LowLimit", ws.Rows(1), 0) 
     lngHiLimCol = wsf.Match("HighLimit", ws.Rows(1), 0) 
     lngMeasCol = wsf.Match("MeasValue", ws.Rows(1), 0) 
     lngLastRow = ws.Cells(1, lngLowLimCol).End(xlDown).Row 

     ' get column letters for input data columns 
     strLowLimCol = Split(ws.Cells(1, lngLowLimCol).Address(True, False), "$")(0) 
     strHiLimCol = Split(ws.Cells(1, lngHiLimCol).Address(True, False), "$")(0) 
     strMeasCol = Split(ws.Cells(1, lngMeasCol).Address(True, False), "$")(0) 

     ' output headers 
     ws.Range("P1") = "Meas-LO" 
     ws.Range("Q1") = "Meas-Hi" 
     ws.Range("R1") = "Min Value" 
     ws.Range("S1") = "Marginal" 

     ' assign formulas to outputs 
     ' Meas-LO 
     'Range("P2:P" & lngLastRow).Select 
     ' With Selection 
     '  Selection.NumberFormat = "General" 
     '  .Value = .Value 
     ' End With 
     With ws.Range("P2:P" & lngLastRow) 
      .Formula = "=IF(" & strLowLimCol & "2" = ""---"," & 
       strMeasCol & "2-" & strLowLimCol & "2," & _ 
       9999)" 

     End With 

     ' Meas-Hi 
     With ws.Range("Q2:Q" & lngLastRow) 
      .Formula = "=IF(ISNUMBER(" & strHiLimCol & "2)," & _ 
       strMeasCol & "2-" & strHiLimCol & "2," & _ 
       9999 & "2)" 
       'strMeasCol & "2)" 
     End With 

     ' Min Value 
     With ws.Range("R2:R" & lngLastRow) 
      .Formula = "=MIN(P2,Q2)" 
     End With 

     ' Marginal 
     With ws.Range("S2:S" & lngLastRow) 
      .Formula = "=IF(AND(R2>=-3,R2<=3),""Marginal"",R2)" 
     End With 
     End If 

    Next ws 

End Sub 
+1

你丟失了' 「'在'9999開始)」 '應該是'「9999)」' –

回答

2

你有幾個錯誤的「」我覺得你行應爲:

.Formula = "=IF(" & strLowLimCol & "2 = ""---""," & _ 
strMeasCol & "2-" & strLowLimCol & "2, 9999)" 

所以,最後的結果將是(如果strLowLimCol是「 B」和strMeasCol爲 「C」)

IF(B2 = 「---」,C2-B2,9999)