Рекомендую задать для dates тип range. А имя листа можно получить так:
| Код |
|---|
Private Function GetSheetName(myRange As Excel.Range) As String GetSheetName= myRange.Worksheet.Name End Function |
|
28.06.2018 12:55:50
Михаил Комиссаров, спасибо! Обязательно гляну
|
|
|
|
|
|
12.03.2018 21:28:20
Jungl,спасибо за ответ!
Пробовала я в "начале пути" в дев режиме отследить - ничего не поняла. Но присмотрюсь внимательнее Заказать не наш вариант, кризис-экономия, все дела. Да и мне интересно в это углубиться Stop не подходит, тк требует обязательного нажатия пользователем Run, а предполагается, что пользователь запустит макрос и уйдет пить чай, иначе смысла данной программы нет. |
|
|
|
|
|
17.11.2017 13:47:42
Пользователь задаёт период времени - Ночь, всё остальное считается День
У меня огромная исх таблица и макрос сам очень большой, то что я приложила - это кусок из цикла, в который всё пришло уже в переменных Всё же обновила файл в первом сообщении вставила кусок таблицы со временем сделки и периодом времени |
|
|
|
|
|
17.11.2017 13:24:34
Добрый день, товарищи форумчане!
Собираю интересные идеи Есть отчет по сделкам, с указанием времени сделки.И есть период времени, заданный пользователем (по задумке задаётся период, который для данного отчета считается Ночью). Отчет обрабатывается макросом, в том числе нужно проверить входит ли время сделки в указанный период. Если период задан в одних сутках (напр., 00:00-05:00), проблем никаких, просто сравниваю время сделки с начальным и конечным Но если период задан в разных сутках (напр., 23:00-05:00), такое не прокатывает. Придумала алгоритм - дробить период на два (23:00 - 23.59 и 0.00-05.00) и сравнивать с каждым из них, но громоздко как-то получается (файл прикладываю) Может у кого-то есть идеи, как сделать такую операцию "красиво"? На форуме подобного не нашла Заранее спасибо!
Изменено: - 17.11.2017 13:45:13
|
|
|
|
|
|
17.11.2017 12:27:57
Массивы - это просто ВАУ
Переделала всё под массивы - ничего теперь не глючит, а время выполнения сократилось до 2-3 сек на одну проверку , огромное спасибо за наводку! Без вашего совета неизвестно, когда бы я дошла до изучения массивов, а теперь буду супер программистом Вопрос снят |
|
|
|
|
|
15.11.2017 13:30:44
, спасибо!
Проставила везде "Set Range = Nothing" - это действительно немного увеличило лимит нормальной работы. Т.е. если я добавляю в настройки 10 лимитов вида «Билеты Авиа – класс» и запускаю проверку первый раз - excel не тупит (раньше тупил). Но если с теми же настройками запускаю второй раз - опять тупит. (При чем если добавляю в настройки не 10 проверок, а, например, 3 проверки, то запускается нормально 3-5 раз, а потом тоже начинает тупить) Не думаю, что в моём случае это связано с обращением к ячейкам, т.к. проверка вида «Гостиницы-стоимость» и обращается к большему количеству ячеек, и записывает инфо в намного большее количество ячеек, но работает безотказно, ничего не глючит. Не имею работать с двумерными массивами, поэтому все временные таблички загоняла в ячейки. Сейчас попробую вместо диапазона буферного листа использовать двумерный массив, может поможет, надо ж когда-то учиться Вопрос пока актуален |
|
|
|
|
|
15.11.2017 12:03:46
Добрый день, уважаемые форумчане, прошу вашей помощи Пишу макрос для проверки списка сделок на соответствие заданным параметрам (лимитам). Краткая суть: Пользователь вставляет список сделок на лист «Исходный отчет», добавляет нужные ему параметры на листе «Настройки отчета» (через готовые формы), нажимает Запустить проверку – на лист «Отчет_по_лимитам» выпадает Исходный отчет + рассчитанные макросом столбцы. Виды параметров (лимитов) могут быть разными, соответственно в зависимости от того какой вид прописан в столбце С – запускается соответствующая проверка. Может быть внесено несколько лимитов одновременно, соответственно сколько внесено – столько проверок и будет происходить. При нажатии «Запустить проверку» вызывается макрос из главного модуля, из которого в зависимости от заданного вида уже вызываются другие макросы Теперь к сути проблемы: Сейчас у меня реализованы два вида проверок «Гостиницы-стоимость» (md3_CheckHotels) и «Билеты Авиа – класс» (md5_CheckAvia_class). С первым всё отлично – можно запустить хоть 10 штук проверок этого вида и отрабатывает как надо. Если запустить несколько проверок по второму виду – макрос отрабатывает, но Excel после этого становится неработоспособным: тормозит и не отрисовывает нормально интерфейс, либо отрисовывает, но очень долго. Нажимаешь «Сортировка и фильтр» - выпадает контекстное меню, но выбор в нём сделать невозможно, строки на которые наводишь курсор не подсвечиваются; если свернуть excel – пропадают названия листов (не отрисовываются судя по всему) и появляются, если наводишь мышью на ту область, где они должны быть. Таким образом начинают тормозить все открытые книги. Если сохранить-закрыть-открыть - все становится нормально, ничего не глючит Пробовала наблюдать во время работы макроса за excel’ем через диспетчер задач - ничего криминального не заметила Такое ощущение, что во время отработки «CheckAvia_class» то ли какое-то важное application.property меняется, то ли перегружается память (хотя в диспетчере задач этого не видно) Есть идеи, в чём может крыться проблема? Буду рада ответить на любые уточняющие вопросы. У меня excel 2016. Предполагается, что макрос будут использовать разные пользователи с excel 2010 - 2016 П.С. Программирую только два месяца, возможно опытные мастера заметят что-то бредовое в коде – буду рада любым советам Ссылка на файл: |
|
|
|
|
|
03.10.2017 13:36:55
Всем спасибо, вопрос снят
Для истории Реализовала такую логику: Макросом сформировала новую схему xsd для экспорта (попроще,без атрибутов), "натянула" схему на таблицы, в которые планирую помещать пачки. Второй макрос разбивает базу по пачкам в разные таблицы, экспортирует пачки по разным файлам на основе схем. Третий макрос с помощью методов MSXML соединяет файлы - пачки в родительский элемент Репорт, и добавляет требуемые атрибуты, форматы и т.д. Вся соль только в том, чтобы освоить msxml, т.к. полноценной справки не нашлось. Некоторые методы пришлось брать из справки по JavaScript и перекладывать на синтаксис VBA |
|
|
|
|
|
20.09.2017 11:30:52
Добрый день, уважаемые форумчане! Прошу помочь советом, как начинающему специалисту) Есть репорт в Excel – список транзакций. Партнёру необходимо предоставить этот же репорт в формате xml по структуре (xsd скачала на сайте разработчиков ПО партнера - прилагаю). Сейчас этот репорт собирается вручную, моя задача – автоматизировать процесс. В зависимости от статуса транзакции разбиваются по пачкам, причём одна пачка не может содержать более 50 транзакций. Т.е. если у нас 60 транзакций в статусе 1, 10 в статусе 2, то на выходе мы должны получить 3 пачки. 1 пач = 1-50 транзакции статуса 1, 2 пач = 51-60 транзакции статуса 1, 3 пач = 10 транз в статусе 2. Просто экспортировать по карте Excel не дает, ошибки: список списков, ненормированные данные, невозможно сопоставить элемент. Насколько я понимаю, это связано со слишком сложной структурой xsd. (Стоит отметить, что половину тех элементов, которые прописывают в схеме разработчики, наша компания не использует. ) Я попробовала упростить схему через приложение XMLSpy, убрала на схеме элементы “choise”, удалила основную массу неиспользуемых элементов, оставила возможность обработать только одну пачку (предполагаю, что буду разбивать источник по пачкам на разные листы, по каждой пачке по отдельности вытягивать в xml, а потом соединять в один файл) - укороченную схему тоже прилагаю. В итоге у меня получается сопоставить и экспортировать документ до элемента TAX – перерабатывается корректно. Дальше, если я сопоставляю любой элемент, то выходит ошибка карты: Невозможно сохранить отношения сопоставленного элемента с другими элементами. В XML у меня не получается найти ошибку. Помогите пожалуйста разобраться, что не так И подскажите способ для нумерации пачек и транзакций в них (так, чтобы транзакции 51-100 падали в пачку 2, 101-150 в пачку 3 и т.д.) P/S/ До сего дня этот файл собирали вручную, прямо таблице сцепляя значения с нужными тэгами, потом формулой таблица перегонялась в один столбец и просто копировался в блокнот. Как вы считаете, возможно лучше не морочиться с XML и реализовать аналогичную логику на VBA? Мне было бы это попроще написать, но вроде это как-то костыльно P/P/S Опыта с программированием пока мало, не судите строго, если что не так, я только учусь. |
|
|
|
|