Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
VBA формула, узнать полный адрес передаваемого интервала в параметре (включая workbook)
 
Добрый день!

Рекомендую задать для dates тип range. А имя листа можно получить так:
Код
Private Function GetSheetName(myRange As Excel.Range) As String
    GetSheetName= myRange.Worksheet.Name
End Function
Изменено: Sasha0601 - 25.12.2018 11:59:06
формула не выдаёт расчёт при ссылке на диапазон дат
 
Доброго дня!
Не работает, т.к. вы ссылку на ячейку ставите в кавычки ( ">=С3") и она воспринимается как текст
Нужно прописывать конкатенацией ( ">=" & С3)
VBA - GETPIVOTDATA при неизвестном заранее количестве аргументов
 
Михаил Комиссаров, спасибо! Обязательно гляну
VBA - GETPIVOTDATA при неизвестном заранее количестве аргументов
 
webley, то что нужно, огромное спасибо!
Ура ура :)  
VBA - GETPIVOTDATA при неизвестном заранее количестве аргументов
 

Добрый день, дорогие форумчане! Помогите пожалуйста советом или ссылочкой в какую сторону копать, совсем не могу сообразить.

Можно ли в VBA использовать метод GetPivotData, если заранее неизвестно точное количество полей, по соответствию которых данные нужно подтягивать?

Пробовала циклом формировать строку, дополняя её нужными полями и значениями, но функция не хочет кушать строку в качестве аргумента.

Пишу макрос для сопоставления данных двух лет между собой. Суть: пользователь выбирает нужные фильтры и уровень детализации конечного отчета (напр. дробить по клиенту, или по филиалу или по всему сразу), запускает макрос. Макрос формирует две сводные таблицы с обеих баз. Сводная с текущей базы просто копируется и берется за основу отчета, а прошлогодние данные должны подтянуться рядом через GetPivotData при соответствии значений в выбранных полях строк. Всего уровней детализации может быть от 0 (полная сверка всех данных базы) до 6, определяются пользователем на листе Macro в блоке ДЕТАЛИЗАЦИЯ.

Краткий пример прикладываю, нужный кусок макроса внутри

Заранее благодарствую всем неравнодушным!

Изменено: Sasha0601 - 28.06.2018 11:02:58
Скачивание zip архива через Internet Explorer НЕ по прямой ссылке
 
Разрешила

В Свойства браузера - Безопасность - Интернет - Другой - Проверка подлинности пользователя - Вход - установить Автоматический вход в сеть с текущим именем пользователя и паролем. Explorer ругается, что это небезопасно, но работает.

Знает ли кто-то из-за какого параметра падает соединение с надежным сайтом или  Интрасетью? В остальном вопрос снят  
Скачивание zip архива через Internet Explorer НЕ по прямой ссылке
 
Всем доброго дня!

Мне удалось-таки отловить прямую ссылку, но теперь встала другая проблема.

Если я не добавляю сайт в списки надежных/интрасетей, то функция URLDownloadToFile не работает, возвращает в результат ошибку -2146697210.

Если добавляю сайт в надежные, то при запуске макроса падает соединение с объектом IE, ошибка "Run-time error '-2147467259 (80004005)': Method 'Document' of object 'IWebBrowser2' failed"

Может быть кто-то знает как побороть?
Вопрос, конечно, не очень по теме. Товарищ Модератор, сообщите, если нужно создать новую  
Скачивание zip архива через Internet Explorer НЕ по прямой ссылке
 
Jungl,спасибо за ответ!
Пробовала я в "начале пути" в дев режиме отследить - ничего не поняла. Но присмотрюсь внимательнее
Заказать не наш вариант, кризис-экономия, все дела. Да и мне интересно в это углубиться
Stop не подходит, тк требует обязательного нажатия пользователем Run, а предполагается, что пользователь запустит макрос и уйдет пить чай, иначе смысла данной программы нет.  
Скачивание zip архива через Internet Explorer НЕ по прямой ссылке
 

Добрый день, уважаемые форумчане! Вот уже неделю ломаю голову над механизмом, необходима помощь!

Делаю макрос для скачивания отчётов из внутренней системы отчетности компании.

Суть: пользователь выбрал список нужных отчетов, ввел параметры (на листе или в форму) – запустил макрос - заходим на сайт – (Начало цикла) кликаем нужный отчёт – вводим требуемые параметры – жмём Сформировать – ждём (от 10 сек до 30 мин в зависимости от объёма) – получаем выплывающее окно Internet Explorer “открыть/сохранить/отменить”- жмём открыть – видим скачанный архив, внутри файл Excel – открываем – переносим листы в нашу книгу (Конец цикла). И так циклом проходим по всем отчетам.

Отловить прямую ссылку на скачивание я не могу, там выполняется какой-то безумный JavaScript, в какой момент и куда он даёт ссылку выяснить не могу. Отдел ИТ у нас на столько поганый, что от них этой инфы добиться не получилось.

Изучив просторы интернета, я так поняла, что к окну Internet Explorer “открыть/сохранить/отменить” обратиться программно никак нельзя (а может всё-таки можно?). Поэтому я навожусь на последний элемент на странице и далее с помощью SendKeys "{TAB}" переключаюсь до нужной мне кнопки.

К сути проблемы – не могу продумать и реализовать механизм открытия книги excel из архива. Было три варианта:

1)      Нажимаю открыть -> Вижу архив -> SendKeys "{DOWN}{ENTER}" (навожусь на файл excel внутри архива, открываю). Если в этом месте кода поставить Breakpoint и потом продолжить выполнение  – всё открывается и далее никаких проблем. Но если брейка нет – книга открывается после выполнения макроса, что и логично. Пробовала вводить DoEvents, Wait, Sleep – безрезультатно. Насколько я понимаю данные команды останавливают не только сам макрос, но и excel, поэтому он ничего не может открыть. Есть ли какой-то программный аналог Breakpoint?

2)      Нажимаю открыть -> Вижу архив ->  SendKeys "{TAB}", SendKeys "{UP}", SendKeys "{TAB}", SendKeys "^{с}" (перехожу на предыдущий уровень, в врехней строке вижу путь, куда IE временно сохранил архив, копирую путь в буфер). Далее разархивирую чудесным макросом от the_Pirst -> открываю книгу через Workbooks.Open. На моём компе работает идеально, на соседнем в этом месте почему-то не срабатывает нажатие TAB (при этом tab в начале кода срабатывает в IE как надо, а в архиве работает UP, ENTER, но TAB ни в какую. Не программно, а реальным нажатием с клавиатуры tab работает)

3)      Нажимаю сохранить –> сохранение происходит по пути по умолчанию (если получится запустить это чудо – заставлю всех пользователей сделать один путь). Далее разархивирую чудесным макросом от the_Pirst -> открываю книгу через Workbooks.Open.  НО! Если файл с таким именем когда-то сохранялся (очень большая вероятность, т.к. большинство отчетов называются одинаково), то мой будет называться уже не «Отчет», а «Отчет (1)». Соот-но макрос выполнится без ошибок, но откроет старую книгу.

Буду благодарна за любые идеи, файл с кодом (написан вариант №2) прикладываю, он сильно черновой и пока заточен под одну конкретную выгрузку.

P/S/ Извините за сумбур, нет сил уже биться костылями с неизвестностью…

Изменено: Sasha0601 - 12.03.2018 18:41:54
Выбор значения по диапазону условий, В ячейке появляется текст при определнных условиях (при использовании различных диапазонов значений)
 
Добрый день!
По вашей формуле на первом условии отсекается всё <150, а на  втором - всё, что >= 150 (а это и 199, и 300, и миллион), поэтому дальше ничего не проверяется.
Плюс ячейки из которых берёте подписи прописывайте с значком $, чтобы при протягивании формулы значения тянулись именно из этих ячеек

Попробуйте так
=ЕСЛИ(E5<150;$F$8;ЕСЛИ(E5<200;$F$9;ЕСЛИ(E5<300;$F$10;$F$11)))
Проверка макросом соответствия шапки таблицы шаблону
 
Lari, тогда вместо шаблонного листа используем массив и цикл по массиву.
У функции Find есть параметр MatchCase – чувствительность к регистру.
Посмотрите вложение
Проверка макросом соответствия шапки таблицы шаблону
 
Всем доброго времени суток!

Lary,
1) Зачем Вы используете замену в макросе? Вам же нужно просто найти, и если не находится - вывести сообщение
   Имхо, вместо метода replace нужно использовать find
2) Чтобы не повторять участки кода отдельно для А,В,С - нужно прописывать такой код в цикл

Переделала Ваш файлик, посмотрите
Изменено: Sasha0601 - 24.11.2017 14:36:11
Проверка вхождения отдельно взятого времени в заданный период времени
 
Да, действиетльно
Не подумала, спасибо за совет  
Проверка вхождения отдельно взятого времени в заданный период времени
 
Ух ты, занимательная математика:) Очень хороший вариант, спасибо!

Я только вот этот кусок
Код
    If StartTime < EndTime Then        
        If MyTime >= StartTime Then
            If MyTime <= EndTime Then CheckTime = True
        End If
    Else
        If MyTime >= StartTime Or MyTime <= EndTime Then CheckTime = True
    End If
заменила на
   
Код
    If StartTime < EndTime Then
        If MyTime >= StartTime And MyTime <= EndTime Then CheckTime = True
    Else: If MyTime >= StartTime Or MyTime <= EndTime Then CheckTime = True
    End If
Проверка вхождения отдельно взятого времени в заданный период времени
 
Пользователь задаёт период времени - Ночь, всё остальное считается День
У меня огромная исх таблица и макрос сам очень большой, то что я приложила - это кусок из цикла, в который всё пришло уже в переменных
Всё же обновила файл в первом сообщении вставила кусок таблицы со временем сделки и периодом времени
Проверка вхождения отдельно взятого времени в заданный период времени
 
Нет, период задается без дат и время сделки без даты.
Общая суть определить время сделки это Ночь или День  
Проверка вхождения отдельно взятого времени в заданный период времени
 
Добрый день, товарищи форумчане!

Собираю интересные идеи

Есть отчет по сделкам, с указанием времени сделки.И есть период времени, заданный пользователем (по задумке задаётся период, который для данного отчета считается Ночью). Отчет обрабатывается макросом, в том числе нужно проверить входит ли время сделки в указанный период.

Если период задан в одних сутках (напр., 00:00-05:00), проблем никаких, просто сравниваю время сделки с начальным и конечным

Но если период задан в разных сутках (напр., 23:00-05:00), такое не прокатывает.
Придумала алгоритм - дробить период на два (23:00 - 23.59 и 0.00-05.00) и сравнивать с каждым из них, но громоздко как-то получается (файл прикладываю)

Может у кого-то есть идеи, как сделать такую операцию "красиво"? На форуме подобного не нашла
Заранее спасибо!  
Изменено: Sasha0601 - 17.11.2017 13:45:13
После выполнения макроса начинает тупить Excel
 
Массивы - это просто ВАУ :)
Переделала всё под массивы - ничего теперь не глючит, а время выполнения сократилось до 2-3 сек на одну проверку

The_Prist, огромное спасибо за наводку!
Без вашего совета неизвестно, когда бы я дошла до изучения массивов, а теперь буду супер программистом 8)

Вопрос снят  
После выполнения макроса начинает тупить Excel
 
Удалось проверить макрос на двух других компьютерах. Где стоит Excel 2010 - такой проблемы не наблюдается, всё работает безотказно. Где стоит Excel 2016 - та же проблема, что и на моём компе
После выполнения макроса начинает тупить Excel
 
The_Prist, спасибо!

Проставила везде "Set Range = Nothing"  - это действительно немного увеличило лимит нормальной работы. Т.е. если я добавляю в настройки 10 лимитов вида  «Билеты Авиа – класс» и запускаю проверку первый раз - excel не тупит (раньше тупил). Но если с теми же настройками запускаю второй раз - опять тупит. (При чем если добавляю в настройки не 10 проверок, а, например, 3 проверки, то запускается нормально 3-5 раз, а потом тоже начинает тупить)

Не думаю, что в моём случае это связано с обращением к ячейкам, т.к. проверка вида «Гостиницы-стоимость» и обращается к большему количеству ячеек, и записывает инфо в намного большее количество ячеек, но работает безотказно, ничего не глючит.

Не имею работать с двумерными массивами, поэтому все временные таблички загоняла в ячейки. Сейчас попробую вместо диапазона буферного листа использовать двумерный массив, может поможет, надо ж когда-то учиться :)

Вопрос пока актуален  
После выполнения макроса начинает тупить Excel
 

Добрый день, уважаемые форумчане, прошу вашей помощи

Пишу макрос для проверки списка сделок на соответствие заданным параметрам (лимитам). Краткая суть: Пользователь вставляет список сделок на лист «Исходный отчет», добавляет нужные ему параметры на листе «Настройки отчета» (через готовые формы), нажимает Запустить проверку – на лист «Отчет_по_лимитам» выпадает Исходный отчет + рассчитанные макросом столбцы.

Виды параметров (лимитов) могут быть разными, соответственно в зависимости от того какой вид прописан в столбце С – запускается соответствующая проверка. Может быть внесено несколько лимитов одновременно, соответственно сколько внесено – столько проверок и будет происходить.

При нажатии «Запустить проверку» вызывается макрос из главного модуля, из которого в зависимости от заданного вида уже вызываются другие макросы

Теперь к сути проблемы:

Сейчас у меня реализованы два вида проверок «Гостиницы-стоимость» (md3_CheckHotels) и «Билеты Авиа – класс» (md5_CheckAvia_class). С первым всё отлично – можно запустить хоть 10 штук проверок этого вида и отрабатывает как надо.

Если запустить несколько проверок по второму виду – макрос отрабатывает, но Excel после этого становится неработоспособным: тормозит и не отрисовывает нормально интерфейс, либо отрисовывает, но очень долго. Нажимаешь «Сортировка и фильтр» - выпадает контекстное меню, но выбор в нём сделать невозможно, строки на которые наводишь курсор не подсвечиваются; если свернуть excel – пропадают названия листов (не отрисовываются судя по всему) и появляются, если наводишь мышью на ту область, где они должны быть. Таким образом начинают тормозить все открытые книги. Если сохранить-закрыть-открыть  -   все становится нормально, ничего не глючит

Пробовала наблюдать во время работы макроса за excel’ем через диспетчер задач -  ничего криминального не заметила

Такое ощущение, что во время отработки «CheckAvia_class» то ли какое-то важное application.property меняется, то ли перегружается память (хотя в диспетчере задач этого не видно)

Есть идеи, в чём может крыться проблема?

Буду рада ответить на любые уточняющие вопросы. У меня excel 2016. Предполагается, что макрос будут использовать разные пользователи с excel 2010 - 2016

П.С. Программирую только два месяца, возможно опытные мастера заметят что-то бредовое в коде – буду рада любым советам  :)

Ссылка на файл:https://ru.files.fm/u/ty2uudee

Преобразование таблицы Excel в XML документ
 
Всем спасибо, вопрос снят

Для истории
Реализовала такую логику:

Макросом сформировала новую схему xsd для экспорта (попроще,без атрибутов), "натянула" схему на таблицы, в которые планирую помещать пачки.
Второй макрос разбивает базу по пачкам в разные таблицы, экспортирует пачки по разным файлам на основе схем.
Третий макрос с помощью методов MSXML соединяет файлы - пачки в родительский элемент Репорт, и добавляет требуемые атрибуты, форматы и т.д.

Вся соль только в том, чтобы освоить msxml, т.к. полноценной справки не нашлось. Некоторые методы пришлось брать из справки по JavaScript и перекладывать на синтаксис VBA
Преобразование таблицы Excel в XML документ
 

Добрый день, уважаемые форумчане! Прошу помочь советом, как начинающему специалисту)

Есть репорт в 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 Опыта с программированием пока мало, не судите строго, если что не так, я только учусь.  
Страницы: 1
Наверх