Вопрос как - как настроить импорт данных таблицы, чтобы по столбцу реестровый номер контракта импортировались данные сразу в формате текст без преобразования в экспоненциальный формат? Прошу помощи.
23.10.2023 19:06:21
Всем привет! Пытаюсь на коленке сделать простенький парсер из Экселя под Электронный магазин Ленинградской области. К примеру, вот адрес страницы закупки
Скрипт для генерирования <Адрес поставки>, где видно что в нечто похожее на переменную (a) записывается результат запроса ajax, и при некоем ответе на запрос в переменную записывается значение: либо извлеченный из какой то закрытой базы данных Адрес поставки, либо, если там пусто записывается значение 'Адрес не указан' :
|
|||||
|
26.09.2023 19:48:41
Всем привет! Столкнулся с такой проблемой. На листе есть https гиперссылки, в адресе которых включен символ #. Так вот, при попытке извлечь адрес в текстовую строку с помощью vba извлекается только часть до символа #, все остальное отсекается. Например в ячейке A1 содержится значение с привязанной гиперссылкой:
по итогам свойство .Address извлекает только |
|||
|
10.09.2023 15:09:01
Здравствуйте товарищи! Есть задача с помощью УФ выделять цветом строки в таблице с условием частичного совпадения текста. Примеры, которые находил работают исключительно с точным совпадением текста. Для меня же требуется, чтобы под условие подподали текстовые значения с маской
"*Солн*" по столбцу G. Однако при попытке изменить формулу условного форматирования =$G3="Скид: 0 - ООО ""Солнышко""" в такой вид =$G3="*Солн*"
Изменено: |
|
|
27.11.2022 10:15:54
Всем привет! Создал пользовательскую форму (UserForm) в VBA. Форма Нужна для работы в Word. Понимаю, что форум по Excell, но общие приёмы, которые используется в VBA Excell подходят и для VBA Word. Суть проблемы. Форма содержит большое количество объектов TextBox расположенных вертикально в стобец. Объектов много и на форме не помещаются. Помогла ветка форума из
|
|
|
15.09.2021 18:16:44
Здравствуйте уважаемые обитатели форума. Помогите решить задачу. Файл с примером прилагается.
По столбцу «A» идут наименования товаров, в Столбце «B» содержаться соответствующие уникальные номера товаров. Условно данные по столбцам «A» и «B» являются базой данных, эталоном. В столбец «D» вносятся наименования товаров, а в столбце «Е» формула должна находить соответствие по базе данных и возвращать уникальный код (из столбца «B»). Самое очевидное решение использовать ВПР. Но ВПР ищет только первое вхождение значения-дубликата ячейки игнорируя последующие. Решением могло бы быть использование ВПР с конкатенацией значений по столбцам «A» и «B», «D» и «E». Но в том-то и дело, по столбцу «E» значение заранее не известно, его нужно найти по базе данных. Другими словами, помогите создать универсальную формулу, результатом которой будет возвращение соответствующего значения из столбца «B» и в случае, если будут встречаться дубликаты (в примере яблоки, бананы, киви), то возвращать значение уникального кода первого дубликата, второго, третьего и т.д. в том порядке как они размещены в эталонной базе. Предполагается, что по столбцу «D» количество дубликатов будет равно количеству дубликатов базы данных (столбец «A») либо меньше, что должно предотвратить возникновение ошибки в случае переполнения дублирующих значений по столбцу «D». Заранее спасибо всем откликнувшимся!
Изменено: |
|
|
22.03.2019 14:10:14
Здравствуйте. Есть задача импортировать данные из word файла (.doc) на активный лист текущей рабочей книги. Вообще думал что реализовать автоматизацию можно через Query запрос, но оказывается в этом режиме Еxcel не умеет распознавать форматированный текст и "засасывает" целиком все данные, в том числе и служебные данные xml и как итог - на лист вываливается "каша" из символов. Прихожу к выводу (возможно ошибочному) что форматированный текст word импортировать в excel можно только используя буфер обмена. Нарыл
Изменено: |
|||||||
|
24.05.2018 08:40:26
Здравствуйте уважаемые! Есть задача импорта данных в таблицу Excell 2003 из БД MS Access 2003. Зам запрос я создал стандартным способом: Данные→Импорт внешних данных →Создать запрос. При этом запускается программа-посредник Microsoft Query. В итоге запрос сделал успешно. Для автоматизации этого запроса записал макрос макрорекодером. «Тело» запроса постоянно, за исключением одного параметра, который можно в ручную изменить через Изменить запрос(Excell)→Microsoft Query→Создание запроса: отбор данных→Столбцы для отбора→Столбец <kod_cl>→условие <равно>→значение <изменяемые вручную данные какие мне нужны>. После того как записал макрос ввел в него переменную, которую хотел использовать в «теле» запроса вместо параметра значение. Итоговый макрос:
Пожалуйста помогите "победить ошибку".
Изменено: |
|||
|
16.05.2018 17:44:29
Здравствуйте господа. Возникла необходимость найти все уникальные значения в диапазоне и вывести все эти значения в одну ячейку текстовой строкой. Нашел на одном из сайтов небольшой макрос для поиска уникальных значений. Вот тело макроса:
Range ("A1"). Value = "Найдены следующие договоры:" &"№"& myElement "," + 1 То есть требуется из коллекции myCollection взять (перебрать) все уникальные значения myElement и поместить их в текстовую строку в ячейку A1 по шаблону указанному выше. Прошу оказать посильную помощь в доработке макроса. |
|||
|
24.04.2018 07:50:08
Здравствуйте уважаемые программисты. Прошу оказать помощь по «допилке» макроса. За основу был взять макрос Николая Павлова отсюда Код макроса с моими изменениями:
|
|||
|
15.07.2017 09:36:16
Здравствуйте коллеги. Помогите допилить макрос. Имеется таблица, в котором макросом необходимо обнаружить формулу итогов, которая соответсвует определенной Фамилии. Макрос который я "слепил" в принципе работает. Однако впоследствии выяснилось, что он работает не совсем правильно.
Итак, есть диапазон (A1:I 30). По столбцу "А" идут Фамилии. По столбцу "H" и "I" подсчитывается итог по каждой Фамилии. В столбцах "F" и "G" подсчитывается общий итог. Задача макроса найти определенную фамилию, затем найти ячейку с соответствующей этой фамилии формулой (через маску) и сообщить что формула нашлась и имеет такой то адрес. Для простоты ограничимся поиском формулы по Фамилии Петров. Я использовал для этого Find с параметром поиска формул по столбцам. Для задания границ поиска только по столбцу "H" указал:
Вот тело всего макроса
Коллеги прошу помощи.! Пример прилагаю. Для демонстрации корявости макроса в примере удалите формулу из ячейки H16.
Изменено: |
|||||
|
13.07.2017 14:23:13
Проверка на наличие данных в скрытых ячейках кодом VBA с выводом обнаруженных данных. Здравствуйте коллеги. Прошу помочь решить следующий вопрос: Есть таблица с данными, в которой, к сожалению, встречаются скрытые строки. Смог сообразить макрос - через метод SpecialCells. Работает так - если в таблице есть скрытые строки, то просто выводится сообщение. Однако, если в скрытых строках ничего нет - меня они в общем не интересует, хуже когда там какие то данные все таки спрятаны, и это может ошибочно повлиять на итоговый результат вычислений, из-за этого нужно раскрывать и проверять, это очень не удобно. Знаний не хватает настроить макрос, чтобы он при наличии скрытых строк проверял бы их на присутствие каких -либо данных. В Экселе есть функция ISBLANK, не знаю может ли она выполняться в VBA или это чисто экселевская функция, если да, то как её настроить на проверку именно по скрытым строкам? Вот тело моего макроса
Изменено: |
|||
|
22.04.2017 20:51:44
Желаю всем здравствовать. Прошу оказать помощь в следующем. На листе есть таблица (переменная z). Для наглядности пусть в ячейке C13 будет формула = СУММ (I5:I13)/2. Этой ячейке присваивается переменная "r". В столбце N содержаться формулы c маской СУММ (I*: I*), которые периодически повторяются вниз по столбцу через n-ое количество строк. Моей целью является поиск ячейки по столбцу N с формулой СУММ (I5:I13) , то есть Макросом требуется найти ячейку в столбце N по маске ="SUM(I*: I*) но я не знаю как в маске вместо символа подстановки * указать, что номер строки должен браться у аргументов формулы, которая "зашита" в переменную "r" , то есть для первой буквы "I" это строка 5, а для второй "I" - 13 соответственно. Как мне изменить маску поиска для переменной d ?
|
|||
|
20.04.2017 15:47:38
Здравствуйте коллеги. Прошу помощи. Имею следующий макрос:
Понятно, что результатом будет вывод окна итоговой цифрой (количество ячеек, в которых есть слово груша). Однако мне необходимо сузить диапазон подсчета ячеек, то есть нужно чтобы COUNTIF обрабатывал в диапазоне "dat" только столбец "3". Но как это реализовать правильно не знаю. Обычно для таких целей я прописывал такую цепочку: Worksheets(1).dat.Columns(3). и дальше например .find(.......) и это срабатывало. Здесь так не получается. Вроде как по логике код строки с COUNTIF должен выглядеть так:
Подскажите решение, пожалуйста.
Изменено: |
|||||
|
13.04.2017 18:47:41
Здравствуйте форумчане! Пожалуйста помогите в решении следующего вопроса.
Есть некий диапазон, например, (A49:Q71). В ячейках есть различные значения. Стоит задача макросом определять присутствуют ли одновременно в указанном диапазоне заданные значения (например, яблоки, груши, бананы) по типу - Если да, то действие 1, иначе действие 2 (If... Then...Else). В интернете есть примеры таких макросов, но в основном они построены по типу перебора, т.е. циклов. К сожалению, я так и не смог осилить логику их работы с их счетчиками, входами, выходами. "Книжонки" по VBA не помогают. По крайней мере я так и не нашел толковую для уровня "чайник".Только пустые обещания, что мол VBA это просто, а на деле дальше макрорекордера с такими "самоучителями" не продвинешься. В принципе через метод Find и конструкцию If...Then я такую задачу решал многократно дублируя код под каждое искомое значение. И вот в интернете попался макрос, где без цикла и метода Find проверяется наличие значений. Я переделал его под свою задачу и вот "кусок" от него:
P.S. Кстати, если кому пригодиться Find как раз умеет искать в диапазоне, который задан через переменную.
Изменено: |
|||||||||
|
08.04.2017 21:12:55
Здравствуйте Люди добрые! Пожалуйста помогите оптимизировать макрос. На форуме похожие темы, конечно, есть, но я ни один из примеров не смог применить. Автофильтр для моих целей я тоже не смог применить потому как он работает сразу со всей таблицей, а мне необходима раздельная обработка в четырех диапазонах. В таблице есть 4 блока товаров. Каждый блок состоит из 30 строк. Для компактности внутри блока пустые строки скрыты, кроме первых двух и последней с итогом. Сконструировал простейший макрос. Работает так - при внесении данных в первую строку по столбцу "F" (Ячейка Cells(5, 6)) "раскрывается" (через Hidden = True) вторая по счёту строка. И наоборот, если целевая ячейка пуста, то вторая по счёту строка скрывается. Весь макрос "сшит" из кусков по типу:
просто последовательно менял номера строк. "Хватило" меня только на один блок. А нужно чтобы все четыре блока так работали. Понимаю, что конструкция примитивная и кроме того макрос привязан к модулю листа через Worksheet_SelectionChange, что серьезно "грузит" систему, стоит только на листе в любом месте ткнуть мышью как идет пересчет ячеек по всему листу. Очень хочется получить цикл с меньшим количеством строк и по возможности привязать к другому менее требовательному к ресурсам "событию". Файлик с макросом прилагаю. Целевой столбец выделен желтым цветом.
Изменено: |
|||
|
26.03.2017 17:59:09
Доброго всем времени суток! Много раз меня выручал этот форум. Потому прибываю в неоплатном долгу перед всеми кто мне помогал. Не смею рассчитывать на то, что кто то снова будет тратить свое время на меня за "Спасибо". Однако, если кто из консультантов решит, что те вопросы которые я ставлю на обсуждение достаточно трудозатратны и требуют денежного вознаграждения, я не исключаю и такой вариант. Задача которую мне предстоит описать для знатоков VBA не сложна, но для того что бы понять чего я ожидаю от неравнодушного сообщества мне необходим много слов. Возлагаю надежды на лояльность модераторов, чтобы сия тема была все таки допущена на форум. Итак, на моей "славной" работе руководство, видимо посчитав, что я за зря ем "хлеб" фирмы поручило мне наряду с моей непосредственной работой (вообще я специалист договорных отношений, т.е. юрист) в нагрузку одно довольно "геморройное" занятие. А именно - теперь я еще должен проверять (контролировать) сдачу графиков посещений нашего обслуживающего персонала среди Клиентов компании. Всё это дело ведется в Эксель 2003. Обилие ручной работы при этом контроле меня "убивает". Естественно никого не заботит как я это буду делать, хотя по хорошему здесь нужен толковый "прог" на уровне VBA. Но это не реально, ему же надо платить зарплату, а мне можно не платить. Ну вот, пожалился... вроде полегчало... Итак суть. Есть обслуживающий персонал - специалисты. У каждого спеца есть свои Клиенты. Спецы обязаны еженедельно заполнять в Эксель График посещений Клиентов. То есть, книга (файл) содержит листы. Один из листов содержит Плановый график, а другие листы - текущие графики. Моя задача проверить достоверность всех графиков (Плановый и текущие). Я додумался создать некий шаблон с правилами, и при импорте данных из графика специалиста в мой шаблон правила "подсветят" косяки, если таковые имеются. Прилагаю свой подопытный образец. Первый лист "План" - это и есть проект шаблона (по сути лист Получатель данных). Далее листы содержащие графики специалистов (листы Источники данных). График представляет собой две таблицы (верхняя и нижняя). Условно верхняя таблица называется "Плановый на март", нижняя - "Дополнительные визиты". Обе таблицы разделены на 5 дней недели. Здесь по тексту я решил, что диапазон строк и столбцов в таблице в границах одного рабочего дня назвать микромассивом. То есть, в каждой таблице есть 5 микромассивов: понедельник, вторник, среда, четверг, пятница. Скажем так, верхняя таблица (Плановый на март) является Первичной, нижняя таблица (Дополнительные визиты) - вторична и задействуется для обработки макросом только при условии наличия обоюдных связей в формулах по столбцу "Н". Пример итогового результата - кнопка Пятница. Если связи нет, то макрос обрабатывает только верхнюю таблицу Пример итогового результата - Все кнопки с понедельника по четверг. Я уже сделал кучу кнопок с макросами для импорта данных из листа Источника в лист Получатель. Разумеется пользовал макро рекодер В результате макросы примитивны и корректно работают только при фиксированном и неизменном размере массивов на листе Источнике, а это невозможно. Более того не исключено и небрежное форматирование таблицы самим специалистом (где то есть пустые строки, или разрыв формул). Предполагается, что массив на листе Источнике будет динамичным, т.е. количество строк внутри дня недели не лимитируется и м.б большего либо меньше чем в примере. Нужен умный "макрос" чтобы он умел выделять на листе Источнике только тот диапазон массива (микромассив), который относится к конкретному дню недели. Очевидно, что необходимо задать границы микромассива на листе Источник по некоторым условиям. Для наглядности конечного результата можно понажимать мои кнопки. Так кнопки "понедельник", "вторник" и т.д. на листе Источник выделяют нужные микромассивы и копируют их в заданные диапазоны на лист Получатель. Замечу, что для простоты на листе Получателе предполагается, что размер микромассивов (диапазон строк и их количество) фиксирован и число строк постоянно (26 строк на один день, микромассив). Это избыточно, но зато, на мой взгляд, упрощает импорт данных и не нужно беспокоиться о размере микромассива на листе Источнике. Вряд ли будет ситуация, где количество строк в источнике на один день превысит значение 26. Кнопка DeleteData - очищает мой шаблон (лист Получатель) от старых данных. Кнопка "Все рабочие дни" запускает поочередно все макросы начиная с понедельника по пятницу. По умолчанию на листе Получатель в столбце "H" в каждой первой ячейке микромассива указывается значение "8:45" - это отправная точка отсчета времени. Начиная с каждой второй ячейки микромассива и по последнюю строку (понедельник H6:H30, вторник H32:H56, среда H58:H82, четверг H84:H108, пятница H110: H134) забита формула на прирост рабочего времени. В самом простом случае предполагается, что формулы по столбцу "H" на листе Получателе недолжны изменяться, то есть макрос их "не трогает". Для наглядности: в результате работы макроса на листе Источник должны быть корректно выделены и скопированы 5 микромассивов с несмежными диапазонами из верхней таблицы. В примере получается, что несмежные диапазоны понедельника - C5:G12 и I5:J12, вторника - C16:G28 и I16:G28, среды - C29:G40 и I29:J40, четверга - C41:G50 и I41:J50, пятницы - C51:G61 и I51:J61. Я определил два основных условия определения границ микромассива и одно дополнительное условие для определения относимости данных (какие данные можно отнести к понедельнику, вторнику, среде, четвергу и пятнице): 1. Условие. Думаю, что в моем примере верхней границей микромассива на листе Источник должна быть каждая строка, где в столбце "Н" содержится значение времени "8:45". Именно это значение указывают все специалисты вначале своего дня. К другим критериям привязаться проблематично. Например, столбец "А" содержит текстовые значения - понедельник, вторник, среда, четверг, пятница по всему своему диапазону (в пределах обеих таблиц, конечно) и логичнее было бы привязать верхнюю границу к ячейке с текстом понедельник, вторник и т.д.. Однако, в результате небрежного форматирования, ячейка с днем недели может быть выше или ниже строки со значением "8:45" по столбцу "H" (начало рабочего дня), что приведет к неправильному определению верхней границы микромассива. Обратите внимание на лист Источник, в верхней таблице - вторник (пример небрежного форматирования). В тоже время нужно чтобы макрос определял верхнюю границу микромассива именно по первому встретившемуся значению "8:45", которое вводится вручную. На примере образца на листе Источник в четверг первым значением "8:45" макрос должен считать ячейку "H41", а не ячейку "H42". Не знаю имеет ли это значение для дела, но предполагается, что в графиках в столбце "H" в первой строке микромассива (это начало дня) всегда значение равное "8:45" специалист выставляет вручную, это не результат вычислений формулы. В итоге значение "8:45" введенное вручную в столбце "H" - это верхняя граница каждого микромассива. 2. Условие. Нижняя граница микромассива должна определяться строкой, которая содержит группу формул. Например, в понедельник эта группа формул содержится в строке 12 (диапазон N12:Q12). Опять же, если это имеет значение для дела, то указанная группа формул (суммы по столбцам) в каждом микромассиве повторяется и, конечно, при изменении числа строк внутри микромассива динамически изменяется диапазон вычислений внутри этих формул. 3. Условие. Соответствие дня недели Источника и Получателя. Иногда рабочая неделя состоит из трех дней. На примере образца - лист 3. Необходимо чтобы макрос на листе Источник скопировал данные по оставшимся микромассивам (у нас это среда, четверг, пятница) и результат помещался на листе п Получатель в соответствующий диапазон. В нашем примере с листа Источника данные со среды должны перейти на лист получатель также в среду, четверг в четверг ну и пятница в пятницу. Полагаю, что здесь каким то образом необходима проверка условия на наличие текстового значения в диапазоне столбца "A". То есть, макрос должен проверить - какое текстовое значение он найдет в диапазоне микромассива (между верхней строкой и нижней строкой) по столбцу "А". Если в заданных диапазонах по столбцу "A" он найдет "понедельник", то весь микромассив, в границах которого нашлось это слово он должен скопировать соответственно в лист Получатель, в начало диапазона Понедельник. И так далее. В случае если на листе Источнике обнаружится микромассив, который не имеет в столбце "А" текста "понедельник", "вторник", "среда", "четверг", "пятница", то необходимо чтобы макрос выдал сообщение что-то типа: "Не могу определить вторник". А в случае, если специалист ошибочно по столбцу "А" в пределах одного дня указал два и более текстовых значения (например, понедельник и вторник) то необходимо сообщение что то типа "Не правильно задан день недели". Написано очень много, даже страшно продолжать. Но если у кого-то хватило терпения, мне остается только благодарить этого человека и надеяться, что будут предложены варианты. Итак я уже делал оговорку, что в самом простом случае макрос обрабатывает только верхнюю таблицу. В более сложном варианте (посмотрите Пятницу) предполагается, что макрос должен определить по связям в формулах (если такое вообще возможно) по столбцу "Н" наличие дополнительных данных в нижней таблице "Дополнительные визиты" и также аккуратно выделить обнаруженный диапазон и скопировать его в лист Получатель тоже в нижнюю таблицу. При этом макрос должен внести соответствующие изменения на листе Получатель в те формулы, о которых я раньше говорил, что они не должны изменяться макросам в простых случаях. Если нажмете на кнопку "Пятница" то вы сможете увидеть, что из-за несогласованности формул результат вычислений по времени в столбце "Н" на листе Получателе не верный. То есть при переносе данных он (макрос) должен на листе Получателе (План) привести в соответствие формулу с той же логикой вычислений как на самом листе Источнике данных. Опасаюсь, что мой трактат "трещит" по швам. Дополнительные текстовые пояснения содержатся непосредственно в самом файле на первом листе (Получатель). Друзья понимаю, что многого хочу, но надеюсь, что возможно проект удастся воплотить в жизнь, если Вы примите свое участие хотя бы по кусочку. Возможно вместо одного большого макроса можно сделать много маленьких. Например был бы рад маленькому макросу как определить и выделить микромассив "понедельник" для последующего копирования на лист Получатель. По аналогии сделаю макросы для других дней, если одним макросом сразу на все дни сделать сложно. В любом случае спасибо всем, кто потратил своем время и дочитал до конца. Уповаю на Вас и внемлю .
Изменено: |
|
|
08.11.2015 17:17:58
Здравствуйте дорогие форумчане. Давно не посещал форум. Возник вопрос и вот я тут)))
Решил создать своеобразный калькулятор рациона питания. Помагает при составлении диеты. Итак, в рабочей книги три листа: NewРацион; Табл Ккал; BMR. Для моей задачи интерес представляют только листы NewРацион и Табл Ккал. На листе NewРацион содержатся практически все формулы и макросы. На листе Табл Ккал по сути только данные по конкретным продуктам питания (наименование, жиры, белки, углеводы, ккал). На листе NewРацион есть шесть почти одинаковых строковых блоков, которые через макросы можно скрыть или открыть. В каждом блоке в столбце "B" создан выпадающий список продуктов, с привязкой к листу Табл Ккал. Помогите пожалуйста создать макрос используя Combobox. Не буду скрывать для меня почти любой макрос, который нельзя написать с помощью макрорекодера очень и очень сложно сделать. Я бы очень хотел внедрить макрос, с помощью которого при выделении ячейки в столбце "B" (в пределах диапозана строк конретного блока) появляется комбобокс, по мере набора символов список комбобокса сокращается, потом кликаем по нужной позиции и нужный продукт заносится в ячейку. Я совсем не знаком с функцией Combobox, поэтому не хотелось бы выглядеть глупее чем на самом деле, но было бы здорово, если подбираемый список продуктов формировался бы с учетом любого вхождения в строку наименования продуктов, например, при наборе слова банан хотелось бы видеть, что в списке есть все позиции, где встречается это слово, например: банан, чипсы банановые, мороженое ванильно-банановое, ... и т.д Очень бы хотелось при этом сохранить выпадающий спиок на случай, если придется искать наименование продукта вручную. Заранее благодарен за любую оказанную помощь. Файл прилагается (Excel 2003). |
|
|
05.03.2015 19:23:44
Здравствуйте уважаемые специалисты. Вновь обращаюсь к Вам за помощью. Надеюсь не обделите вниманием. В общем суть вопроса. Есть некий файл (рабочая книга) созданный в Excel 2003. В рабочей книге есть два листа "Конструктор" и "Результат" . На первом листе "Конструктор" над рабочим диапазонов расположены кнопки "Закрыть" и "Раскрыть" с привязкой к макросам, при нажатии которых соответственно диапазон либо скрывается либо отображается. На втором листе "Результат" есть одна кнопка "Перенос" тоже с макросом, при нажатии на которую копируется заданный диапазон на листе "Результат", затем становится активным лист "Конструктор", нажимается конопка "Раскрыть" (то бишь запускается вторичный макрос, привязанный к кнопке "Раскрыть"
![]() Run-Time Error '1004': Не удалось найти "такой то файл". Проверьте задание имени и местоположения файла. Согласитесь, что это очень геморойно и жестко привязывает тебя к тому чтобы имя файла не менялось, в противном случае нужно делать корректировку во всех макросах где есть код содержащий имя книги. Очевидно, что здесь уместнее ввести переменную и присвить её к имени книги. Тогда можно будет менять имя файла и не беспокоится что макрос перестанет запускаться. Думаю, что в модуль ЭтаКнига нужно засунуть объект ThisWorKBook. Однако ж ничего у меня не получилось. Пожалуйста посмотрите выложенный мною файл и подскажите какой макрос воткнуть в модуль ЭтаКнига и что подправить в первичном макросе "Перенос", что бы в коде запуска вторичного макроса была указана переменная вместо абсолютного имени рабочей книги. Укажу код который я пытался использовать и который не сработал. В модуле ЭтаКнига пытался задать перменную, что бы она задавалась при открытии книги
|
|||||
|
15.02.2015 13:24:59
Прежде всего хочу поблагодарить за помощи в создании макросов таких специалистов как
Однако для юзабилити (так что ли говорят) хотелось еще кое что добавить. Сначала поясню суть вопроса более широко. В таблице расчета используется в столбце наименование товара длинные текстовые названия. Типа: Телевизор Toshiba 42 дюйма LCD PG452S. Подобные длинные названия берутся из прейскуранта. Очевидно, что это очень, извиняюсь за выражение, геморройно писать это все вручную. Но никуда не денешься, требуется указывать именно полное наименование как в прайсе. Я частично решил этот вопрос задав в нужном столбце определенного диапазона ячеек проверку данных и привязал её к списку из прайса. Вуаля, обрадовался я. Щелкаю на треуголник рядом с ячейкой и выбираю из списка наименование товара с его полным длинным названием. Пощелкав так продолжительное время я убедился что этот спсобо хоть и облегчает ввод данных но не является саммым оптимальным. Оказалос, что когда в прейскуранте товаров мало (до 10 и меньше) то этот способ с выпадающим списком более или менее приемлем. А вот когда их больше и даже за 100... Глаза сломаешь пока до щелкаешь по ползунку до нужного названия. И здесь по времени затраты на ввод данных ощутимо возрастают. Что же делать. И у меня возникло предположение, что в Excel можно составить определенный список-словарь условных сокращений наименования с соответствием их полному наименованию и желательно даже несколько видов сокращений на случай, если забуду какое-либо из них. Типа сокр1 сокр2 полное наименование TVT42 = ТВТОШ42 = Toshiba 42 дюйма LCD PG452S TVS39 = ТВСОН39 = Sony 39 дюйма LCD 45DERT TVSA40 = ТВСАМ40 = Samsung 40 дюймов PDP 452IKS И так далее. Думаю смысл понятен. Далее в столбце в определенном диапазоне ячеек при вводе в одну из ячеек какого либо условного сокращения и нажатии на клавишу Enter вместо "TVT42" вставлялось бы сразу "Toshiba 42 дюйма LCD PG452S". То есть макрос должен произвести поиск условного сокращения в созданном нами словаре, найти соответствие по полному наименованию и вернуть его (полное наименование) в редактируемую ячейку.В Excel нечто похожее реализовано на уровне интерфейса. Например, когда в столбце в непрерывном порядке вносишь текстовые значения, то в следующей ячейке если какая либо из первых символов совпадает с начальным символом значений ранее внесенных, он предлагает вставить повторяющееся слово. Но в моем случае, как вы понимаете, в столбце не будет содержаться этого ранее набранного списка. Поскольку ячейки с наименованием товаров будут редактироваться при вводе данных, то, соответственно, использовать функцию ВПР не получиться. Добавлять дополнительный соседний столбец для сокращенного наименования и функцию ВПР в столбец с полным наименованием товаров не хотелось бы. Очень сильно нагромождается лишняя информация. Теряется читабельность. То есть, без макроса мне не обойтись. Судя по логике макрос должен быть создан в модуле листа, который содержит столбец для ввода данных наименования товаров и макрос должен быть основан на событии "изменение значения ячеек" в заданном диапазоне На эту мысль меня подтолкнула обучающая статья Николая Павлова Вот текст его макроса без изменений как есть
Для образца словаря соответствий прошу взять эту основу сокр1 сокр2 полное наименование TVT42 = ТВТОШ42 = Toshiba 42 дюйма LCD PG452S TVS39 = ТВСОН39 = Sony 39 дюйма LCD 45DERT TVSA40 = ТВСАМ40 = Samsung 40 дюймов PDP 452IKS Для меня так будет понятнейВот в общем описание моей задачи. Как всегда прошу Вас помочь, Профи ! |
|||
|
14.02.2015 15:00:33
Здравствуйте специалисты. Этот вопрос больше к знатокам VBA. Не уверен что точно отразил суть вопроса в обозначенной теме, но попробую описать задачу максимально понятным языком.
Итак, есть Книга, назовем её условно Источник. В ней на заданном листе есть рабочий диапазон, в который вносятся наименования товаров и по заложенным в ячейках диапазона формулам рассчитывается стоимость каждого товара. Полученный перечень товаров с рассчитанной стоимостью условно назовем Таблица. Иногда требуется сравнить наглядно несколько вариантов Таблиц, которые отличаются набором товаров (иначе говоря, диапазон строк в диапазоне может меняться). Для наглядности сравнения вариантов Таблиц требуется копирование Вариантов в другую книгу на один лист друг за другом в вертикальном порядке. То есть в новой книге на первом листе вставляется Таблица, если будет еще вариант, то он будет вставляться ниже после первой Таблицы. Для этой процедуры у меня есть два Макроса. Первый макрос: С активного листа Источника выделяется и копируется определенный диапазон ячеек. Этим же макросом создается книга с названием "Varianty" (это название не условное, а реальное заданное моим макросом) и вставляется скопированный диапазон из Источника на первый лист Книги "Varianty". На этом макрос завершает свою работу. Если возникает необходимость добавить еще один вариант Таблицы в книгу "Varianty", то возвращаюсь в книгу Источник и запускаю второй макрос. Второй макрос: Выделяется необходимый диапазон ячеек и копируется. Переходим в Книгу "Varianty" и ищем последнюю заполненную строку в Первой таблице смещаемся от нее на 6 строк ниже и вставляем новый вариант Таблицы. На этом макрос заканчивает свою работу. В итоге если нужны еще варианты, то я просто снова запускаю второй макрос. И так до бесконечности. Но мне этого показалось мало. Для лучшего визуального оформления я решил добавить в строки кода второго макроса вставку текстового значения Вариант 2. в ячейку (выше на одну строку от первой строки добавленной Таблицы). Смотрибельность улучшилась. Но вот беда. При каждом добавлении нового варианта Таблицы над ними вставляется одно и тоже текстовое значение Вариант 2. Можно конечно потом ручками исправлять Вариант 3, Вариант 4 и т.д. Но это ведь не есть умно. В VBA есть оператор Count. Вроде он работает как счетчик, но как прикрутить его в свою макрос не пойму. Второй макрос, который вставляет варианты такой:
Оба этих варианта мне не по зубам. Рад буду как простому так и более сложному. Уповаю и взываю к Профи VBA. Прошу Вашей помощи, господа! |
|||
|
11.02.2015 19:26:03
К сожалению в отличие от многих специалистов посещающих этот форум с VBA я на "ВЫ", а не на "ТЫ". Мало чего понимаю. Макросы в основном создаю макрорекордером. Само-собой результат получается топорный. Уважаемый специалисты подскажите что нужно исправить в моем макросе чтобы решить задачу . Вкратце опишу суть. Работаю в Excel 2003. Есть книга с диапазоном данных с формулами и значениями. К диапазону применен автофильтр. На нижней границе диапазона в заданных столбцах в ячейках содержатся формулы с функцией =ПРОМЕЖУТОЧНЫЕ.ИТОГИ. Копирую заданный диапазон и вставляю на лист в новую книгу. По умолчанию вставляются значения. Однако для обоснования расчетов от меня требуется в новой книге в заданные столбцы перенести формулы и заменить результирующие значения формулой SUM. Для этого я снова возвращаюсь на первую книгу и копирую заданные диапазоны в нужных для меня столбцах, затем в новой книге в соответствующих столбцах вставляю как формулы. Поэтому алгоритму создал макрос. Однако никак не могу решить проблему. Например в результирующей ячейке столбца D где должна быть функция сумм вставляется вышеупомянутая =ПРОМЕЖУТОЧНЫЕ.ИТОГИ. Соответственно возникает ошибка. Я дополнил вручную макрос тем, что бы в результирующей ячейке вставлялась функция сумм. Сделал это так: Сначала активной ставиться ячейка D2. Затем включаю поиск по столбцу D через параметр форматирование. Ищу ячейку с форматом шрифт Calibri полужирный размер 11. Именно такой формат имеет результирующая ячейка. Найденная ячейка становиться активной. Перезаписываю её формулой SUM. Все заработало. Однако все жестко привязано к заданному количеству ячеек (а точнее строк) если их потом будет меньше или больше чем при ситуации когда писался макрос, то итог получается не правильным. Я уже понял что в макрос нужно ввести переменные для определения адреса верхней ячейки и нижней и потом переменные включить в формулу SUM. Но как на практике это сделать ума не приложу. Много вариантов перепробовал, но ничего не получается. Для упрощения приведу кусок макроса отвечающего именно за вставку формулы SUM в результирующую ячейку столбца D
iRowStart = ActiveCell.Row 'получаем номер строки верхней ячейки диапазона iRowEnd = ActiveCell.Row 'получаем номер строки нижней ячейки диапазона Здесь на форуме откопал похожую тему ( По задумке нужно ввести еще одну переменную типа z = iRowEnd - iRowStart , как раз бы в моем примере получилось бы число 6 , так как iRowStart в ячейке D2 равно 2, а в последней ячейке в столбце D найденной по формату равно 8, то есть 8-2=6. Но ни фига ничего не получилось. Почему-то Selection.FormulaR1C1 = "=SUM(R[-z]C:R[-1]C)" не переваривает переменную z. Компилятор выдает ошибку когда пытается выполнить код с этой строки. Прикладываю файл с примером. В нем два макроса привязаны к кнопкам "книгаobosnovanie" - запускает макрос на создание новой книги с именем obosnovanie и копирует заданный диапазон данных с AD2 : AO307 из текущей книги в книгу "obosnovanie" с сохранением форматирования и ширины столбцов. Второй макрос (кнопка книга с переносом формул) сначала запускает макрос книгаobosnovanie, а потом переносит в заданные столбцы "D", "G", и "I" не значения, а формулы. Помогите пожалуйста доработать макрос, чтобы SUM правильно считала по столбцам независимо от размера диапазона. Файл вылез за 100Кб. Хотя всё удалил что лишнее.. Пропустите А?! Нет файл не лезет. Запаковал его в zip.
Изменено: |
|||
|