Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
как закрыть список combobox или метод обратный dropdown
 
Казанский, спасибо, я у себя так и делаю, метод "туда-сюда", т.е.
Код
combobox2.setfocus 'фокус на другой объект
combobox1.setfocus 'возвращаем фокус
но это колхоз, а по другому неполучается
Помогли? отпишись, а то мы же волнуемся )))
как закрыть список combobox или метод обратный dropdown
 
на форме есть combobox, в событии combobox_KeyUp я собираю новый список из диапазона ячеек на листе на основании введенного значений (например ввел букву а, собрался список со словами которые начинаются на букву "а" и т.д), но когда таких совпадений нет, то под комбобоксом продолжает висеть список с одной пустой строкой, мне нужно ее скрыть
Код
Private Sub combobox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'..........
Call сформировать_список(combobox.value)
If combobox.ListCount = 1 And combobox.List(0) = "" Then
    свернуть список???
else
    combobox.DropDown
end if
'...........
end sub
Изменено: guzen_pilot - 17.11.2016 14:22:12
Помогли? отпишись, а то мы же волнуемся )))
Решетка "#" в коде, что значит?
 
разобрался сам, подскажи другому :) вот ооочень простой пример на котором можно увидеть разницу в использовании решеток #
вкратце - с решетками предкомпиляция (если правильно назвал) выполняется не во всех блоках программы, а только "по ходу выполнения программы" на развилках условных операторов следуя только по линии где выполняется условие, если непонятно, читаем дальше, написал до тошноты подробно. Рассмотрим на примере, нам понадобится какая-нибудь ошибка о которую будет спотыкаться компилятор, в нашем примере мы будем использовать Option Explicit и не объявленную переменную. Строка - Option Explicit - в частности требует, чтобы все переменные, которые используются в коде, были объявлены (Dim b as integer) но мы специально не объявляем b, из-за этого, если мы попытаемся запустить наш первый вариант, то он не сработает, а компилятор остановится на строке b=2, хотя очевидно, что условие if "пробежит" по ветке ИСТИНА, (т.е. там где а=1), а блок else (там где b=2 ) выполнен не будет, и некоторые спросят - а каким образом "вылезла" ошибка, если в процессе выполнения кода мы никогда не попадем в то место где у нас есть ошибка? Дело в том, что VBA перед нашим запуском выполнил компиляцию нашего кода, т.е. пробежал по коду (причем по всем веткам, независимо от выполнения условия) и нашел (или не нашел) ошибки. В нашем случае он нашел не объявленную переменную. Во втором случае мы использовали решетки, которые указывают, что предварительную компиляцию следует выполнять только по пути выполнения программы игнорируя остальные ветки. Во втором примере наша ошибка находится в ветке куда программа не зайдет, поэтому компилятор пропустит ее и программа выполнится без проблем, хотя там есть ошибка, но она находится в ветке куда код "не заходил", но стоит нам "подложить" ошибку компилятору "под ноги" и он "споткнется". например поменяем знак больше на меньше (вариант3), что "повернет" ход выполнения программы в ветку else.

вариант1, остановится на строке b=1? т.к. она не объявлена
Код
Option Explicit
Sub test1()
Dim a As Integer
If 1 > 0 Then
    a = 1
Else
    b = 2
End If
MsgBox a
End Sub
вариант2, выполнится и появится msgbox с цифрой 1
Код
Option Explicit
Sub test2()
Dim a As Integer
#If 1 > 0 Then
    a = 1
#Else
    b = 2
#End If
MsgBox a
End Sub
пример3, споткнется на строке b=2
Код
Option Explicit
Sub test2()
Dim a As Integer
#If 1 < 0 Then     
    a = 1
#Else
    b = 2
#End If
MsgBox a
End Sub
Изменено: guzen_pilot - 12.11.2016 00:34:18
Помогли? отпишись, а то мы же волнуемся )))
Решетка "#" в коде, что значит?
 
Karataev, VBA7 по стольку, по скольку попал, меня интересовали решетки, справки хватило чтобы уловить смысл, еще раз спасибо  :)
Помогли? отпишись, а то мы же волнуемся )))
Решетка "#" в коде, что значит?
 
Казанский, со справкой не догадался  :oops:  смешно, но как то вылетело..... ладно, спасибо, дальше сам
Помогли? отпишись, а то мы же волнуемся )))
Решетка "#" в коде, что значит?
 
встретил кое-что, чего не видел до этого:
Код
#If VBA7 Then
'код
#Else
'код
#End If
Что значат решетки и как работает, нигде не нашел
Помогли? отпишись, а то мы же волнуемся )))
Вопрос. Как обратиться к элементу в списке Combobox который выбрали мышкой
 
В общем перенес действия для DEL В событие ComboBox1_KeyDown, в принципе, такая работа меня полностью устраивает, два своих вопроса я закрыл, осталось одно решить, как не дать "расклеиваться" Combobox и его выпадающему списку.

Как всегда, пример свой выкладываю, может кому сгодится.
Что он делает - в одном Combobox собирает 2 списка. из левого столбика (как из базы данных) на основании введенных БУКАФ формирует список для облегчения поиска нужной информации из всего списка и по нажатию кнопки ENTER с клавиатуры записывает их в правый столбик, этот список можно просматривать в этом же Combobox, и при необходимости исключать ненужные строки клавишей Delete. также списки отличаются цветами для наглядности (меняется цвет Combobox, в зависимости от того какой список внутри)  
Помогли? отпишись, а то мы же волнуемся )))
Вопрос. Как обратиться к элементу в списке Combobox который выбрали мышкой
 
Уточню. Мне нужно наладить удаление элементов из столбика Q в файле примере, я это делаю при нажатии кнопки DELETE, получается правильно если выбрать элемент стрелками и нажать Del, если выбрать мышкой, то работает криво!!!
Я только что заметил, что с кнопкой ENTER все работает и раком и боком, можно и мышкой выделять, и стрелками, можно даже не щелкать ЛКМ, а просто навести......... Где и что я упускаю?
Помогли? отпишись, а то мы же волнуемся )))
Вопрос. Как обратиться к элементу в списке Combobox который выбрали мышкой
 
SuperCat, Combobox1.List(ComboBox1.ListIndex) то же самое, что и Combobox1.Text и работают одинаково, вопрос не решает
Помогли? отпишись, а то мы же волнуемся )))
Вопрос. Как обратиться к элементу в списке Combobox который выбрали мышкой
 
мой вопрос №2 решает следующее:
Код
Private Sub ComboBox1_Change()
    ComboBox1.Select
End Sub
выделение автоматом снимается, но ComboBox1.Value возвращает пустоту, почему-то
по поводу первого вопроса: на MSDN нашел свойство SelectedText которое как раз и должно было вернуть мне выделенную строку, но вот внедрить у меня никак не получается, то ли я что-то недопонял, то ли руки.......
Изменено: guzen_pilot - 25.07.2016 22:43:06
Помогли? отпишись, а то мы же волнуемся )))
Вопрос. Как обратиться к элементу в списке Combobox который выбрали мышкой
 
ИЗМЕНЕНО:
есть пара неплохих решений, описание и файл пример в посту #8 ниже

Вопрос 1. Если наводим (не щелкаем) мышку на список под Combobox, то строчка подсвечивается. Как обратиться к этому элементу? Конкретно нужно удалить выделенный элемент (В отличие от выбора стрелками - Combobox.Value остается пустым


Вопрос 2. Даже если я щелкну мышкой по элементу, то он попадает в основную (верхнюю строку), но остается выделенным, и опять Combobox.Value у меня в данном случае возвращает пустоту


Вопрос 3.  Когда список "вывалился", если крутить колесо, то крутится страница, и список "отрывается" от ComboBox, как побороть? Может закрепить список, может запретить скрол.......


Как всегда надеюсь на вашу помощь, уважаемые Гуру
Изменено: guzen_pilot - 26.07.2016 10:34:08 (вопроос №1 и №2 решены)
Помогли? отпишись, а то мы же волнуемся )))
ComboBox с посимвольным отслеживанием введенного текста
 
уже думал сегодня объявить о решении проблемы:

во-первых открываем список не SendKeys ("%{Down}"), а ComboBox1.DropDown тогда нет проблемы с
Цитата
guzen_pilot написал:
если поле пустое, то при вводе первый введенный символ удаляется (при чем русские буквы, английские печатаются сразу)
во-вторых: чтобы была возможность листать список, я его формирую в KeyPress, а не в Change, но тогда опять одна проблема: список не переделывается при нажатии BackSpace.
Тогда начал ловить BackSpace в ComboBox1_KeyDown, но опять проблема (список формируется не по введенному тексту, а так:
   1. если вводим текст (введенный текст - 1 символ)
   2. когда удаляем символ, то по (тексту до удаления (т.е. то что сейчас + символ который уже удалили)),
конечно не существенно, но не совсем правильно, я так понимаю виной всему KeyDown.

Нужно: либо делать переформирование списка в change, но запретить если выбираем значение из выпадающего (можно проверить на точное соответствие введенного текста с имеющимися в списке (для меня это цикл, его не хочу), что-то типа Match....
или что-то с отслеживанием BackSpace делать, или еще как.
Еще вопрос: мы каждый раз, перед переопределением значений выпадающего списка - определяем массив со списком городов с листа, а если его как глобальный объявить при инициализации ComboBox и выгрузить в конце, так же лучше по идее должно быть?

Скидываю, что у меня пока получилось:
Изменено: guzen_pilot - 15.05.2016 16:59:30
Помогли? отпишись, а то мы же волнуемся )))
ComboBox с посимвольным отслеживанием введенного текста
 
решил...... способ некрасивый, но работает: добавляю в код два нажатия (так как процедура отрабатывает любое одно)
Код
    Application.EnableEvents = False
    SendKeys ("{8}")
    SendKeys ("{4}")
    Application.EnableEvents = True

внутри EnableEvents, чтобы не вызвать самого себя, потом их удаляю
Код
SendKeys ("{BACKSPACE}")
SendKeys ("{BACKSPACE}")

или
Код
ComboBox1.Value = ""
осталось решить еще, вдруг - вот только что, возникшую проблему.
хочу: ввел часть текста (два-три символа) и из раскрывшегося списка стрелкой выбрать нужное, сейчас пока при нажатии на стрелку вниз заполняется первый в списке элемент и это запускает change - что в свою очередь стирает список, буду дальше колдовать....... ну и кто знает как решить проще момент со стиранием первого символа, подскажите
Помогли? отпишись, а то мы же волнуемся )))
ComboBox с посимвольным отслеживанием введенного текста
 
Dima S, большое спасибо за MatchEntry, как-то вообще упустил, в принципе под себя все переделал, работает как надо, только один момент, в вашем приложенном примере тоже проявляется: если поле пустое, то при вводе первый введенный символ удаляется (при чем русские буквы, английские печатаются сразу) дальше можно вводить/удалять, все работает..... именно первый ввод символа в пустом боксе, у меня при GotFocus очищаю поле Value = "" (для моего удобства). Пытался программно вставить символ и удалить его, потом вставить введенный текст, но пока без успехов, в чем причина, как побороть?

Друзья, кто на сайте, помогите, ткните носом, почему, даже примитивно не могу справится
Изменено: guzen_pilot - 15.05.2016 02:23:42
Помогли? отпишись, а то мы же волнуемся )))
ComboBox с посимвольным отслеживанием введенного текста
 
Dima S, спасибо за ответ, но ничего нового - ComboBox1.Text отслеживает не мой введенный текст, а уже с автозаполнением, соответственно список формируется неправильно (надеюсь есть способ кроме посимвольного перехвата), и самое важное для меня - как после введения первого символа программно открыть список с предлагаемыми (отсортированными нами) значениями. Ручками так: вводим первую букву, щелкаем на стрелочке - открывается список, никуда не нажимаем, просто продолжаем вводить буквы, при этом список не закрывается а значения в списке программно меняются...... как его открыть программно после ввода первого символа, то есть сымитировать щелчок по стрелке  
Помогли? отпишись, а то мы же волнуемся )))
ComboBox с посимвольным отслеживанием введенного текста
 
Все решил, работает полностью как мне нужно:

Имеем: Список уникальный значений (подойдет для работы с фамилиями) и Combobox на листе(1)
Что хотим: при щелчке на Combobox раскрывается список взятый с листа, затем по мере ввода текста, из этого списка удаляются строки которые не соответствуют введенному тексту.
Что не делает: не сортирует и не удаляет повторы, не добавляет в базовый список введенные значения - есть куда стремиться  :)

вот код:
Код
    Sub ComboBox1_GotFocus()
        ComboBox1.Value = ""
        ComboBox1.Clear
        ComboBox1.MatchEntry = fmMatchEntryNone
        new_list
        ComboBox1.DropDown
    End Sub

    Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 38 Or KeyCode = 40 Then Exit Sub 'не реагируем на стреки вниз и вверх
            new_list
    End Sub

    Private Sub ComboBox1_Change()
        ComboBox1.DropDown
    End Sub

    Sub new_list()
        prew = ComboBox1.Value
        arr = Sheets(1).UsedRange.Columns(1).Value
        n = 0
        ReDim l_arr(n)
        For i = 1 To UBound(arr)
            If InStr(1, UCase(arr(i, 1)), UCase(prew)) > 0 Then
                ReDim Preserve l_arr(n)
                l_arr(n) = arr(i, 1)
                n = n + 1
            End If
        Next
        ComboBox1.List = l_ar
    End Sub
Во Вложении пример с настолько подробными комментариями, чтобы было понятно мне год назад  :)
Спасибо большое Dima S, без него ничего не получилось бы
Изменено: guzen_pilot - 15.05.2016 19:00:49
Помогли? отпишись, а то мы же волнуемся )))
Затемнение под UserForm
 
Цитата
guzen_pilot написал:
Выкладываю простенький пример
Еще защищенные листы (предварительно Unprotect), переходы между листами с формы (Deactivate листа - удаляем "тень" )...... Я знаю, спасибо ))
Помогли? отпишись, а то мы же волнуемся )))
Затемнение под UserForm
 
Суть: при открытии UserForm под ней, на листе куча ячеек с информацией, они "рябят" и чтобы не мешали работать с формой, решил сделать затемнение вокруг формы. Просто создал черный прямоугольник, подкрутил прозрачность, заодно форму сделал модальной, при щелчке вне формы, она закрывается. В общем убил двух зайцев, да и смотрится неплохо. Выкладываю простенький пример, может кому сгодится.

Друзья, прошу не судить строго если вдруг это никому не нужно, или все и так знают, или уже 100 раз другие делали....  
Изменено: guzen_pilot - 11.05.2016 21:37:02
Помогли? отпишись, а то мы же волнуемся )))
Выбрать уникальные строки по условию
 
то есть опять не то?
Помогли? отпишись, а то мы же волнуемся )))
Выбрать уникальные строки по условию
 
Может так, каприза?
Помогли? отпишись, а то мы же волнуемся )))
Вписать таблицу по ширине и высоте на одну страницу
 
в  цикле вариант у меня есть, он работает и проблем с ним нет (лучше чем сейчас он не сделает), посему в пример не включил
Цитата
guzen_pilot написал:
Есть у меня другой вариант, я в цикле уменьшал ширину, пока не пропадает разрыв, но там не точно по границе и время не нравится, намудрил кое-чего и уменьшил до 0,8 сек, но душу такой метод не греет
мой вопрос: Мы устанавливаем ширину столбиков в "локтях" а измеряем диапазон в "метрах", ок, не проблема, высчитали для одного в "метрах" и умножили на коэффициент для перевода "метров" в "локти", но!!!! результат-то не тот, причем разница существенная, 4-5 столбцов "вылетают" на другой лист, коэффициент у меня правильный, тогда в чем проблема? а решать ее нужно потому, что результат после цикла мне не нравится, а .FitToPWidagese = 1 приносит проблемы в 2007-ом.  чувствую что-то упускаю по незнанию (мысль такая - допустим columnwidth устанавливает не ширину столбца, а только ширину пространства внутри ячейки для текта, пропуская границы между ячейками или минимальный отступ от границы ячейки до текста, пиксель там - пиксель там, вот и набегает....... тонко? да, согласен, но я готов вникнуть, где о таком может быть написано? Вот допустим, когда я ставил масштаб 100%, а он упорно не ставился, потому, что нужно было формат бумаги задать (напр. А4 поставить), тогда только лист переопределяется и масштаб встает - это тоже тонкость, уверен многие также голову ломали, а я на планете решение нашел. Найдем и для столбцов, и выложим, людям нужно, я пока искал столько видел таких же вопросов, точно нужно
Помогли? отпишись, а то мы же волнуемся )))
Выбрать уникальные строки по условию
 
УУух вы !!!!!!!!!
ладно, несколько вопросов:
1. Риторический. Нельзя (я бы делал так) выделять только одну строчку для квартиры и в ней отмечать подключенные/отключенные услуги? Так искать нужную вам информацию легче всего
2. Сколько строк в вашем файле +/-
3. Сколько максимально раз одна и та же квартира может встречаться в вашем списке
4. Цель: я так понимаю у вас список в хронологическом порядке, и мы ищем только в крайней записи по квартире, тех пользователей, которые либо еще не подключили, либо уже отключили услуги? остальных не трогаем?
Помогли? отпишись, а то мы же волнуемся )))
Появилось слишком много строк, ошибка файла
 
сложно говорить о виртуальном, кидайте файл/ссылку, редко что-то сложное бывает, бывает объясняют проблему сложно......

у вас там картинок на листе нет случайно? оч похоже, кода все тупить жеско начинает, или формулы массивов ???
Помогли? отпишись, а то мы же волнуемся )))
Вписать таблицу по ширине и высоте на одну страницу
 
и тишина................. неужели ни кто не в курсе? не сталкивался? ...читал? ....слышал? ..... знакомый рассказывал? я старался, пример делал. Что почитать, где такие вещи обсуждают?
Помогли? отпишись, а то мы же волнуемся )))
Выбрать уникальные строки по условию
 
в i2 вставте и протяните
Код
=ЕСЛИ(И(C2<>"";E2="";F2="";G2="");"наш клиент!";"")
а если серьёзно, то это
Код
=ЕСЛИ(И(C2<>"";E2<>"Подключено";F2<>"Подключено";G2<>"Подключено");A2&" "&B2&"д.  "&D2&"кв. "&D2&" - "&E2&" "&F2&" "&G2&" "&H2;"")
Изменено: guzen_pilot - 06.05.2016 10:45:45
Помогли? отпишись, а то мы же волнуемся )))
Появилось слишком много строк, ошибка файла
 
для строк
Код
 ActiveSheet.Rows("6001:" & Cells(6000, 1).End(xlUp).Row).Clear

для столб
Код
ActiveSheet.Range(Columns(Range("AAU1").Column), Columns(Range("AAU1").End(xlToRight).Column)).Clear

MsgBox ActiveSheet.UsedRange.Address ' покажет используемы диапазон

прокручивается полосой только используемый диапазон - для удобства, если крутится дальше чем вроде-бы нужно, значит где-то есть еще минимум одна используемая ячейка, которая "растягивает" этот диапазон. используемой, ячейка считается даже если в ней визуально ничего нет, достаточно пробела, или формулы возвращающей пустоту ( ="" ), или в коде программы есть явное обращение к ней  (  напр. Range("XX6000").Value = 1  ) , а может заливка - вместо "нет заливки" кто-то белым залил, или границы..........
Помогли? отпишись, а то мы же волнуемся )))
Могут ли макросы перетащиться через внешние ссылки?, как макросы вообще могут появится в формате "Книга Excel 97-2003"
 
Цитата
kluvonog написал:
Вопрос: могут ли макросы появляться в документе через внешние ссылки или ещё каким-то "перетаскиванием", кроме явного создания через вкладку "разработчик".
могут, допустим:
Код
   With ActiveWorkbook.VBProject.VBComponents(Worksheets("Лист1").CodeName).CodeModule
        .InsertLines 1, "Sub Worksheet_Activate()"
        .InsertLines 2, "сделать_что_нибудь"
        .InsertLines 3, "End Sub" ' 1,2 и 3 - это строки в которые нужно записать код, в "" сам код
   end with
этот код впишет в активной книге в "Лист1"  код который при активации этого самого листа запустит макрос с названием "сделать_что_нибудь", который в большинстве случаев должен быть записан в модулях этой книги. Записать такой код можно откуда угодно, главное правильно обратиться к "цели", а еще желательно и проверить существует ли сам лист, а если другая книга, то открыта или закрыта в текущий момент......
Цитата
kluvonog написал:
А сломалось всё, как мне кажется, после удаления листа "рекомендации"
совершенно верно, хотя лист тоже программно можно удалить, но скорее всего, просто "диверсант" не сознается )))
Изменено: guzen_pilot - 06.05.2016 09:31:45
Помогли? отпишись, а то мы же волнуемся )))
Вписать таблицу по ширине и высоте на одну страницу
 
The_Prist, ну да, вопрос такой, что поймет только тот, кто сам ни один час на это не убил, честно именно на вас я больше всего расчитывал  :oops:
и с масштабом я столкнулся, когда страница все меньше и меньше (точнее текст) перед началом масштаб в 100 процентов ставлю.......
до ScreenUpdating сам честно догадался, и он мне помог, и я уже обрадовался все реально заработало, НО!! только на 2013 офисе (кстати, кто на нем только, мой код вполне сносный, на 10-ке не проверял), я уже даже не знаю что делать, почему в 2007 не работает, в пошаговом все норм, а так нет и все...... без FitToPagesWide = 1, все работает!!!!! Есть у меня другой вариант, я в цекле уменьшал ширину, пока не пропадает разрыв, но там не точно по границе и время не нравится, намудрил кое-чего и уменьшил до 0,8 сек, но душу такой метод не греет, я ведь планку себе поднял, массивы использую, бредовые мысли сделать анимацию в процессе выполнения макроса уже давно отпали )))))
Помогли? отпишись, а то мы же волнуемся )))
Выбрать уникальные строки по условию
 
в F4 вставьте и протяните, уберет те в которых уже есть подключенная
Код
=ЕСЛИ(СЧЁТЕСЛИМН(A:A;E4;B:B;"<>"&$F$1)>0;"";E4)
Помогли? отпишись, а то мы же волнуемся )))
Вписать таблицу по ширине и высоте на одну страницу
 
Ts.Soft, так лист поместиться, да, но либо строк будет больше, либо столбцов, мне нужно растянуть все нужные строки и столбцы до краев листа, в своем документе я в одном из вариантов я растягиваю по ширине, а затем подбираю необходимую высоту строк
Помогли? отпишись, а то мы же волнуемся )))
Страницы: 1 2 3 След.
Наверх