मेरे पास एक एक्सेल शीट है, जिसमें कॉलम ("लेबल" के रूप में कॉलम लेबल) है जिसमें कुछ वस्तुओं का प्रतिनिधित्व करने वाले तार होते हैं। मैंने यूडीएफ के साथ कॉलम की कोशिकाओं में तारों को बाद के कार्यों के लिए फिट करने के लिए परिवर्तित करने के लिए एक प्रक्रिया लिखी।

Sub change_label()

Dim i as long, Label as long, LR As long, Cel As Range, rng As Range, WS As Worksheet
Set WS = ThisWorkbook.Worksheets("Scope")

Label = WorksheetFunction.Match("Label", WS.Rows(1), 0)
LR = WS.Cells(WS.Rows.Count, Label).End(xlUp).Row
Set rng = WS.Range(Cells(2, Label), Cells(LR, Label))

For Each Cel In rng
Cel.Value = ChLabel(Cel.Value)
Next Cel

End Sub

    Function ChLabel(CellRef As String) As String
    If CellRef Like "Printer*" Then ChLabel = "PRINTER"
    If CellRef Like "Ink*" Then ChLabel = "INK"
    If CellRef Like "Ribbon*" Then ChLabel = "RIBBON"
    If CellRef Like "A4Paper*" Then ChLabel = "A4" 
    End Function

फ़ंक्शन, हालांकि, कभी-कभी इसमें मानदंडों से मेल खाने वाले स्ट्रिंग्स के लिए रिक्त सेल लौटाता है (उदाहरण के लिए स्ट्रिंग्स "प्रिंटर-एएक्स 1283" वाले सेल को "प्रिंटर" में परिवर्तित किया जाना चाहिए, लेकिन इसके बजाय एक खाली सेल वापस कर दिया गया था)। कभी-कभी जब मैं शीट को दोबारा खोलता हूं और प्रक्रियाओं को दोबारा चलाता हूं, तो यह सामान्य रूप से फिर से व्यवहार करता है।

क्या मुझे इसे ठीक से काम करने के लिए अपने कार्य में सुधार करना चाहिए?

0
John Liu 8 सितंबर 2020, 13:58

1 उत्तर

सबसे बढ़िया उत्तर

संभावित समाधानों में से एक है अपने यूडीएफ को केस-असंवेदनशील InStr फ़ंक्शन के साथ फिर से लिखना।

For txt in Array("Printer", "Ink", "Ribbon", "A4Paper")
  If InStr(CellRef, txt, vbTextCompare) = 1 Then
    ChLabel = UCase(txt)
    Exit For
  End If
Next txt
1
ENIAC 8 सितंबर 2020, 11:29