Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Цвета Label в форме в зависимости от рез-ов поиска - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цвета Label в форме в зависимости от рез-ов поиска (Макросы/Sub)
Цвета Label в форме в зависимости от рез-ов поиска
Amon Дата: Пятница, 10.08.2018, 12:29 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 60
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день уважаемые форумчане.
Есть пользовательская форма которая отображает статусы в зависимости от того найдено значение на листе или нет и если найдено в каком оно состоянии.
Сейчас работает это все так
[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" и тд.? Чтобы и кода меньше было и быстрее работало.
Файл пример во вложении.
К сообщению приложен файл: 0954254.xlsm(30.2 Kb)


Сообщение отредактировал Amon - Пятница, 10.08.2018, 12:30
 
Ответить
СообщениеДобрый день уважаемые форумчане.
Есть пользовательская форма которая отображает статусы в зависимости от того найдено значение на листе или нет и если найдено в каком оно состоянии.
Сейчас работает это все так
[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
Дата добавления - 10.08.2018 в 12:29
alex77755 Дата: Пятница, 10.08.2018, 13:44 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 361
Репутация: 64 ±
Замечаний: 0% ±

Отказаться от раскрасок!
Статус ставить в ячейки в цифровом формате.
Для обработки считывать в массив и работать с цифрами.


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеОтказаться от раскрасок!
Статус ставить в ячейки в цифровом формате.
Для обработки считывать в массив и работать с цифрами.

Автор - alex77755
Дата добавления - 10.08.2018 в 13:44
alex77755 Дата: Пятница, 10.08.2018, 14:04 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 361
Репутация: 64 ±
Замечаний: 0% ±

Просто организовать цикл можно так:
[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
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru


Сообщение отредактировал alex77755 - Пятница, 10.08.2018, 14:10
 
Ответить
СообщениеПросто организовать цикл можно так:
[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
[/vba]

Автор - alex77755
Дата добавления - 10.08.2018 в 14:04
Amon Дата: Пятница, 10.08.2018, 16:34 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 60
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
организовать цикл

Спасибо, все арбайтен так и хотел просто чтобы кода меньше было а то ппц.
 
Ответить
Сообщение
организовать цикл

Спасибо, все арбайтен так и хотел просто чтобы кода меньше было а то ппц.

Автор - Amon
Дата добавления - 10.08.2018 в 16:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цвета Label в форме в зависимости от рез-ов поиска (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!