Страницы: 1
RSS
счётесли....>30 и выделить в Listbox эту позицию цветом
 
Здравствуйте!  
На листе в колонке С:С есть данные, которые по одному отображаются в Listboxе. Нужно подсчитать их количество в С:С и выделить в Listboxе, допустим vbred если оно <30, и vbgreen если оно >30.  
Я примерно начал, но нужна помощь  
If WorksheetFunction.CountIf(Range("C:C"), Me.ListBox1.............) < 30    
Проблема с тем, что я не могу указать объект в ListBox, который надо просчитать и выделить его цветом в ListBox.
 
Совсем не понял ничего. Ведь у Вас задан диапазон ровно на 30 строк. Как же значение может быть меньше или больше?  
Но вот для дальнейшего использования код, если значение строк в ListBox = 30:  
Private Sub UserForm_Activate()  
Me.ListBox1.RowSource = "A1:A30"  
  If ListBox1.ListCount = 30 Then  
     ListBox1.ForeColor = &HFF&  
  End If  
End Sub
 
Глубоко извиняюсь, был в командировке.    
Задача в том,что нужно считать не диапазон A1:A30, а диапазон C:C, а A1:A30 представлен просто в листбоксе для списка. И необходимо выделить не весь листбокс, а только те данные в листбоксе, которые больше 30 или меньше 30.
 
Рустам, ситуация так и не прояснилась (для меня, по крайней мере). Что требуется считать? К-во строк в столбце С или сумму значений в этих строках? Если проверяем столбец С, то почему в ListBox  RowSource по столбцу А?    
Смотрите – в Вашем примере: количество строк по столбцу С = 50, сумма значений в этих ячейках = 124, к-во позиций в ListBox = 30. Что должно быть в этом случае? Что нужно каким-то образом выделить? Насчёт изменения цвета – вроде цвет применяется только ко всему списку.
 
{quote}{login=Юрий М}{date=23.02.09 13:17}{thema=}{post}Насчёт изменения цвета – вроде цвет применяется только ко всему списку.{/post}{/quote}При желании, можно извратиться:  
http://www.andypope.info/vba/colourdropdown.htm
 
Ёж, спасибо за пример. Но это действительно будет извращение - столько кода...
 
Хорошо, объясню вот так:  
=счётесли(С:С;1)>30 "дальше иду своими словами",то в листбоксе № 1 , должен окраситься в цвет. Также и для других    
=счётесли(С:С;2)>30    -  в листбоксе №2 окрашивается    
=счётесли(С:С;3)>30     -  в листбоксе №3 окрашивается и т.д.  
 
А диапазон А:А я указал, чтобы он просто отображался в листбоксе
 
Рустам, Вы гляньте по ссылке, что выложил Ёж. Как Вам такой код?
 
Код хороший, но немного сложноватый для меня, вот сижу разбираюсь. Юрий, а как можно вообще выделить в листбоксе один из 30 объектов каким либо цветом?
 
И ещё вопрос, но не по теме, чтобы их не размножать. У меня в форме 25 текстбоксов, и каждый раз перед каким либо поиском их надо очищать. Есть ли возможность за раз указать чтобы очистились сразу все
 
Смотрите ответ Ежа - про раскраску.
 
По вопросу очистки. предлагаемый код очистит все Text И ComboBox на форме:  
Sub ClearAllBox()  
  With UserForm1  
     Dim x As Control  
        For Each x In UserForm1.Controls  
           If TypeOf x Is MSForms.ComboBox Or TypeOf x Is MSForms.TextBox Then  
              x.Value = ""  
           End If  
        Next  
  End With  
End Sub
 
Спасибо за ответы Юрий, очистка работает, очень эффективно для работы
 
С примером ежа так и не понял как там всё работает. Помогите в вопросе. В листбоксе есть наименования от 1 до 30. Как выделить в листбоксе ForeColor цветом допустим наименование 5? А с условием для раскраски я как нибудь сам разберусь.  
Спасибо
 
можно с лэйблами попробовать поизвращаться,  
их всегото 30 шт надо  
Рассчитать Height , Top  и перебрать
 
по-моему это не серьёзно 30 шт. Label делать, ещё и подгонять их.
 
Рустам, с цветами возиться - действительно морока. Может вот так устроит? Только нужно будет добавить очистку второго ListBox.
 
Как выделить в листбоксе ForeColor цветом допустим наименование 5?    
 
 
я думаю что в листбоксе нельзя этого сделать
 
Да, так можно сделать Юрий, просто хотел чтоб по красивше было как-то. Раз, userform1_activate, а он тебе закрасил бы числа, которые больше скажем 30, или рядом хотя бы галочку поставил что ли.
 
Вот с Label. С одной. Но зато текст можно красить по условию. Да и фон тоже.
 
Вот ещё вариант. Выделяются позиции в ListBox1. Сейчас это делается по кнопке, но Вы можете применить данный подход и при активации формы. Поле для выбора критерия я вынес на форму только для проверки. Величину можете задать в теле самого макроса.
 
Юрий спасибо, можно сказать, что Вы достойно помогли. Буду пробовать, может что-то своё придумаю на Вашей основе.
Страницы: 1
Читают тему
Наверх