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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2011, 09:39   #1
Alx.ekb
Новичок
Джуниор
 
Регистрация: 09.08.2011
Сообщений: 14
Радость Автозаполнение Транспортной накладной (по новой форме)

Решил написать макрос, позволяющий автоматизировать процесс заполнения транспортной накладной.

Функционал:

1, При запуске:

Открывается форма, на ней есть поля, которые нужно заполнить и по нажатии кнопки записать - записывает в определенное место.

2. Поиск в предыдущих заявках:

По мере ввода в комбобокс (больше 2 символов) начинает искать (например получателя) в диапазоне ячеек (который определяется динамически) искомое значение. При выборе - получает номер выбранной строки и подтягивает значения (например ФИО и телефон) из определенных столбцов этой же строки.

При помощи гугла все это почти сделал, но начало все глючить...
Пишет only comments may apper...

А т.к. я в программировании не очень силен, прошу помочь! Ошибка скорее всего в отсутствии End Sub или что то вроде того

Этот макрос очень универсален, и, я думаю, очень многим сможет упростить жизнь!

Отвечу на любые вопросы.

Последний раз редактировалось Alx.ekb; 09.08.2011 в 10:08.
Alx.ekb вне форума Ответить с цитированием
Старый 09.08.2011, 09:43   #2
Alx.ekb
Новичок
Джуниор
 
Регистрация: 09.08.2011
Сообщений: 14
По умолчанию

Файл сейчас добавлю
Alx.ekb вне форума Ответить с цитированием
Старый 09.08.2011, 09:49   #3
Alx.ekb
Новичок
Джуниор
 
Регистрация: 09.08.2011
Сообщений: 14
По умолчанию

пример вот
Вложения
Тип файла: zip TN.zip (80.8 Кб, 67 просмотров)
Alx.ekb вне форума Ответить с цитированием
Старый 09.08.2011, 11:00   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Для начала так должно быть,а дальше ничего не понял.что надо сделать
Код:
Private Sub ComboBox1_Change()
nSender = Worksheets("Listings").Columns("A").Rows(5000).End(xlUp).Row ' определяет количество строк
If Идет_Обработка Then Exit Sub
Идет_Обработка = True
With ComboBox1
If .Value = "" Then .List = Worksheets("Listings").Range("AN3", "AN" & nSender).Value
For i = .listcount - 1 To 0 Step -1
  If Not .List(i) Like "*" & .Value & "*" Then .RemoveItem i
Next
.ListRows = .listcount
.DropDown
End With
Идет_Обработка = False
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 09.08.2011, 11:42   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Позволю несколько замечаний:
1.Если в ComboBox1 удалить символ - приведенный выше код не изменить содержимое .List. Предлагаю при любом изменении ComboBox1 набирать полный .List и отфильтровывать нужные значения.
2.Если ComboBox1 пуст - не фильтровать .List
3.Поиск обычно ведут по совпадению первых букв (это довольно спорное утверждение, но на его основании я первую * из Like убрал)

Код:
Private Sub ComboBox1_Change()
nSender = Worksheets("Listings").Columns("A").Rows(5000).End(xlUp).Row ' определяет количество строк
If Идет_Обработка Then Exit Sub
Идет_Обработка = True
With ComboBox1
.List = Worksheets("Listings").Range("AN3", "AN" & nSender).Value
if .value <> "" then
  For i = .listcount - 1 To 0 Step -1
    If Not .List(i) Like .Value & "*" Then .RemoveItem i
  Next
end if
.ListRows = .listcount
.DropDown
End With
Идет_Обработка = False
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.08.2011, 11:47   #6
Alx.ekb
Новичок
Джуниор
 
Регистрация: 09.08.2011
Сообщений: 14
По умолчанию

Класс! Работает как надо!
Дальше хочу, чтобы после выбора строки в комбобоксе можно было узнатьномер выбранной строки в листе "Listings" - и далее по ней заполнять поля в форме.

Каким образом узнать номер выбранной в комбобоксе строки?

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

И еще загвоздка в компиляции проекта:

Compile Error:
only comments may appear after End Sub, End Function or End Prophety.
Я уже голову сломал, в чем загвоздка...
Alx.ekb вне форума Ответить с цитированием
Старый 09.08.2011, 12:17   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у .List есть ListIndex - номер выбраной записи из списка.
только что он Вам даст? номер в списке не сооответсвтвует номеру сроки с диапазона данных, откуда были взяты значения.
во-первых, потому что диапазон начинается с 3-й строки
во-вторых, список отфильрован, часть значений из него выброшена
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.08.2011, 12:36   #8
Alx.ekb
Новичок
Джуниор
 
Регистрация: 09.08.2011
Сообщений: 14
По умолчанию

Да, примерно об этом я и говорил, что нет прямого способа узнать выбранную ячейку.

Получается:
надо придумывать что-то другое.

поиск значения в определенном столбце листа "Listings", равного записи в комбобоксе и только так получим номер строки...

Проще говоря искать значение комбобокса на листе поочередным перебором всех строк столбца на листе, цикл номер "икс" - даст нам номер ячейки
Адрес ячейки получится: А"ИКС"

Есть менее извращенный способ?

Всем спасибо за ответы!
Пошел дальше гуглить

А может быть есть желающие заработать и дописать это чудо? Пишите в ЛС
Alx.ekb вне форума Ответить с цитированием
Старый 09.08.2011, 13:07   #9
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Можно без перебора, есть метод Range.Find - запишите рекордером команду Ctrl+F.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 09.08.2011, 13:10   #10
Alx.ekb
Новичок
Джуниор
 
Регистрация: 09.08.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Можно без перебора, есть метод Range.Find - запишите рекордером команду Ctrl+F.
Все гениальное просто
Alx.ekb вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция в новой форме hippo Помощь студентам 7 04.07.2011 03:07
Формирование накладной в QReport brutafor777 БД в Delphi 2 13.06.2011 22:25
Поиск записи.Отображение данных в новой форме zaraz Microsoft Office Excel 4 16.06.2010 08:44
Решение транспортной задачи. 4sense Помощь студентам 2 06.12.2009 16:04
Решение транспортной задачи в VBA _леся_ Помощь студентам 0 02.05.2009 12:20