|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.06.2009, 13:19 | #1 |
Форумчанин
Регистрация: 20.01.2009
Сообщений: 138
|
Вопросы по GetOpenFilename и элементам формы Excel!!!
Всем привет!!! У меня аж целых пять вопросов... Что-то не нашел я ответы на них на форуме, и чтобы не создавать много тем, решил спросить всё сразу.
Итак вопросы: 1.Может кто подскажет как сделать в команде GetOpenFilename, чтобы в появляющемся окне в графе "Имя файла" появлялось конкреное имя файла, и ничего кроме файла с таким названием открыть было нельзя? 2. Можно ли в Combobox (когда не выбираешь из списка значение, а вводишь первую букву или цифру, а он предлагает варианты) сделать поиск только по цифрам ? Поясню: Есть номера заказов K-N52654, G-M56687, J-kl00456 и т.д. Так вот чтоб, набрав только цифры, он предлягал нужный вариант. Дело в том, что далее на выбранное значение ссылается Listbox. и Наоборот. Поиск по цифрам вроде идет, но при выборе значения выскакивает ошибка. Или может есть есть третий вариант, но чтоб значения выбирались также в предыдущих двух.(Примерный файл прилагаю.) 3. Как в TextBox сделать возможным ввод только цифр и больше ничего... Где-то на форуме вроде было, но я так и не смог найти?.. 4. Можно ли , чтоб высота listbox (и Frame, в котором он находится) изменялись при увеличении/уменьшении количества в нем значений? 5. Реально ли сделать форму прозрачной? В access это можно осуществить, а вот насчет Excel интересно узнать. Заранее благодарен за любую информацию!!!
Чтобы правильно задать вопрос, надо знать большую часть ответа.
Последний раз редактировалось Klim Bassenger; 19.06.2009 в 14:00. |
19.06.2009, 14:57 | #2 | |||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Цитата:
текстбокс отлавливает изменения, и после ввода каждого символа осуществляет поиск подходящих значений. Подходящие значения выводятся в расположенный ниже листбокс. Если подходящее значение - одно, то оно заносится в текстбокс автоматически. Цитата:
Цитата:
Впрочем, можно включить автоподбор размеров, но результат в этом случае мало предсказуем. Цитата:
|
|||||
19.06.2009, 15:17 | #3 |
Форумчанин
Регистрация: 20.01.2009
Сообщений: 138
|
[QUOTE=EducatedFool;293112]А зачем в этом случае вообще отображать диалоговое окно, если у пользователья всё равно не выбора???
Название файла всегда одинаковое, а вот в папках оно лежит в разных. и с разным названием.. Каждый месяц новая папка ... Вот и нужно, чтоб у пользователя выбор был на открытие любой папки, а вот выбор файла в этой папке должен сводиться к конкретному названию. По поводу 4. Можно ли , чтоб высота listbox (и Frame, в котором он находится) изменялись при увеличении/уменьшении количества в нем значений? то попытался через макрос посчитать непустые строки и умножить их на размер шрифта... Dim kAreaCount As Integer kAreaCount = Range([B2], Cells(Rows.Count, "B").End(xlUp)).Select ListBox1.Height = Selection.Rows.Count * (ListBox1.Font.Size + 2) Что-то похожее получается... Но не совсем. Может, что-то добавить нужно?.. А по-поводу остального... Я, конечно, догадывался, что это всё можно сделать... Наверно, не правильно задал вопрос... Хотелось бы узнать как именно осуществить всё то, о чем спрашивал... Пример кода или файлики бы посмотреть... Если, конечно, это не секретная информация...
Чтобы правильно задать вопрос, надо знать большую часть ответа.
|
20.06.2009, 17:35 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Режим прозрачности для формы и автоподбор высоты Listbox-а
По поводу GetOpenFilename так ничего и не придумал, кроме как после выбора пользователем файла проверять его имя на соответствие шаблону, и в случае выбора неподходящего файла вновь отображать диалоговое окно.
Остальное вроде реализовал: В верхний комбобокс можно вводить всё, что угодно. В нижний - только цифры. Поиск запускается при вводе только цифр в любой из комбобоксов. Реализована прозрачность формы - значения от 31 до 255 Значения от нуля разрешать не стал - а то потом сложно найти кнопку выключения режима прозрачности...
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 20.06.2009 в 18:26. |
22.06.2009, 15:59 | #5 |
Форумчанин
Регистрация: 20.01.2009
Сообщений: 138
|
[QUOTE=EducatedFool;293645]По поводу GetOpenFilename так ничего и не придумал, кроме как после выбора пользователем файла проверять его имя на соответствие шаблону, и в случае выбора неподходящего файла вновь отображать диалоговое окно.
Так и сделал... Новерное, ничего лучше не придумаешь...
Чтобы правильно задать вопрос, надо знать большую часть ответа.
|
22.06.2009, 16:02 | #6 |
Форумчанин
Регистрация: 20.01.2009
Сообщений: 138
|
А вот остальное - то, что нужно.... Супер!!!!
Единственное, что хочу уточнить - это по высоте listBox: Sub SetHeightOfListBox() maxHeight = 163: k = 10.2: n = maxHeight / k Select Case Me.ListBox1.ListCount Case 0: Me.ListBox1.Height = 1 Case 1 To n: Me.ListBox1.Height = Me.ListBox1.ListCount * k + 3 Case Else: Me.ListBox1.Height = maxHeight End Select End Sub Код как я понял на размер шрифта 8 расчитан... maxHeight = 163 - это максимальное кол-во элеменов (Которые видны без прокрутки 16 (163/10.2 = 16))... k + 3 - это расстояние между элементами... А вот откуда k = 10.2??? Как его посчитать??? Или просто подобрать до нужного шрифта??
Чтобы правильно задать вопрос, надо знать большую часть ответа.
|
22.06.2009, 16:05 | #7 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Код:
|
22.06.2009, 16:19 | #8 | |
Форумчанин
Регистрация: 20.01.2009
Сообщений: 138
|
Цитата:
Ну почти угадал ... Спасибо!!! Очень помогли!!! И последний вопрос для общего развития: Есть код, который добавляет в Listbox значения по критерию, выбранному из combobox1... (Значения в столбце U, критерия отбора в столбце V) Private Sub ComboBox1_Change() Dim i As Long, a() a = Range([U3], Cells(Rows.Count, "V").End(xlUp)).Value: ListBox1.Clear For i = 1 To UBound(a, 1) If a(i, 2) = ComboBox1.Value Then ListBox1.AddItem a(i, 1) Next End Sub Почему, если поменять Например, a = Range([A3], Cells(Rows.Count, "V").End(xlUp)).Value: ListBox1.Clear... то попадаю пустые значения???? Обязательно значения должны стоять в соседних столбцах???
Чтобы правильно задать вопрос, надо знать большую часть ответа.
|
|
22.06.2009, 16:29 | #9 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Когда Вы пишете a = Range([U3], Cells(Rows.Count, "V").End(xlUp)).Value
Вы переносите значения ячеек диапазона U3:V55 (к примеру, в столбце V последняя заполненная строка - 55) в двумерный массив, границы которого VBA назначает автоматически (в зависимости от количества строк и столбцов в переносимом диапазоне) В случае с диапазоном U3:V55 Вы получаете массив с размерностью (1 to 53, 1 to 2) 1 to 2 - поскольку в диапазон попадают лишь 2 столбца U и V. В случае с a = Range([A3], Cells(Rows.Count, "V").End(xlUp)).Value массив получает размерность (1 to 53, 1 to 22) - поскольку в диапазон попадают 22 столбца с A до V В первом случае в строке ListBox1.AddItem a(i, 1) в листбокс заносится значение из первого столбца массива (столбец U на листе), а проверяется (If a(i, 2) = ComboBox1.Value) значение из столбца V Во втором же - это столбцы A и B соответственно. Если бы Вы написали, из каких столбцов надо брать значения - я бы посказал решение в виде кода. Например, чтобы взять первый столбец из массива - пишем a(i, 1), если надо последний - a(i, UBound(a, 2))
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 22.06.2009 в 16:33. |
22.06.2009, 16:43 | #10 | |
Форумчанин
Регистрация: 20.01.2009
Сообщений: 138
|
Цитата:
Функция UBound(Upper Bound) служит для определения верхней границы (индекса самого последнего элемента) массива по заданному измерению... Человеку, который не селен в VBA сложно сопоставить все эти слова вместе и правильно понять, что же это такое... Мне нужно: критерий отбора - в Столбце V, а сами значения в столбце B. Может заодно подскажете как, после того, как в listbox появилось искомое значение, при нажатии клавиши (ENTER, к примеру), это значение собственно и выбиралось... Что-то вроде Userform_click... Но не щелкать мышкой по листбоксу, а по нажатии клавиши...
Чтобы правильно задать вопрос, надо знать большую часть ответа.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как отобразить модально диалог выбора файла GetOpenFileName? | bigcrush | Win Api | 3 | 13.05.2009 16:03 |
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) | Albert2008 | Общие вопросы Delphi | 4 | 21.08.2008 15:33 |
вопрос по сокетам и общение как в ICQ.Сложный вопрос... | Руслантус | Общие вопросы C/C++ | 2 | 12.08.2008 21:10 |
Вопрос по C++ | Sanek_ntsk | Свободное общение | 3 | 09.01.2008 14:45 |
Borland C++ не хочет видеть тип String? | SERGOO | Общие вопросы C/C++ | 3 | 10.06.2007 12:37 |