Я использую метод поиска и изменения с использованием поля со списком и кнопок, но две важные общедоступные переменные продолжают обнуляться без видимой причины.
Целью методов является поиск типа устройства, затем поиск определенного устройства и изменение значения связанных ячеек. Кажется, он работает после первого нажатия кнопки, но если поле со списком не изменилось и кнопка нажата, важные переменные 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 , значит, устройство не может быть найдено.