Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автозаполнение листа с формы с индекс-ным поиском по первым - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автозаполнение листа с формы с индекс-ным поиском по первым (Макросы/Sub)
Автозаполнение листа с формы с индекс-ным поиском по первым
combat Дата: Вторник, 29.09.2015, 14:11 | Сообщение № 21
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
а пришлите полностью файл который работает
 
Ответить
Сообщениеа пришлите полностью файл который работает

Автор - combat
Дата добавления - 29.09.2015 в 14:11
Roman777 Дата: Вторник, 29.09.2015, 14:26 | Сообщение № 22
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Вот файлик, вроде тыкаю туда-сюда и редактирую-сохраняю... всё работает.
К сообщению приложен файл: __97-2003_1_.7z (85.6 Kb)


Много чего не знаю!!!!
 
Ответить
СообщениеВот файлик, вроде тыкаю туда-сюда и редактирую-сохраняю... всё работает.

Автор - Roman777
Дата добавления - 29.09.2015 в 14:26
combat Дата: Вторник, 29.09.2015, 14:35 | Сообщение № 23
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
а ну у вас тоже самое, вот смотрите, допустим в поиске выберем осциллограф, отечественные у нас начинаются с С1-, что и наберите в техкстбоксе и и выделе те из списка любой допустим с1-101, а выходит Толщиномеры ультразвуковые 25, рег № 29754-05 , вот где проблема
 
Ответить
Сообщениеа ну у вас тоже самое, вот смотрите, допустим в поиске выберем осциллограф, отечественные у нас начинаются с С1-, что и наберите в техкстбоксе и и выделе те из списка любой допустим с1-101, а выходит Толщиномеры ультразвуковые 25, рег № 29754-05 , вот где проблема

Автор - combat
Дата добавления - 29.09.2015 в 14:35
Roman777 Дата: Вторник, 29.09.2015, 15:13 | Сообщение № 24
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat, блин, глянул ещё раз код, фигни Вам насоветовал. Получается что listindex я беру не в те моменты. Смотрите поставьте так красную точку (она назначает остонов выполнения программы, далее будем смотреть пошагово (чтобы перейти на следующий шак надо будет нажимать F8).

Далее запускаете форму по клику на "Заполнить свидетельтсво"
ставите в поиск по буквам курсор и вводите символ. В момент изменения содержания данного поля, срабатывает условие TextBox1_Change()
на том месте, где поставили красную точку код приостановился... далее жмём F8 и каждый шаг это F8. Видно, что у Вас при очищении:
[vba]
Код
    ListBox1.Clear
[/vba]
Содержимое листбокса меняется - соответственно сразу же срабатывает Listbox1_Change()
Вот Вам этого не нужно, поэтому, на самом деле тут первое изменение, а именно [vba]
Код
roww = UserForm2.Listbox1.ListIndex+1
[/vba] без всяких добавлений условий было правильно. Всего на всего надо в момент срабатывания TextBox1_Change() заставить программу не срабатывать на ListBox1_Change(). Единственный ньюанс, я пока не знаю как это сделать... уже попробовал List.Enable=false и Application.EnableEvents=False... чтото это не помогает. Мне пока что это странно...)
не пойму почему рисунок не отображается (ссылка с гуглоблака)... прикреплю файлом.
К сообщению приложен файл: 4085755.rar (8.7 Kb)


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 29.09.2015, 15:19
 
Ответить
Сообщениеcombat, блин, глянул ещё раз код, фигни Вам насоветовал. Получается что listindex я беру не в те моменты. Смотрите поставьте так красную точку (она назначает остонов выполнения программы, далее будем смотреть пошагово (чтобы перейти на следующий шак надо будет нажимать F8).

Далее запускаете форму по клику на "Заполнить свидетельтсво"
ставите в поиск по буквам курсор и вводите символ. В момент изменения содержания данного поля, срабатывает условие TextBox1_Change()
на том месте, где поставили красную точку код приостановился... далее жмём F8 и каждый шаг это F8. Видно, что у Вас при очищении:
[vba]
Код
    ListBox1.Clear
[/vba]
Содержимое листбокса меняется - соответственно сразу же срабатывает Listbox1_Change()
Вот Вам этого не нужно, поэтому, на самом деле тут первое изменение, а именно [vba]
Код
roww = UserForm2.Listbox1.ListIndex+1
[/vba] без всяких добавлений условий было правильно. Всего на всего надо в момент срабатывания TextBox1_Change() заставить программу не срабатывать на ListBox1_Change(). Единственный ньюанс, я пока не знаю как это сделать... уже попробовал List.Enable=false и Application.EnableEvents=False... чтото это не помогает. Мне пока что это странно...)
не пойму почему рисунок не отображается (ссылка с гуглоблака)... прикреплю файлом.

Автор - Roman777
Дата добавления - 29.09.2015 в 15:13
combat Дата: Вторник, 29.09.2015, 15:26 | Сообщение № 25
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Мне один опытный программист посоветовал:

Собственно, в Вашем примере этот трюк уже реализован - только вместо того, чтобы заполнять
первый столбец бессмысленным счётчиком, Вы можете загружать в него данные столбца F, а затем,
по мере необходимости, получать данные этого столбца используя свойство .ListIndex


А вот как это реализовать? .... может Вас натолкнет на мысль, только не понятно данные столбца F это перечень эталонов
 
Ответить
СообщениеМне один опытный программист посоветовал:

Собственно, в Вашем примере этот трюк уже реализован - только вместо того, чтобы заполнять
первый столбец бессмысленным счётчиком, Вы можете загружать в него данные столбца F, а затем,
по мере необходимости, получать данные этого столбца используя свойство .ListIndex


А вот как это реализовать? .... может Вас натолкнет на мысль, только не понятно данные столбца F это перечень эталонов

Автор - combat
Дата добавления - 29.09.2015 в 15:26
Roman777 Дата: Вторник, 29.09.2015, 15:26 | Сообщение № 26
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat,

Не дождался Вашего вопроса, но в общем так тоже работает.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 29.09.2015, 15:27
 
Ответить
Сообщениеcombat,

Не дождался Вашего вопроса, но в общем так тоже работает.

Автор - Roman777
Дата добавления - 29.09.2015 в 15:26
Roman777 Дата: Вторник, 29.09.2015, 15:33 | Сообщение № 27
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
А собственно про совет Вашего программиста. Он очень похож на моё раннее предложение. В котором я Вам предлагал добавить массив Arrr(). Думаю что-то такое он и имел в Виду. В массив записывается положение row. А далее выгружается уже в событии ListBox1_Change(). Но В вашем случае это не нужно, поскольку у Вас положение row (строки на листе БАЗАСИ) численно равно положению Индекса строки в листбоксе + 1. А все проблемы возникали только из-за того, что у Вас при срабатывании ТекстБокс1 - происходило очищение Листбокса, которое влекло на срабатывание Listbox1_Change() а тут Вам этого не было нужно) поэтому я добавил условие на выход из ListBox1_Change() пока выполняется операция ТекстБокс1_Change()

Хотя смотрю, проблема осталась... ещё погляжу чуть позже...)
Глянул, всё же без массива тут не обойтись) поскольку Listindex для нового Lisbox1 (который собран по выбранным символам в ТехтBox1) будет уже отличаться от положения строки в БазаСи.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 29.09.2015, 15:38
 
Ответить
СообщениеА собственно про совет Вашего программиста. Он очень похож на моё раннее предложение. В котором я Вам предлагал добавить массив Arrr(). Думаю что-то такое он и имел в Виду. В массив записывается положение row. А далее выгружается уже в событии ListBox1_Change(). Но В вашем случае это не нужно, поскольку у Вас положение row (строки на листе БАЗАСИ) численно равно положению Индекса строки в листбоксе + 1. А все проблемы возникали только из-за того, что у Вас при срабатывании ТекстБокс1 - происходило очищение Листбокса, которое влекло на срабатывание Listbox1_Change() а тут Вам этого не было нужно) поэтому я добавил условие на выход из ListBox1_Change() пока выполняется операция ТекстБокс1_Change()

Хотя смотрю, проблема осталась... ещё погляжу чуть позже...)
Глянул, всё же без массива тут не обойтись) поскольку Listindex для нового Lisbox1 (который собран по выбранным символам в ТехтBox1) будет уже отличаться от положения строки в БазаСи.

Автор - Roman777
Дата добавления - 29.09.2015 в 15:33
Roman777 Дата: Вторник, 29.09.2015, 15:54 | Сообщение № 28
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat,
Проверьте вот такой вариант:


Много чего не знаю!!!!
 
Ответить
Сообщениеcombat,
Проверьте вот такой вариант:

Автор - Roman777
Дата добавления - 29.09.2015 в 15:54
combat Дата: Вторник, 29.09.2015, 16:38 | Сообщение № 29
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
вот теперь, усё, работает как надо
еще вопросик как моему календарю присвоить дату сегодня в форме, как в экселе =СЕГОДНЯ(), или =Now() в акцессе, существует такая переменная?
 
Ответить
Сообщениевот теперь, усё, работает как надо
еще вопросик как моему календарю присвоить дату сегодня в форме, как в экселе =СЕГОДНЯ(), или =Now() в акцессе, существует такая переменная?

Автор - combat
Дата добавления - 29.09.2015 в 16:38
Roman777 Дата: Вторник, 29.09.2015, 16:59 | Сообщение № 30
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat,
Попробуйте так:
'
[vba]
Код
Private Sub UserForm_Initialize()
     DTPicker1.Value = Format(Now(), "d.m.yyyy") ' добавляем сегодняшнюю дату при инициализации формы
     ListBox1.ColumnCount = 2 '
     ListBox1.ColumnWidths = "0;"
     CommandButton2.Enabled = False
     '...........................................
     Set SRng = Sheets("БазаСИ").Range("B1") 'первая ячейка списка'
     '...........................................
     Set SRng = Range(SRng, SRng.End(xlDown))
     N = SRng.Rows.Count
     Vs = SRng.Value
     ReDim SArr(1 To N)
     For R = 1 To N
         Sentence = Vs(R, 1)
         SArr(R) = " " & Replace(Sentence, """", "")
         ListBox1.AddItem R
         ListBox1.List(R - 1, 1) = Sentence
     Next
     Lbl_SI.Caption = "Всего СИ в базе" & " " & N & " ед."
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
Сообщениеcombat,
Попробуйте так:
'
[vba]
Код
Private Sub UserForm_Initialize()
     DTPicker1.Value = Format(Now(), "d.m.yyyy") ' добавляем сегодняшнюю дату при инициализации формы
     ListBox1.ColumnCount = 2 '
     ListBox1.ColumnWidths = "0;"
     CommandButton2.Enabled = False
     '...........................................
     Set SRng = Sheets("БазаСИ").Range("B1") 'первая ячейка списка'
     '...........................................
     Set SRng = Range(SRng, SRng.End(xlDown))
     N = SRng.Rows.Count
     Vs = SRng.Value
     ReDim SArr(1 To N)
     For R = 1 To N
         Sentence = Vs(R, 1)
         SArr(R) = " " & Replace(Sentence, """", "")
         ListBox1.AddItem R
         ListBox1.List(R - 1, 1) = Sentence
     Next
     Lbl_SI.Caption = "Всего СИ в базе" & " " & N & " ед."
End Sub
[/vba]

Автор - Roman777
Дата добавления - 29.09.2015 в 16:59
combat Дата: Вторник, 29.09.2015, 17:20 | Сообщение № 31
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Да очень просто, буду теперь знать
 
Ответить
СообщениеДа очень просто, буду теперь знать

Автор - combat
Дата добавления - 29.09.2015 в 17:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автозаполнение листа с формы с индекс-ным поиском по первым (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!