Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2013, 17:28   #11
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

А если есть автофильтр? Я добавил к примеру использование автофильтра и ваш вариант почему то не стал работать? ПОчему?
Вложения
Тип файла: zip пример 4.zip (12.9 Кб, 5 просмотров)
konstantin1990 вне форума Ответить с цитированием
Старый 29.08.2013, 18:26   #12
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Капец какой-то...
Вы хоть разъясните что вы хотите получить, а то из вашего кода мозг можно поломать.
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 29.08.2013, 18:55   #13
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Watcher_1 Посмотреть сообщение
Капец какой-то...
Вы хоть разъясните что вы хотите получить, а то из вашего кода мозг можно поломать.
Поясняю. Есть комобобокс в котором есть определенные значения, выбирая эти значения начинает работать автофильтр в диапазоне от B1 до J19, далее отфильтрованные значения копируются в диапазон ячеек от b21 до b29. И вот эти отфильтрованные значения должны отображатся в листбоксе, но если применят код который я написал в листбокс появляются лишниие строки. Например если мы выбираем фамилию Сидоров, то в листбоксе должно быть всего две строки с содержанием данных по сидоровым. Я не являюсь программистом, но мне нужно решить одну прикладную задачу по работе.
konstantin1990 вне форума Ответить с цитированием
Старый 29.08.2013, 19:14   #14
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Так пойдет
Вложения
Тип файла: rar пример 4.rar (12.8 Кб, 7 просмотров)
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 29.08.2013, 19:27   #15
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

В примере все работает. Не в моей программе. Может кто поможет?
При запуске прогрраммы выберите "НБД" на форме с паролем нажмите ОК. Появится лист database. на этом листе содержится база аэропортов, с физическими характеристиками взлетно-посадочных полос. Эта база данных нужна для расчета характеристик взлета самолета. Если запустить форму main и ввести номер рейса, то все остальне окна разблокируются. В Frame которое имеет caption Аэропорт, содержится комбобокс под названием Apt, в этом Apt содержится название аэропортов. при выборе какого го либо аэропорта появляется форма dataapt, так вот в этой форме есть листбокс RW в котором и должна отображатся База данных по ВПП при чем только по одному, выбранному аэропорту!!! Код который вы сделали отлично работает в примере!!! но не работает у меня в этой чертовой программе!!! если у вас есть возможность, разобратся в этом маленьком кусочке этой проги, плиз, помогите!!! Если информации недостаточно, я вам отпишусь ещё!
Цель которую я преследую выложив это сюда сделать так, чтобы количество строк в Listbox RW на форме DataApt, была равно количеству строк автофильтра, я думаю, что судя по примеру все понятно будет!
Вложения
Тип файла: zip ACP114DDPNT2.zip (285.9 Кб, 5 просмотров)

Последний раз редактировалось konstantin1990; 29.08.2013 в 21:17.
konstantin1990 вне форума Ответить с цитированием
Старый 29.08.2013, 20:20   #16
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

можно еще без авто фильтра:

Код:
Private Sub ComboBox1_Change()
n = 0
ListBox1.Clear
lRow = Cells(Rows.Count, 1).End(xlUp).Row
    With Range("A2:A" & lRow)
        Set Rng = .Find(What:=ComboBox1.Value, LookAt:=xlWhole)
        If Not Rng Is Nothing Then
            Адрес = Rng.Address
            Do
                ListBox1.AddItem Rng
                ListBox1.List(n, 0) = Cells(Rng.Row, Rng.Column)
                ListBox1.List(n, 1) = Cells(Rng.Row, Rng.Column + 1)
                ListBox1.List(n, 2) = Cells(Rng.Row, Rng.Column + 2)
                ListBox1.List(n, 3) = Cells(Rng.Row, Rng.Column + 3)
                ListBox1.List(n, 4) = Cells(Rng.Row, Rng.Column + 4)
                ListBox1.List(n, 5) = Cells(Rng.Row, Rng.Column + 5)
                ListBox1.List(n, 6) = Cells(Rng.Row, Rng.Column + 6)
                ListBox1.List(n, 7) = Cells(Rng.Row, Rng.Column + 7)
                Set Rng = .FindNext(Rng)
                n = n + 1
            Loop While Адрес <> Rng.Address
        End If
    End With
Rows("20:29").Delete
Range("B20").Resize(ListBox1.ListCount, ListBox1.ColumnCount).Value = ListBox1.List
End Sub


Private Sub UserForm_initialize()
With ListBox1
    .Clear
    .ColumnCount = 8
    .ColumnWidths = "70;70;70;70;70;70;70;70;7"
    .ColumnHeads = True
End With

ComboBox1.AddItem "Иванов", 0
ComboBox1.AddItem "Петров", 1
ComboBox1.AddItem "Сидоров", 2
End Sub
Единственный способ стать умнее, играть с более умным противником...

Последний раз редактировалось staniiislav; 29.08.2013 в 20:50.
staniiislav вне форума Ответить с цитированием
Старый 29.08.2013, 20:26   #17
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

или так:

Код:
Private Sub ComboBox1_Change()
lRow = Cells(Rows.Count, 1).End(xlUp).Row
x = Range("A2:I" & lRow).Value
txt = ComboBox1.Text
j = 0
With ListBox1
    .Clear
    For i = 1 To UBound(x, 1)
        If x(i, 1) = txt Then
            .AddItem x(i, 1)
            .List(j, 0) = x(i, 1)
            .List(j, 1) = x(i, 2)
            .List(j, 2) = x(i, 3)
            .List(j, 3) = x(i, 4)
            .List(j, 4) = x(i, 5)
            .List(j, 5) = x(i, 6)
            .List(j, 6) = x(i, 7)
            .List(j, 7) = x(i, 8)
            j = j + 1
        End If
    Next i
End With
Rows("20:29").Delete
Range("B20").Resize(ListBox1.ListCount, ListBox1.ColumnCount).Value = ListBox1.List
End Sub


Private Sub UserForm_initialize()
With ListBox1
    .Clear
    .ColumnCount = 8
    .ColumnWidths = "70;70;70;70;70;70;70;70;7"
    .ColumnHeads = True
End With

ComboBox1.AddItem "Иванов", 0
ComboBox1.AddItem "Петров", 1
ComboBox1.AddItem "Сидоров", 2
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 29.08.2013, 20:58   #18
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

и инициализировать форму можно через массив+словарь:

Код:
Private Sub UserForm_initialize()
With ListBox1
    .Clear
    .ColumnCount = 8
    .ColumnWidths = "70;70;70;70;70;70;70;70;7"
    .ColumnHeads = True
End With
n = 0
lRow = Cells(Rows.Count, 1).End(xlUp).Row
x = Range("A2:A" & lRow).Value
With CreateObject("scripting.dictionary")
    .comparemode = 1
    For i = 1 To UBound(x)
        If Not .exists(x(i, 1)) Then
            .Item(x(i, 1)) = i
            ComboBox1.AddItem x(i, 1), n
            n = n + 1
        End If
    Next i
End With
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 29.08.2013, 22:20   #19
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

У вас классный вариант. Когда нет автофильтра это вообще огонь. Но как сделать так, чтобы в заголвке листбокс обозначались заголовки: Фамилия, Имя и т.д. чтобы columnheads выполняла свою функцию?
konstantin1990 вне форума Ответить с цитированием
Старый 30.08.2013, 09:38   #20
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от konstantin1990 Посмотреть сообщение
У вас классный вариант. Когда нет автофильтра это вообще огонь. Но как сделать так, чтобы в заголвке листбокс обозначались заголовки: Фамилия, Имя и т.д. чтобы columnheads выполняла свою функцию?

Код:
Если элемент управления связан с ячейками рабочего листа, посредством использования свойства RowSource/ListFillRange, то создать заголовки можно применив свойство ColumnHeads [FAQ]
В противном случае, создать собственные заголовки, можно использовав элемент управления Label и свойство Caption. Небольшой пример создания подобных заголовков можно скачать здесь.
информация взята вот от сюда:
http://www.msoffice.nm.ru/faq/macros...ms2.htm#faq201

короче не получится сделать заголовки, только lebal'ami
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ограничить количество строк vostok Microsoft Office Excel 7 02.01.2013 18:42
Сканирования строк. Зная количество строк и первый элемент, это количество символов с троке. dimon9 Общие вопросы C/C++ 8 02.11.2012 22:40
Как подсчитать количество строк в ListBox ? bakanaev Общие вопросы Delphi 2 19.06.2012 17:27
Можно ли узнать количество видимых строк в ListView\ListBox? TwiX Общие вопросы Delphi 7 03.08.2009 13:03
ListBox (количество строк) Vali_T Помощь студентам 6 06.10.2008 15:30