Есть ли способ предотвратить возврат общедоступных переменных к предыдущему значению? - PullRequest
0 голосов
/ 14 июня 2019

Я использую метод поиска и изменения с использованием поля со списком и кнопок, но две важные общедоступные переменные продолжают обнуляться без видимой причины.

Целью методов является поиск типа устройства, затем поиск определенного устройства и изменение значения связанных ячеек. Кажется, он работает после первого нажатия кнопки, но если поле со списком не изменилось и кнопка нажата, важные переменные OSSstockNum и OSSstartingRowNum заменяются на ноль, поэтому цикл while не работает.

public OSSstockNum As Integer
public OSSstartingRowNum As Integer

Private Sub ComboBox1_Change()
    j = 1
    OSSfound = False

    While j <= Cells(Rows.Count, 2).End(xlUp).Row And OSSfound = False
        If Range("B" + CStr(j)).Value = ComboBox1.Value Then
            OSSfound = True
        Else
            j = j + 1
        End If
    Wend
    OSSstockNum = Range("I" + CStr(j)).Value
    OSSstartingRowNum = j + 2    
End Sub

Private Sub btnFaulty_Click()
    Dim intRowNum As Integer
    Dim OSSInput As String
    Dim CNAddress As String
    Dim statusAddress As String
    Dim assignAddress As String
    Dim condAddress As String

    OSSInput = InputBox("What is the Code of the " + ComboBox1.Value + " you 
    want to change to faulty?")
    intRowNum = 0
    OSSfound = False
    assignAddress = G1
    statusAddress = H1
    condAddress = I1

    While (intRowNum < OSSstockNum And OSSfound = False)
        CNAddress = "D" + CStr(OSSstartingRowNum + intRowNum)

        If Range(CNAddress).Value = OSSInput Then
            OSSfound = True
            assignAddress = "G" + CStr(OSSstartingRowNum + intRowNum)
            statusAddress = "H" + CStr(OSSstartingRowNum + intRowNum)
            condAddress = "I" + CStr(OSSstartingRowNum + intRowNum)
        Else
            intRowNum = intRowNum + 1
        End If
    Wend

    If OSSfound = True Then
        If (Range(statusAddress).Value = "FAULTY") Then
            MsgBox ("This device is already faulty")
        Else
            Range(assignAddress).Value = "FAULTY"
            Range(assignAddress).Interior.Color = RGB(255, 199, 206)
            Range(assignAddress).Font.Color = RGB(156, 0, 6)
            Range(statusAddress).Value = "FAULTY"
            Range(statusAddress).Interior.Color = RGB(255, 199, 206)
            Range(statusAddress).Font.Color = RGB(156, 0, 6)
            Range(condAddress).Value = "FAULTY"
            Range(condAddress).Interior.Color = RGB(255, 199, 206)
            Range(condAddress).Font.Color = RGB(156, 0, 6)
        End If
    Else
        MsgBox ("Sorry, the device you're looking for couldn't be found")
    End If
End Sub

Если найден входной поисковый термин, он должен изменить значение и форматирование выбранных ячеек, но при повторном нажатии кнопки цикл while в кнопке пропускается, поэтому значение true все еще равно false , значит, устройство не может быть найдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...