Апострофф, спасибо.
VBA странность при работе с переменными
VBA странность при работе с переменными
27.04.2016 13:39:37
Добрый день, коллеги!
При написании простейшего кода столкнулся со странностью - при использовании переменной типа integer и приравниванию к ней значения пустой ячейки, длина данной переменной через len = 2. Подскажите, в чем дело, чтобы не попадаться на такое в будущем. Спасибо!
Изменено: |
|
|
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
27.04.2016 10:56:38
Hugo, после прочтения Вашего сообщения в моей душе поселилась печаль, ибо что нужно сделать - примерно понимаю, а вот как перенести это дело в код - нет.
Не встречалась ли Вам подобная задача с реализацией через эти самые словари/коллекции? Именно подобная, потому что, как показала практика в лице совета ув. Sanja из Тем временем, переспав со своей проблемой, на утро на ум пришел простой вариант ее решения - через введение переменной LastRow и конструкции Select Case. Если у кого возникнет похожая проблема и кто также не разбирается в коллекциях, то я сделал так: Первый Case - в случае если Application.Match названия новой книги по отношению к уже загруженному диапазону названий = 0 (т.е. название книги встречается впервые), то смещение по строкам относительно первой ячейки происходит не на величину счетчика количества открываемых файлов, как раньше, а на LastRow (последняя заполненная строка диапазона имен открываемых книг). Дополнительное условие в этом Case - если счетчик открываемых книг = 1 (т.е. открыта самая первая книга), то смещение происходит как раньше - на этот счетчик открытий. Второй Case - Application.Match >0 (т.е. название уже встречалось), в котором смещение происходит на LastRow - 1 В принципе, свою задачу я решил и номинально тема закрыта, но мне интересна ее реализация через словари/коллекции. Так что если кто захочет реализовать идею ув. Hugo, буду благодарен. Для этого прикрепляю доделанные файлы-примеры, в которых на этот раз происходит некая выгрузка данных. |
|
|
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
26.04.2016 20:07:26
Hugo, спасибо, теория стала чуть понятнее, кроме момента
А по поводу Вашего замечания по поводу постановки вопроса -
Структура рабочих книг такова, что в каждом из них - данные по 2 годам, (например, А_2001 содержит данные за 2000-2001гг). Целевой же файл содержит таблицу с диапазоном 2000-2014 гг, и в случае, если в конкретной открываемой книге нет данных нужного периода, данные ячейки просто не изменяются. Сейчас выгрузка происходит "лесенкой", см. пример При объединении в одну строку данные будут выгружаться корректно (при условии, что необходимую величину смещения получится загнать в переменную) |
|||||
|
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
26.04.2016 19:08:00
Sanja, я изучил Ваш пример, уже час с ним мучаюсь, пытаясь приладить под свои нужды, но особого понимания не добавилось - в Вашем примере было два сформированных массива, а в моем случае - ни одного (либо один, если за него принять еще пустой массив с выгруженными названиями). А как сделать сверку с названием новой выгружаемой книги с этой коллекцией, как вернуть номер совпадения этого названия (через application.match, же?), и самый главный вопрос, как в итоге прийти к уменьшению смещения в целевой книге с количества открываемых книг на количество их уникальных наименований?
Я не могу понять, какой должен быть алгоритм, снова смиренно прошу помощи.
Изменено: |
|
|
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
26.04.2016 17:41:03
Hugo, к сожалению, мне еще не доводилось сталкиваться ни со словарями, ни с коллекциями на практике, но буду копать в этом направлении, спасибо за наводку!
А пока я сделал упрощенный пример-шаблон, выгружающий имена книг, буду благодарен, если кто-нибудь подскажет как советы, ув. Hugo реализуются на практике. Прилеплены: файл "пример" и три пустых загружаемых файла.
Изменено: |
|
|
VBA. Вытягивание данных с закрытых книг их автоматическая группировка
26.04.2016 17:05:08
Добрый вечер, уважаемые!
Стоит следующая задача - необходимо выгрузить данные из закрытых книг в целевую книгу. При выгрузке, книга открывается, из нее данные вставляются в строку целевого файла, книга закрывается, после чего в целевом файле происходит смещение на 1 строку вниз и цикл повторяется. Некоторые книги могут иметь схожее название, отличающееся лишь идентификатором (например, А_2010, А_2011, Б_2010). Необходимо выгрузить данные так, чтобы книги с одинаковым общим названием выгружались в одну строку (смещения не происходило). Выгрузка у меня реализована должным образом, но вот никак не могу сделать это проклятое объединение строк. Прикрепляю пример того, что нужно получить (при этом суммировать значения объединяемых данных не нужно) Выглядит это все как задача извлечения уникальных значений массива (я уже вставил макрос, уважаемого В случае необходимости пришлю рабочий файл (здоровенный и туманный) Спасибо! |
|
|
Спецвставка с умножением на константу или переменную, макрос
Спецвставка с умножением на константу или переменную, макрос
Спецвставка с умножением на константу или переменную, макрос
25.04.2016 13:10:36
![]() Можно ли и если да, то каким образом применить данную конструкцию при полном обращении к диапазону? К примеру, такой код у меня выдает ошибку:
|
|||||||
|
Метод Application.Match со ссылкой на другую книгу, ошибка в коде
Метод Application.Match со ссылкой на другую книгу, ошибка в коде
Метод Application.Match со ссылкой на другую книгу, ошибка в коде
Отзывы о работодателях и исполнителях, Посмотрите, прежде чем взять/предложить работу
Помощь в доработке макроса
01.04.2016 15:28:15
Добрый день!
В продолжение темы на форуме К сожалению, все оказалось не так радужно. При попытке адаптировать вариант уважаемого Sanja к своим нуждам, у меня возникли следующие проблемы: 1) при работе первого макроса, выгружающего данные из файлов-исходников, происходит конфликт с макросом модуля листа, что приводит к бесконечному (или конечному, но требующему более 5 минут) циклу пересчета изменяющихся значений, и их постоянному перемножению (критично). 2) при обработке введенных ранее значений, макрос из модуля листа работает исключительно долго, пересчитывая 32 значения около 10 секунд (неприятно, но терпимо) 3) при попытке изменения более 2 ячеек одновременно происходит пересчет всего столбца, вне зависимости от прописанных условий (неприятно, но терпимо) Путем измышлений я пришел к следующим возможным решениям: а) Основной макрос при выгрузке изменяет значение "-" (введенное по-умолчанию) на один из вариантов "млн / млрд". Для решения этой проблемы нужно как-то задать очередность выполнения макросов, чтобы модуль листа работал только после загрузки данных основным макросом, т.е. после первого изменения значения "-" на значение "млн/млрд", т.е. нужно как-то объявить переменные в 1 макросе и счетчики количества их изменений, которые привязать к модулю листа; б) Для решения второй проблемы нужно как-то перенести тело макроса листа в отдельный модуль, оставив на листе исключительно вызов этого макроса при выполнении условия а) Просидев часов 5 над решением этих задач, я понял, что знаний у меня резко недостает, поэтому готов рассмотреть вариант платной помощи уважаемых гуру, в случае, если задача излишне трудоемкая. По запросу могу выслать образец файла-исходника для загрузки данных. Нужно только это, оптимизация уже написанного кода не обязательна. В общем-то, я бы удовлетворился и советом с форума о механизме реализации задачи, но, к сожалению, нет времени ждать. Напишите приблизительную цену. Спасибо!
Изменено: |
|
|
Автозамена в формулах незащищенных ячеек
31.03.2016 19:08:50
bedvit, спасибо за ответ!
Действительно, замена макросом работает отлично. Но дело в том, что я делаю инструмент для своих коллег, которые не очень дружны с экселем, и подавно - с вба, так что использование кода для индивидуального использования каждого пользователя отпадает. Я надеялся обнаружить решение, подобное решению для работы структурированных строк/столбцов в защищенных листах - код, прописываемый в модуль книги, и нормализующий его работу. Однако даже на англоязычных ресурсах пока не натыкался ни на что похожее. Пока вопрос остается открытым. |
|
|
Выполнение части макроса при изменении соответствующих ячеек
Автозамена в формулах незащищенных ячеек
Выполнение части макроса при изменении соответствующих ячеек
31.03.2016 17:08:10
Sanja, большое спасибо за ответ!
Однако у меня не получилось. Этот код работает на лету, однако по прежнему изменяет все столбцы при изменении одной ячейки
|
|||
|
Выполнение части макроса при изменении соответствующих ячеек
Автозамена в формулах незащищенных ячеек
Автозамена в формулах незащищенных ячеек
28.03.2016 16:53:32
Добрый день, уважаемые!
Традиционно не обнаружил ответа через поиск, поэтому создаю тему. Ситуация следующая: при защите листа и отмене защиты некоторых ячеек, в данных ячейках возможно изменение как значений, так и формул вручную. Однако при попытке изменений формул в данных ячейках при помощи замены ("найти и заменить" - Ctrl+F) возникает ошибка (запрет об использовании данной команды на защищенном листе". Вопрос: можно ли каким-то образом разрешить замену без снятия пароля с листа? Спасибо!
Изменено: |
|
|
Изменение макроса при помощи другого макроса
Изменение макроса при помощи другого макроса
26.02.2016 18:49:42
Александр Сергеевич, отличный вариант! Но вопрос был именно в возможности изменения макросом макроса
The_Prist, в краску вгоняете ![]() |
|
|
Изменение макроса при помощи другого макроса
VBA: application.vlookup - error 91, Есть 2 макроса, в одном нет ошибки, в другом - есть
16.02.2016 15:38:16
Спасибо!
А вот статья о том, почему лучше не использовать .select И еще
Изменено: |
|
|
VBA: application.vlookup - error 91, Есть 2 макроса, в одном нет ошибки, в другом - есть
16.02.2016 14:31:17
Sanja, когда прочитал Ваш ответ засмеялся сквозь слезы) Два часа сидел ошибку выискивал. Спасибо огромное!
Hugo, замечание по option explicit учту, спасибо. Кстати, не сочтите за оффтоп (т.к. в продолжение option explicit). Вы не подскажите, нет ли где эдакого "перечня хорошего тона при написании макросов vba"? Я вот, например, слышал, что не приветствуется использование конструкций GoTo и ActiveBook/Cell, теперь вот OptionExplicit добавилась в копилку знаний, но таких тонкостей же гораздо больше. |
|
|
VBA: application.vlookup - error 91, Есть 2 макроса, в одном нет ошибки, в другом - есть