Excel VBA सबमिशन नहीं हो रहा है जब लक्ष्य सेल संदर्भ सेल मान से भर गया है
 Nov 24 2020
जब मैं मैन्युअल रूप से "b37" के लिए मान दर्ज करना चाहता हूं, तो यह बहुत अच्छा काम करता है, लेकिन जब मैंने "= c20" डाला, उदाहरण के लिए, "b37" में कुछ भी नहीं होता है। जब मैं सेल में मान को संदर्भित करता हूं, तो मैं यह काम कैसे करता हूं, "c37" मैन्युअल रूप से "b37" के लिए मान दर्ज करने के बजाय बदल जाता है? धन्यवाद!
Sub Worksheet_Change(ByVal target As Range)
    If Intersect(target, Range("b37")) Is Nothing Then Exit Sub
    If IsNumeric(target.Value) Then
        If target.Value < 0.95 Then
            ActiveSheet.Shapes("Straight Connector 1").Line.ForeColor.RGB = vbRed
        ElseIf target.Value >= 0.95 And target.Value < 1 Then
            ActiveSheet.Shapes("Straight Connector 1").Line.ForeColor.RGB = vbGreen
        Else
            ActiveSheet.Shapes("Straight Connector 1").Line.ForeColor.RGB = vbYellow
        End If
    End If
End Sub
जवाब
TimWilliams Nov 24 2020 at 19:41
यदि आपको गणना पर प्रतिक्रिया करने की आवश्यकता है और मैन्युअल रूप से दर्ज किए गए मूल्य पर नहीं तो आप worksheet_calculateघटना का उपयोग कर सकते हैं ।
Private Sub Worksheet_Calculate()
    Dim v, clr As Long
    v = Me.Range("B37").value
    If not isnumeric(v) or len(v) = 0 then exit sub
    If v < 0.95 Then
        clr = vbRed
    ElseIf v >= 0.95 And v < 1 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    Me.Shapes("Straight Connector 1").Line.ForeColor.RGB = clr
End Sub
संपादित करें: यदि आपके पास जांच करने के लिए कई सेल हैं, तो आप तर्क को एक अलग उप में ले जा सकते हैं और इसे सेल + आकृति के प्रत्येक जोड़े के लिए कॉल कर सकते हैं।
Private Sub Worksheet_Calculate()
    SetLineColor Me.Range("B37"), Me.Shapes("Straight Connector 1")
    SetLineColor Me.Range("B40"), Me.Shapes("Straight Connector 8")
End Sub
Sub SetLineColor(c As Range, ln As Shape)
    Dim v, clr As Long
    v = c.value
    If not isnumeric(v) or len(v) = 0 then exit sub
    If v < 0.95 Then
        clr = vbRed
    ElseIf v >= 0.95 And v < 1 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    ln.Line.ForeColor.RGB = clr
End Sub
SackOvergrowth Nov 25 2020 at 17:47
Private Sub Worksheet_Calculate()
    SetLineColor1 Me.Range("B37"), Me.Shapes("Line 1")
    SetLineColor2 Me.Range("D35"), Me.Shapes("Line 2")
End Sub
Sub SetLineColor1(c As Range, ln As Shape)
    Dim v, clr As Long
    v = c.Value
    If Not IsNumeric(v) Or Len(v) = 0 Then Exit Sub
    If v < 0.95 Then
        clr = vbRed
    ElseIf v >= 0.95 And v < 1 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    ln.Line.ForeColor.RGB = clr
End Sub
Sub SetLineColor2(c As Range, ln As Shape)
    Dim v, clr As Long
    v = c.Value
    If Not IsNumeric(v) Or Len(v) = 0 Then Exit Sub
    If v < 88 Then
        clr = vbRed
    ElseIf v >= 88 And v < 100 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    ln.Line.ForeColor.RGB = clr
End Sub