Добрый день уважаемые форумчане. Есть пользовательская форма которая отображает статусы в зависимости от того найдено значение на листе или нет и если найдено в каком оно состоянии. Сейчас работает это все так [vba]
Код
Private Function ini() Dim ifnd1, ifnd2, ifnd3, ifnd4, ifnd5, ifnd6, ifnd7, ifnd8, ifnd9 As Range Set sahe = ActiveSheet '---------------------------------------------------------------------------group1------------------------------------------------------------------------------------------- With sahe Dim res As Range lLastCol = Cells.SpecialCells(xlLastCell).Column Set res = Range(Cells(2, 3), Cells(2, lLastCol)) End With With res
Set ifnd1 = sahe.Cells.Find("1 из 9", [c2], xlFormulas, , xlByColumns, xlNext) If ifnd1 Is Nothing Then fnd1 = 1 If Not ifnd1 Is Nothing Then If ifnd1.Offset(2).Interior.Color = vbYellow Then fnd1 = 2 If ifnd1.Offset(2).Interior.Color = vbGreen Then fnd1 = 3 If ifnd1.Offset(2).Value = "В работе" Then fnd1 = 4 If ifnd1.Offset(2).Value = "Статус выполнения " Then fnd1 = 1 End If If fnd1 = 1 Then status1 = "Не начат": color1 = vbWhite If fnd1 = 2 Then status1 = "С ошибками": color1 = vbYellow If fnd1 = 3 Then status1 = "Пройден": color1 = RGB(51, 153, 102) If fnd1 = 4 Then status1 = "Не завершен": color1 = vbWhite End with Me.S1.BackColor = color1: Me.S1.Caption = status1 End sub
[/vba] Это один из.. У меня таких значений по которым нужно выводить статусы 3 группы, в первой группе 9 значений во второй 2 и в третьей группе таких 4 значения. Код выше это только для одного значения и у меня на поиск каждого значения такой большой кусок кода. Как можно сделать что-то подобное циклом, чтобы он к примеру находил сначала "1 из 9" и заносил результат как-то а потом "2 из 9" и тд.? Чтобы и кода меньше было и быстрее работало. Файл пример во вложении.
Добрый день уважаемые форумчане. Есть пользовательская форма которая отображает статусы в зависимости от того найдено значение на листе или нет и если найдено в каком оно состоянии. Сейчас работает это все так [vba]
Код
Private Function ini() Dim ifnd1, ifnd2, ifnd3, ifnd4, ifnd5, ifnd6, ifnd7, ifnd8, ifnd9 As Range Set sahe = ActiveSheet '---------------------------------------------------------------------------group1------------------------------------------------------------------------------------------- With sahe Dim res As Range lLastCol = Cells.SpecialCells(xlLastCell).Column Set res = Range(Cells(2, 3), Cells(2, lLastCol)) End With With res
Set ifnd1 = sahe.Cells.Find("1 из 9", [c2], xlFormulas, , xlByColumns, xlNext) If ifnd1 Is Nothing Then fnd1 = 1 If Not ifnd1 Is Nothing Then If ifnd1.Offset(2).Interior.Color = vbYellow Then fnd1 = 2 If ifnd1.Offset(2).Interior.Color = vbGreen Then fnd1 = 3 If ifnd1.Offset(2).Value = "В работе" Then fnd1 = 4 If ifnd1.Offset(2).Value = "Статус выполнения " Then fnd1 = 1 End If If fnd1 = 1 Then status1 = "Не начат": color1 = vbWhite If fnd1 = 2 Then status1 = "С ошибками": color1 = vbYellow If fnd1 = 3 Then status1 = "Пройден": color1 = RGB(51, 153, 102) If fnd1 = 4 Then status1 = "Не завершен": color1 = vbWhite End with Me.S1.BackColor = color1: Me.S1.Caption = status1 End sub
[/vba] Это один из.. У меня таких значений по которым нужно выводить статусы 3 группы, в первой группе 9 значений во второй 2 и в третьей группе таких 4 значения. Код выше это только для одного значения и у меня на поиск каждого значения такой большой кусок кода. Как можно сделать что-то подобное циклом, чтобы он к примеру находил сначала "1 из 9" и заносил результат как-то а потом "2 из 9" и тд.? Чтобы и кода меньше было и быстрее работало. Файл пример во вложении.Amon
Dim status, color, i, fn For i = 1 To 9 fnd1 = 0: status = "": color = 0 ' или какой-то свой очистка от предыдущих значений fn = i & " из 9" Set ifnd1 = sahe.Cells.Find(fn, [c2], xlFormulas, , xlByColumns, xlNext) If ifnd1 Is Nothing Then fnd1 = 1 If Not ifnd1 Is Nothing Then If ifnd1.Offset(2).Interior.color = vbYellow Then fnd1 = 2 If ifnd1.Offset(2).Interior.color = vbGreen Then fnd1 = 3 If ifnd1.Offset(2).Value = "В работе" Then fnd1 = 4 If ifnd1.Offset(2).Value = "Статус выполнения " Then fnd1 = 1 End If If fnd1 = 1 Then status = "Не начат": color = vbWhite If fnd1 = 2 Then status = "С ошибками": color = vbYellow If fnd1 = 3 Then status = "Пройден": color = RGB(51, 153, 102) If fnd1 = 4 Then status = "Не завершен": color = vbWhite Me.Controls("S" & i).BackColor = color: Me.Controls("S" & i).Caption = status Next i
[/vba]
Просто организовать цикл можно так: [vba]
Код
Dim status, color, i, fn For i = 1 To 9 fnd1 = 0: status = "": color = 0 ' или какой-то свой очистка от предыдущих значений fn = i & " из 9" Set ifnd1 = sahe.Cells.Find(fn, [c2], xlFormulas, , xlByColumns, xlNext) If ifnd1 Is Nothing Then fnd1 = 1 If Not ifnd1 Is Nothing Then If ifnd1.Offset(2).Interior.color = vbYellow Then fnd1 = 2 If ifnd1.Offset(2).Interior.color = vbGreen Then fnd1 = 3 If ifnd1.Offset(2).Value = "В работе" Then fnd1 = 4 If ifnd1.Offset(2).Value = "Статус выполнения " Then fnd1 = 1 End If If fnd1 = 1 Then status = "Не начат": color = vbWhite If fnd1 = 2 Then status = "С ошибками": color = vbYellow If fnd1 = 3 Then status = "Пройден": color = RGB(51, 153, 102) If fnd1 = 4 Then status = "Не завершен": color = vbWhite Me.Controls("S" & i).BackColor = color: Me.Controls("S" & i).Caption = status Next i