При удалении таблице DataBodyRange и создании новой строки, таблица откуда-то восстанавливает формулу столбца. Найти бы где она хранит эти формулы. Прикладная VBA-задача, например, может быть такой - выяснить соответствует ли формула в строке таблицы, общей формуле для всего столбца (при этом у всех ячеек столбца формула может быть не верна (при создании новой строки она была бы иная), а значит сверять формулы строк относительно друг-друга тупик. Хочется прямолинейно решить задачу, а не, например, через костыль, где я создаю дополнительную строку, смотрю ее формулы, а затем сношу)
|
22.08.2021 17:48:26
Всем привет!
Выкладываю код одной из функций, которая работает в 64-х разрядной версии эксель, но выдает "разрушительный сбой" на 32-х разрядной версии эксель. Я гуглил о проблеме и так понял это связанно с "option explicit", который прописан в модуле "Эта книга". Не нашел как адаптироваться если функций в книге несколько. В общем мне нужно чтобы все мои функции книги работали на обоих версиях экселя Откликнувшимся большое спасибо!
|
|||
|
|
|
|
04.06.2021 21:51:11
Всем привет!
Хочу поделится наработками, которые получились в процессе реализации своих задач. Может описываемое тут кому-то покажется банальным, но в сети мало информации по конкретным действиям. Я много потратил времени на поиски того как в удобной форме подружить Excel и Python. Ниже подробно расписываю, что нужно делать чтобы работа с "Python" в файл Excel стала удобной, а главное чтобы файл эксель можно удобно было передать другому человеку, который ничего не знает о программировании и у которого на компьютере отсутствует Python и при этом все работало (это возможно если установить Python на общем сетевом диске или передать файл вместе с папкой в которой установлен Python). Идея не моя, вдохновителем улучшений является сайт . По ссылке предлагается несколько вариантов: с предустановленными библиотеками и без. Нет разницы в том что вы выберете, чтобы вес портативной сборки был меньше я беру голую сборку (голую сборку определить можно по весу скачиваемого файла - около 25мб). Разархивируйте скаченную папку в любое место на компьютере или в сети (на работе). Шаг 1. Установить библиотеку "xlwings" для Python в "WinPython Command Prompt.exe":
Шаг 2. Скачайте файл "" и открыв его пропишите путь к файлу "python.exe" в ячейке b1 на листе "xlwings.conf". У меня этот путь выглядит так: C:\Winpython64-3.10.1\python-3.10.1.amd64\python.exe По совершению указанных действий папка с Python (и библиотекой "xlwings") станет портативной, ничего не слетит, если вы поставите другие библиотеки и затем решите переместить эту папку в другое место на своем компьютере или поделитесь папкой с коллегой. При перемещении сборки на другой компьютер она сможет работать с файлом , требуется только задать правильно путь в ячейке b1 на листе "xlwings.conf" (шаг 2). 2. Файл Excel с модулем "xlwings" для удобной работы с библиотекой "xlwings" для Python Чтобы во всем этом разобраться, рекомендую ознакомится с , но если у вас есть время на чтение понятной литературы, то рекомендую бесплатно cкачать и прочесть "Python for Excel" от автора этой библиотеки (Felix Zumstein). Книга на английском языке. Ориентирована на людей мало знающих программирование, все хорошо объясняется с азов. Гугл хром отлично переводит и сайт и книгу.Некоторые подробности, которые будут полезны по мере погружения в изучение библиотеки "xlwings": надстройка Excel "xlwings" для работы файла не используется, у меня она даже не установлена. Исходным файлом является файл "Standalone", который после установки библиотеки "xlwings" (о том как установить библиотеку я написал в 1 пункте) вы сможете найти тут: "Ваша папка с Python"\App\Python\Lib\site-packages\xlwings\quickstart_standalone.xlsm" Из исходного файла я взял лист "xlwings.conf" и модуль VBA "xlwings", этот модуль вы можете обнаружить через штатный редактор VBA. Подробности о Standalone-версии, по-моему, есть только в упомянутой книге "Python for Excel". А на сайте информации, к сожалению, не много, - смотрите . Отличие моего файла от исходного файла "Standalone" в том, что для его работы не требуется размещать скрипт Python в той же папке и под тем же именем что и файл Excel. На сайте опция со спрятанным кодом Python внутри книги Excel предлагается только по платной подписке до версии "PRO", и эта платная возможность реализована там каким-то другим способом (не тем, которому я даю описание). 3. Хранилище файлов из листа Excel. Позволяет хранить скрипты с кодом Python прямо в файле Excel.Если бы не нашлось этого решения, пришлось бы хранить файлы с расширениями ".py" отдельно от файла Excel в одной папке, либо где-то отдельно и прописывать к ним пути в ячейке "B3" листа "xlwings.conf", что не так прикольно. К счастью, оказалось, что код с cyberforum.ru прекрасно скопировался через штатный редактор VBA прямо в лист "xlwings.conf" Standalone-версии, которая упоминается в пункте 2. Адаптации кода не потребовалось (я отредактировал только необязательный "test"). Если потребуется, то все описываемые действия из пункта 3 легко повторить, но вам ничего не нужно делать, при скачивании мной прилагаемого файла: чтобы увидеть файл скрипта "Python", хранящийся в Excel просто запустите макрос "START_MENU" Запуск: А. Скачайте файл Excel ниже.Б. Скачайте портативную чистую версию Python отсюда: В. Проделайте шаги 1-2 из пункта 1. Г. В файле Excel нажмите кнопку теста на работоспособность. Если вы видите, что меняется текст в ячейке "B14" после нажатия кнопки теста, то принимайте поздравления - ваша сборка полностью готов к плаванию в океане под названием "Python"! Важно: Для просмотра скриптов Python (файлы с расширениями ".py"), их выгрузки для редактирования и загрузки новых редакций, пользуйтесь макросом "START_MENU". Описание макроса и его функционала найдете по ссылке в 3 пункте. Оставлю это здесь:1) pywin32 устанавливается автоматически на первом шаге и может так случиться, что придется откатить его до предшествующей версии с помощью "pip install pywin32==302" где "302" это номер версии до которой нужно откатиться (у вас вероятно будет не 302-я версия, смотрите через команду "pip list"). 2) Если в пункте №1 вы скачали облегченную портативную сборку и хотите чтобы в ней заработал вложенный файл "WinPython Control Panel.exe", который скачался вместе со сборкой Python, выполните в "WinPython Command Prompt.exe":
Требования: любой Windows 8+, 2 ГБ оперативной памяти Тестировалось 25.12.2021 на сборке: Python x64 v.3.10.1 pywin32 v.303 xlwings v.0.25.3
Изменено: - 06.09.2022 21:06:42
|
|||||
|
|
|
|
02.06.2021 13:31:36
Добрый день!
Написал код по ходу выполнения которого, чтобы пользователю не было скучно, запускается заставка (обычный скринсейвер). Заставка автоматом отключается от любого действия пользователя . В том числе движения мышкой в любую сторону. Такая вот беда - эта заставка в 20% случаев отключается сразу после запуска - из-за инерционного движения мышкой после нажатия кнопки на которую привязан макрос. Т.е. макрос уже работает, а пользователь в это время все еще двигает мышку в области кнопки по инерции. Мне нужно как-то в коде учесть это. Пока придумал только пауза 1 секунду выдерживать между нажатием кнопки с макросом и запуском скринсейвера Application.Wait Time:=Now + TimeValue("0:00:01") Но мне не нравится это мое решение, секунды мало, а на большую паузу я не согласен - так как запуск заставки через 2-3 секунды от нажатия кнопки смотрится так, словно компьютер еле запустил ее (ощущение что код тормозит). Выход вижу в коде, отключающем движения мышкой на пару секунд, сразу после нажатия кнопки с макросом. Но не знаю как его реализовать. |
|
|
|
|
|
20.12.2020 14:28:12
Добрый день!
Протянул формулу СУММ по столбцу где данные с количеством знаков после запятой не более чем 2, формула выдала результат "558191214,999993" Все перепроверил такого не должно было быть, исходные данные не содержат разрядов больше чем сотые доли. Глюк? Пример, к сожалению не удается ужать в 100кб - суммируется много данных.
|
|||
|
|
|
|
01.12.2020 06:56:37
Добрый день!
Есть длинный фрагмент текста типа CE.U1.RPR.0120.10UJA.0.AR.LC0017-ST02 Нужно чтобы формула находила фрагмент "10UJA" конкретно в этом примере. Но не все так просто. Возможны варианты, где искомое будет изменяться (не будет только "10UJA"). Искомое значение это текст вида "xxUyy", где: -xx - число от 10 до 29 (например 10UJA, 15UJA, 29UJA); -U - символ "U" в английской раскладке (10UJA); -yy - любые две буквы английского алфавита (например 10URS, 15UJA, 29UVF) Искомому фрагменту всегда предшествует символ "точка". |
|
|
|
|
|
29.11.2020 15:49:00
Как переписать фрагмент макроса чтобы в коллекцию попадали только уникальные значения из столбца (а не все, как сейчас)
|
|||
|
|
|
|
21.11.2020 19:05:35
Здравствуйте форумчане!
Задумался о построении БД в своем отделе. В отделе 7 человек, из этих 7-и сотрудников знания эксель только у двоих отличные. По этой причине ни о каком уходе из файлов эксель в другие СУБД не может быть и речи. Из 7-и человек работать в этом смогут только двое да и не работать учиться))) Остальные сотрудники кроме пользовательского экселя ничему не обучаемые. Это я к тому что прежде чем предлагать всякие MySQL, PostgreSQL и Power BI вы представляли реалии кто будет с этим работать. Естественно, делать так чтобы в отделе работало только два человека в мои планы не входит. По этой причине необходимо создать БД отдела максимально дружественную к пользователям Excel. Уход в Access тоже не подойдет по тем же соображениям и плюс много сложной отчетности, которая должна быть построена на БД. Осложняющим фактором является то, что нет устроявшейся формы отчетности, приходится то так сделать, то эдак. По этой причине строить отчетность в Access нет никакого желания. Имея такие вводные пришла идея выкручиваться следующим образом. 1. В отдельных xlsx файлах вести файлы-справочники. Один файл - один справочник. Например, в одном файле перечень договоров по подрядчикам, во втором файле реквизиты субподрядчиков, в третьем файле данные о ходе сдачи документации заказчику, в четвертом файле единичные расценки по видам работ, в пятом классификатор, присваеваемый виду работ и т.д. В общем будет как-бы множество столбцов, но не в одной раздутой книге Эксель, а в некоем множестве книг. Эдакий конструктор, из которого 2-е сотрудников будут строить сложную отчетность по общему идентификатору (разную, в т.ч. по новым формам) 2. Всей файлы-справочники (вместо того чтобы использовать ВПР) связать через Access, но при этом не загружать их в сам Access, а только создать связанные таблицы. 4. На основании запросов power query к Access 2-е сотрудников смогут строить сложную отчетность для отдела (отчетность будет опят же строится в файлах эксель). При этом файлы отчетности будут не такие тормознутые как было ранее (не будет множества ВПР-формул), а самое главное в них легче наводить порядок если изменилось что-то в справочнике (не придется переделывать все отчеты). Кроме того наводить порядок смогут низкоквалифицированные сотрудники отдела - они смогут разобраться в файле-справочнике. При такой схеме сотрудники, которые кроме экселя ничего не хотят знать, не останутся без дела - им я смогу вовлечь в наполнение файлов-справочников. Они смогут их подкорректировать при необходимости, так как это же знакомый им эксель! В общем получается схема: База эксель - Access для построения связей между справочниками в Excel - Запрос power query к Access - отчетность в Excel Отдельно хочу пояснить почему не рассматриваю power pivot . Строить модель данных в power pivot не подходит так как 1. Мне не нужна сводная таблица в отчетности. А выводить данных из pivota во что-либо другое, отличающееся от сводной таблицы, как я понял, не выйдет. 2. Проблематично подключиться через power query к модели данных power pivot. Получается система нипель туда закачать данные не вопрос, а обратно танцы с бубном. Что посоветуете мне? Правильная ли моя идея идти к решению проблемы БД через Access? Может есть какой-то другой подходящий инструментарий. |
|
|
|
|