Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Как безразмерный автофильтр на комбобоксах сделать Добавлено: 28.01.10 13:32  

Автор вопроса:  quest

Ответить

  Ответы Всего ответов: 28  

Номер ответа: 16
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #16
Добавлено: 03.02.10 21:37
quest,
Большое спасибо за материальную поддержку!

Ответить

Номер ответа: 17
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #17 Добавлено: 04.02.10 02:37
Я так и сделал...
Молодец. Быстро учишься

Ответить

Номер ответа: 18
Автор ответа:
 quest



Вопросов: 5
Ответов: 34
 Профиль | | #18 Добавлено: 04.02.10 11:13
AxeL пишет:
Молодец. Быстро учишься
 

Как раз долго, потому как редко и эпизодически - когда возникает текущая задачка, а до следующей - все забываю. Кста... ты забыл свой кошелек написать - а ведь первым откликнулся ;-)


Еще один вопрос не смог решить - попробовал сделать возможность выбора по нескольким значениям в комбо... не вышло.

Ответить

Номер ответа: 19
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #19
Добавлено: 04.02.10 23:18
Это задача не для комбо, а для листбокса в виде списка (не выпадающего) с мультивыбором.

Ответить

Номер ответа: 20
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #20 Добавлено: 05.02.10 05:14
Кста... ты забыл свой кошелек написать - а ведь первым откликнулся
R240321167255

Ответить

Номер ответа: 21
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #21 Добавлено: 05.02.10 08:58
Еще один вопрос не смог решить - попробовал сделать возможность выбора по нескольким значениям в комбо... не вышло.
Можно либо заменить комбобокс на листбокс, как сказал mc-black, либо добавить листбокс, в который будут добавляться позиции, выбранные пользователем. Можно предусмотреть кнопки или меню(если таковое на vba водится) управления листбоксом(добавить, удалить). В этом случае можно убрать функцию "ComboBox1_Change()" Перенеся весь функционал на кнопку или пункт меню добавить...

Ответить

Номер ответа: 22
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #22 Добавлено: 05.02.10 17:07
Примерный вид функций кнопок Добавить, Удалить и Очистить
  1. Private Sub Button_Add_Click()
  2. ListBox1.AddItem ComboBox1.Value
  3. End Sub
  4. Private Sub Button_Remove_Click()
  5. Count = ListBox1.ListCount - 1
  6. For i = 0 To Count
  7. If Count > 0 Then
  8.     If ListBox1.Selected(i) = True Then
  9.        ListBox1.RemoveItem i
  10.         i = i - 1
  11.         Count = ListBox1.ListCount - 1
  12.     End If
  13. End If
  14. Next
  15. End Sub
  16. Private Sub Button_Clear_Click()
  17. ListBox1.Clear
  18. End Sub

Ответить

Номер ответа: 23
Автор ответа:
 quest



Вопросов: 5
Ответов: 34
 Профиль | | #23 Добавлено: 05.02.10 17:30
AxeL пишет:
заменить комбобокс на листбокс

Да, это я как обычно не подумал.
mc-black пишет:
Set rng = wsh.Range(wsh.Cells(1, 1), wsh.Cells(m, n))
- это помогло, но вот что вылезло... Когда я запускаю форму из той надстройки, в комбо1 вставляется инфа из давным давно обрабатываемого этой надстройкой файла, видимо где-то в памяти сидит. Прошерстив код и не найдя виновника, понял, что 1. или много переписывать (поскольку большинство переменных только объявляю... ), 2. или как-то надо все оптом из памяти выбрасывать, не обращаясь к конкретной переменной, 3. или, чтобы ComboBox1 принудительно заполнялся из активной книги (это даст дополнительное преимущество - форма фильтрует данные в новый файл, а потом, среди полученного результата без лишних телодвижений можно отфильтровать по другому критерию)

Ответить

Номер ответа: 24
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #24 Добавлено: 06.02.10 07:34
Чтобы комбобокс1 заполнялся из активной книги надо написать примерно следующее
  1. Private Sub UserForm_Activate()
  2. Set Addr = ActiveWorkbook.Sheets(1).Range("A1" & ":" & Sheets(1).Cells(1, 1).End(xlToRight).Address(0, 0))
  3. For Each Cell In Addr
  4. CB1.AddItem Cell.Value
  5. Next
  6. End Sub
Единственный вопрос, который у меня возникает, не будет ли активирование формы активировать книгу, к которой она припривязана? В этом случае она одна будет активной всегда. Как вариант, для формы можно использовать WSO. Подробнее можно узнать здесь http://cs.usu.edu.ru/home/abv/

Ответить

Номер ответа: 25
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #25
Добавлено: 06.02.10 11:29
Когда я запускаю форму из той надстройки, в комбо1 вставляется инфа из давным давно обрабатываемого этой надстройкой файла, видимо где-то в памяти сидит.

В какой памяти? Не может этого быть, IMHO. Не знаю, как угадать в чем дело. Надо видеть, с чем ты работаешь. А насчет:
1. или много переписывать (поскольку большинство переменных только объявляю...

Надо наглядно оформлять код, не жалеть времени подробно прокомментировать назначения всех процедур/функций/обработчиков, смысл их параметров, назначение локальных переменных, основные смысловые блоки программы (например что перебирает тот или иной цикл или для чего служит набор условий if|else if|else|end if и т.д.). Также разумно и в одном стиле расставляются отступы и пустые строки, чтобы программа читалась одним взглядом даже без комментариев. В общем, сложное надо упрощать и тогда не запутаешься в своей программе, когда в ней станет достаточно много строк кода. Методически в плане оформления кода мне очень помогли книжки Дейтелов о программировании на языках C и C++.

Ответить

Номер ответа: 26
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #26
Добавлено: 06.02.10 11:42
Единственный вопрос, который у меня возникает, не будет ли активирование формы активировать книгу, к которой она припривязана? В этом случае она одна будет активной всегда. Как вариант, для формы можно использовать WSO. Подробнее можно узнать здесь http://cs.usu.edu.ru/home/abv/

Так зачем же размещать этот код прямо сразу в Обработчике. Я не знаю, что там у quest за настройка и как оттуда вызывается форма, поэтому совета дать не могу. Сначала выяснить, что у нас активно, сохранить объект, а потом уже строить. Насчет сторонних библиотек - я против, когда все можно сделать штатными средствами без избыточных конструкций. Сама по себе WSO - любопытная весчь. А вот насчет необъявления типов переменных и лапшевидного кода - мне так не нравится, AxeL.

Ответить

Номер ответа: 27
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #27
Добавлено: 07.02.10 11:46
Для создания множественного выбора через форму, а также для создания более сложных конструкций отбора из одного списка в другой я рекомендую quest изучить функционал Расширенного фильтра Excel 2003 с тем, чтобы использовать его возможности через форму и макрос.

Ответить

Номер ответа: 28
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #28 Добавлено: 08.02.10 02:40
А вот насчет необъявления типов переменных и лапшевидного кода - мне так не нравится, AxeL.
Писал на скорую руку, а так с помощью "Option Explicit" довольно удобно - все синтаксические ошибки сразу находятся...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам