В целом работает более понятно, что ли. - если в результирующей таблице заранее задать формулу для подсчёта значения "qty" * "price", то по DblClck в форме поиска формула из этой ячейки остаётся и работает. - форма позволяет изменять размеры и положение элементов - что бы вернуться на лист (поставить курсор) надо закрыть окно формы поиска. С меню тоже самое. Это порождает лишние телодвижения. - по даблклику позиция добавляется в конец списка, после последней позиции. Имхо, удобнее было бы вставлять в место установки курсора и переписывать значения уже, возможно, имеющиеся там
.по варианту FindToPrice170816.xlsb (пост #28) от AAF
Скрытый текст
- по клику на ОК - добавляется список в результирующую таблицу и окно закрывается. Хотелось бы, чтобы окно закрывалось по кнопке Cancel или "[x]". - не даёт изменить размеры и положение элементов в форме. Форма сама изменяется в размерах при подстановке в колонку Name реальных позиций. - при многократной установке/снятии флажка в CheckBox - уменьшается высота нижнего ListBox'ов. - при двойных кликах по шапке ListBox - ширина колонок изменяется по непонятному алгоритму. Иногда сужается до нуля. Подозреваю, что это побочные эффекты автоподстройки ширины ListBox'а. - если в результирющей таблице заранее задать формулу для подсчёта значения "qty" * "price", то по нажатию кнопки ОК в форме поиска формула из этой ячейки стирается. - что бы вернуться на лист (поставить курсор) надо закрыть окно формы поиска. С меню тоже самое. Это порождает лишние телодвижения.
Общее: - в ListBox'е не сохраняется количество знаков после запятой (на форуме мельком натыкалcя на тему по этому вопросу). Поищу... Может я нафантазировал чего... ибо решения не видАл. - прокрутка колёсиком мыши не работает. Это исправимо?
p.s. Честно сказать, я сравниваю с решением от GIGant. И очень меня расстроило заявление от Sanja, что нельзя доработать ListBox в этом решении.
jack_21 написал: не даёт изменить размеры и положение элементов в форме
Цитата
jack_21 написал: при двойных кликах по шапке ListBox - ширина колонок изменяется по непонятному алгоритму. Иногда сужается до нуля.
А Вы попробуйте мышкой поменять ширину столбцов...
Цитата
jack_21 написал: при многократной установке/снятии флажка в CheckBox - уменьшается высота нижнего ListBox'ов
Вы можете менять высоту.
Цитата
jack_21 написал: в форме поиска формула из этой ячейки стирается
Не обсуждалось, но программно используя форму проставить формулы не представляет труда, а если в форму заточить конкретно, то теряется универсальность.
Цитата
jack_21 написал: что бы вернуться на лист (поставить курсор) надо закрыть окно формы поиска. С меню тоже самое
Тут я вообще не понял... Этого не может быть!
Цитата
Хотелось бы, чтобы окно закрывалось по кнопке Cancel или "[x]".
По пунктам: 1. Теперь макрос не считает сумму. В столбце Summa таблицы прописана формула. 2. Размеры и положение каких элементов должна позволять изменять форма? Не понятно (возможно это решается в п. 3) 3. Теперь форма открывается в не модальном режиме, что позволяет работать с ячейками листа и меню Excel не закрывая форму. 4. Если предварительно выделить УЖЕ ЗАПОЛНЕННУЮ ячейку в столбце Name, то позиция по DblClick будет помещена в эту строку, т. е. существующая строка будет заменена. Иначе, позиция будет добавлена в конец таблицы.
Общее: 1. Зачем Вам в ListBox-е конкретное количество знаков после запятой? ListBox нужен только для визуального выбора требуемой позиции. Для того, чтобы в результирующей таблице значения отображались так, как Вам нужно - установите требуемый формат в соответствующих столбцах (ячейках) таблицы. И вид будет такой, как Вам нужно, и младшие знаки не потеряются (пример формата столбцов Price, Price2 и Summa в файле). 2. Прокрутку строк в ListBox-е колесиком мыши в Excel сделать можно, но, достаточно сложно (используя WinAPI и учитывая версию и разрядность Windows). Можно просто выделить строку, и, не отпуская кнопку мыши, тянуть вниз или вверх. При достижении нижней (верхней) границы окна ListBox-а, будет скроллинг строк, причем, с регулируемой скоростью, в зависимости от смещения курсора мыши от границы ListBox-а. По мне, так этого вполне достаточно.
Файл во вложении. Все ли так, как нужно? P.S. Всех этих вопросов не было в начальной задаче. Постарайтесь указывать все необходимые требования сразу, а не постепенно...
Каким образом? Мышкой не получается. Изменяя размеры через View Object, размеры верхнего ListBox всё равно сужаются по высоте при снятии-установки 2ой галки в CheckBox. В принципе, это терпимо...
Цитата
AAF написал: Не обсуждалось, но программно используя форму проставить формулы не представляет труда, а если в форму заточить конкретно, то теряется универсальность.
Согласен. В этом случае, можно создать ещё кнопку "Посчитать", которая вставит формулу и посчитает сумму/-ы по строкам и по колонке SUMMA.
Цитата
AAF написал: jack_21 написал: что бы вернуться на лист (поставить курсор) надо закрыть окно формы поиска. С меню тоже самое Тут я вообще не понял... Этого не может быть!
jack_21, Не надо привыкать, я просто набросок сделал и показал, но доводку еще не делал. По последним сообщениям стало понятно, что имелась ввиду именно, как бы выбор из списка для вставки в ячейку. Доделаю скину для коллекции, но несколько другую, чем all3. Просто нет смысла делать одинаковую. Пусть будет разнообразие. Мне так кажется... А там сами решите или кому пригодится...
Вопрос дилетанта. А если справочник будет уже подготовлен с заданным порядком колонок (с пустыми колонками) это облегчает задачу вставку найденной строки по даблклику? То есть, строка из 5..7 ячеек как бы полностью переносится, не изменяя порядка.
Дело в том, что справочник создаётся ежедневно на одном листе с помощью макроса. То есть поменять колонки местами ещё одним макросом не представляет труда.
В моем случае переносится по названиям столбцов и их порядок никак не влияет на процесс Кроме того в форме данные располагаются в соответствии с получателем, но поиск в столбцах источника, которые не присутствуют в получателе, сохраняется. Главное и необходимое условие обеспечить соответствие наименований столбцов источника - получателя.
вот с этим я уже столкнулся - изменив название столбца в шапке таблицы, в этот столбец перестали записываться данные. Но если на источнике задать название идентичное - всё заработало.
!!! Добавив в источник колонку с названием "ед. изм." и прописав в каждой ячейки столбца "шт" - эти данные стали переноситься в соответствующую ячейку результирующей таблицы.
Зато порядок не беспокоит... Порядок меняется чаще, а еще добавляются столбцы прямо в посреди получателя, поэтому здесь автоматизировано, а вот если изменить наименование, то ни какая система не поймет... Тогда нужно писать словарь соответствий. Но это уже другая история.... Если необходимо иметь разные наименования столбцов, то как костыль, можно предложить хранение этих наименований в примечаниях заголовко получателя. Это самый простой способ для не редактирования в VBA при изменении.
OK, а если усугубить - вставить над результирующей таблицей строки 8-10шт? Runtime Error '9' Subscript out of range и подсвечивает строку жёлтым [ReDim aData(0 To UBound(aSour) - 2, 0 To d.Count - 1): j = -1]
Тогда нужно критерии определения строки заголовков(полей)... Это обычно сделать не просто, т.к. простым перебором соответствий наименований может не обойтись, т.к. в шапке над таблицей могут оказаться такие же слова. В моих файлах всегда и везде заголовки находятся в строке 10, но при этом я оставляю параметр для указания другого значения, если необходимо... Но по умолчанию =10
SAS888, заранее извиняюсь за возможный сумбур в моём изложении... Долго мучал ваш файл. Можно попросить немного "допилить" ваш инструмент?
В порядке приоритетов: 1. После вставки по DblClick из ListBox осуществить переход курсора на одну ячейку вниз. Вставил "ActiveCell.Offset(1, 0).Select". Вроде работает (УРААА!!!). Может это повлечь ещё какие-то изменения? 2. Вставлять данные в выделенную ячейку. Даже если ActiveCell НЕ В СТОЛБЦЕ 7. Сейчас, я так понял адресация задаётся через вот это a=Array (...). 3. Собирать данные (справочник) не с листа той же книги, а с книги/листа на соседнем диске, десктопе или на сетевой папке //? 4. Вместо кнопки организовать вызов ФормыПоиска по шорткату - Ctrl+Shift+S. Вроде, свободно сие сочетание для Excel 2010.
Вопросы. 1. Где прописывается в коде ВЫБОР ячейки, куда ВСТАВЛЯЮТСЯ данные по DblClick в ListBox? Или где почитать про это? Что-то ГУГЛ не дал мне ничего полезного (понятного?) на слова "Вставка данных в активную ячейку по DblClick из ListBox" 2. Переменные i j k - что определяет каждая из них? 3. Что бы сместить таблицу влево, подправил a=Array (...). Каждое значение уменьшил на 5. Но тогда по DblClck в ListBox строчка добавляется в конец списка, вне зависимости от того, где стоит курсор. Что ещё необходимо подправить? 4. Почему нету папочки Modules под папкой Forms в дереве проекта? 5. Из этого макроса возможно сделать надстройку? Нету никаких ограничений? Может это не возможно для данного проекта? http://www.excel-vba.ru/chto-umeet-excel/kak-sozdat-svoyu-nadstrojku/ Что бы работало во всех открываемых файлах.
Скрытый текст
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Long, j As Long, k As Long, a() a = Array(12, 7, 9, 13, 10) ' a = Array(12, 7, 9, 13, 10) k = ListBox1.ListIndex j = ActiveCell.Row i = Cells(Rows.Count, 7).End(xlUp).Row + 1 If ActiveCell.Column = 7 Then If j > 2 And j < i Then i = j For j = 0 To 4: Cells(i, a(j)) = ListBox1.List(k, j): Next ActiveCell.Offset(1, 0).Select End Sub
Здравствуйте. Посмотрите прикрепленные файлы. Перед началом работы установите надстройку "Search.xlam". Затем, из любой ОБЯЗАТЕЛЬНО СОХРАНЕННОЙ книги, сочетанием клавиш "Ctrl+Shift+S" запускаете макрос из этой надстройки. Появится окно выбора файла с базой данных, который может располагаться в произвольном месте. Укажите этот файл и нажмите "Извлечь данные". Отобразится наш ListBox с полученными данными, с которым Вы умеете работать. По DblClick по значению ListBox-а, данные этой строки будут вставлены в оговоренном порядке, начиная с активной ячейки листа. После вставки очередной строки, активная ячейка сместится вниз на 1 позицию.
ВАЖНО: данные из файла базы извлекаются из листа с именем "all". Имя файла базы менять можно, а имя листа нельзя. Структура данных (порядок и назначение столбцов) на листе "all" должна соблюдаться.
Посмотрите и проверьте. Все ли так, как требовалось? P.S. Проверьте почту...
Протестировал. Что-то пошло не так. После выбора базы (из вашего архива) и извлечения данных ListBox не отображается. При самой первой попытке ListBox появился и тут же пропала, и всё - больше не появляется. Я даже не успел её рассмотреть.
Допустим форма эта появилась и она заполнена данными из базы. Если её закрыть, то как вызвать повторно?