Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • AlexKud AlexKud 26 постов
  • StariiZoldatt StariiZoldatt 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Vba

С этим тегом используют

Microsoft Excel Excel Макрос Программирование Помощь Microsoft Word Без рейтинга Все
164 поста сначала свежее
14
maxtc
maxtc
3 года назад
MS, Libreoffice & Google docs

Проблемы в работе макроса сделанного записью⁠⁠

Проблемы в работе макроса сделанного записью Microsoft Excel, Vba

Друзья, помогите разобраться что делаю не так. Есть таблица выгруженная из САПа. С ней надо произвести некоторые манипуляции. На первом этапе надо привести числа к нормальному виду.



Вот так они выглядят выгруженные.

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


Вот его текст


Sub Макрос5()


Columns("F:F").Select

Application.CutCopyMode = False

Selection.Replace What:=".", Replacement:="", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False

End Sub


И вот что получается



Пробовал перед заменой принудительно привести к текстовому формату, все равно не выходит.

Проблемы в работе макроса сделанного записью Microsoft Excel, Vba
Показать полностью 1
[моё] Microsoft Excel Vba
40
0
AlexFly2019
4 года назад

Автоматическое переключение вкладок в зависимом файле Excel⁠⁠

Друзья, вопрос такой:

Есть некая таблица, которая заполняется в течение дня. А есть файл, который заполняется автоматически на основе исходной таблицы. И там и там есть много вкладок. Можно ли сделать так, чтобы при переключении вкладки в исходной таблице переключалась вкладка и в файле с зависимой таблице?

Спасибо

[моё] Microsoft Excel Vba Программирование Текст
7
75
excelpro
excelpro
4 года назад
MS, Libreoffice & Google docs

Макросы. Изучаем редактор VBE. Академия Excel⁠⁠

Давайте разбираться где происходит написание макросов? В Excel существует встроенный редактор Visual Basic Editor (VBE), в котором собственно и происходит создание макросов с нуля, редактирование существующий, удаление ненужных.

Посмотрев урок, Вы научитесь настраивать редактор под себя, познакомитесь с новым понятием Модуль (узнаете основные операции с ними).


ПРОШЛЫЙ УРОК


01:05 - Как попасть в редактор VBE

01:41 - Kак вернуться к Excel

02:32 - Настройка внешнего вида редактора

04:24 - Перемещение окон редактора

06:20 - Окно проекта. Знакомство с модулями.

07:26 - Создание модулей

08:04 - Удаление модулей

09:28 - Переименование модуля

11:27 - Форматирование кода макроса

Телеграм канал, для новичков! - https://t.me/joinchat/og7xI9fRFqNmZWZi

Показать полностью
Microsoft Excel Таблица Vba Видео
1
21
K0T0FEICH
K0T0FEICH
4 года назад
MS, Libreoffice & Google docs

Нужна помощь в написании VBA⁠⁠

Не обессудьте. Я в Exel не силен.

При попытке написания макроса в VBA формула "Если" или "iif" ведет себя немного неясно.

По факту нужно, что бы макрос копировал вывод одной формулы и вставлял ее текстовое значение в первую пустую ячейку "календаря"

В формуле изложено, что если первая ячейка будет меньше 0 (т.е. пустая), то он вставит скопированное число в эту ячейку, если нет, то пойдет на следующую и так дальше и дальше. На деле он просто вставляет в самую последнюю переменную (на данный момент 3 ячейку таблицы (не видел смысла больше делать, раз пока не работает) и все, что не пытался написать во всех 3 ячейках и изменить параметр переменной - он все время идет в конец.

Раньше никогда проблем не было с формулами в самом екселе, но с макросами еще мало знаком. Формула приведена пониже:

Нужна помощь в написании VBA Microsoft Excel, Помощь, Vba

"

Sub Копирование()

Range("I5").Select

Selection.Copy

Formula = IIf("B3" < "0", Range("B3").Select, IIf("C3" < "0", Range("C3").Select, IIf("D3" < "0", Range("D3").Select, "0")))

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

End Sub

"

Нужна помощь в написании VBA Microsoft Excel, Помощь, Vba
Показать полностью 1
[моё] Microsoft Excel Помощь Vba
10
14
Fantazerishka
4 года назад
MS, Libreoffice & Google docs

Excel. Как в vba работать с unicod символами⁠⁠

Добрый день. Подскажите пожалуйста. Пытаюсь себе файл excel сделать в котором буду вести свои расходы, копирую выписку из банка, и она в виде: −5 000,00 KZT (5 000,00 KZT), хочу сделать проверку левого символа через что-то вроде Range.Left (то что нагуглил), и если это тире, то уже после этого убирать тире и лишние символы, чтобы потом можно было использовать как число.
Подскажите пожалуйста я смогу совершить проверку самого левого символа с помощью Range.Left?
И как вводить символы юникода которые автоматом становятся "?" в компиляторе.

Не нашел как поставить без рейтинга, поэтому комментарий для минусов внутри

Microsoft Excel Vba Вопрос Без рейтинга Текст Unicode
6
113
0617
0617
4 года назад
MS, Libreoffice & Google docs

Счётчик распечатанных страниц сетевого принтера - SNMP в Excel⁠⁠

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

После того, как я немношк попинговал, пора применить те наработки в какой-нибудь практической задаче - пинг ради пинга выглядит немного бессмысленно.

Идея, как и в прошлый раз, украдена на том же Youtube-канале у говорящего робота. Правда, мне не интересно состояние портов маршрутизатора - это не моя проблема. А вот узнать сколько отпечатали-отсканировали мои принтеры-сканеры, будет крайне полезно. Тем более, что для этого не нужно никуда ходить и даже не нужно ставить и изучать забикс. Всего-то пятнадцать минут от идеи до реализации в Excel. Уверен, вы справитесь быстрее.

Для начала, что такое SNMP: практически любое устройство, имеющее сетевой интерфейс, умеет в этот протокол, который позволяет удалённой стороне получить набор метрик работы этого устройства и управлять им. В данном случае из всех тысяч параметров меня интересует счётчик распечатанных и отсканированных страниц.

Если в двух словах: отправляем принтеру команду с определённым идентификатором, получаем ответ.

К сожалению, нет универсального способа узнать эти идентификаторы - каждый производитель использует свой набор идентификаторов, который также может различаться от модели к модели. С другой стороны,  всё нужное легко гуглятся, ибо используется в шаблонах для Zabbix. Дальше остаётся посмотреть xml-файл и найти в нём нужную строку. Другой вариант - прочитать ВСЕ ответы устройства на ВСЕ запросы и найти нужные значения. К счастью, программ для этого полным-полно, а разобраться в потоках цифр не очень сложно. Например SnmpB.

Счётчик распечатанных страниц сетевого принтера - SNMP в Excel Microsoft Excel, Vba, Длиннопост

Указываем IP-адрес принтера, SNMPv2 (в любой непонятной ситуации выбирай SNMPv2) и запускаем сканирование - правой кнопкой Walk.

Счётчик распечатанных страниц сетевого принтера - SNMP в Excel Microsoft Excel, Vba, Длиннопост

На получение результата может уйти несколько минут.

Счётчик распечатанных страниц сетевого принтера - SNMP в Excel Microsoft Excel, Vba, Длиннопост

Далее остаётся скопировать результат в блокнот (увы, поиск в SnmpB не работает) и найти текстовое значение счётчика, которое нужно предварительно подсмотреть либо через веб-интерфейс принтера, либо ещё как.

Счётчик распечатанных страниц сетевого принтера - SNMP в Excel Microsoft Excel, Vba, Длиннопост

Описанный выше вариант - найти шаблон для забикса и посмотреть что  у него внутри.

Счётчик распечатанных страниц сетевого принтера - SNMP в Excel Microsoft Excel, Vba, Длиннопост

Для всех принтеров и МФУ (все - Kyocera), до которых я смог дотянуться, счётчик распечатанных страниц отдаётся по команде ".1.3.6.1.4.1.1347.43.10.1.1.12.1.1", а отсканированных - ".1.3.6.1.4.1.1347.46.10.1.1.5.3". Домашний Ricoh отдаёт счётчик по команде ".1.3.6.1.4.1.367.3.2.1.2.19.1.0". Единственный доступный HP LaserJet 2015 вообще никак не реагирует на SNMP, но он уже почти сдох, так что не жалко.

Дальше скучно: берём VBA, пишем

On Error Resume Next
Set o = CreateObject("OlePrn.OleSNMP")
o.Open IPaddress, "public", 2, 1000
Name = o.get(".1.3.6.1.2.1.25.3.2.1.3.1")
TotalPrintCounter = o.get(".1.3.6.1.4.1.1347.43.10.1.1.12.1.1")
TotalScanCounter = o.get(".1.3.6.1.4.1.1347.46.10.1.1.5.3")
o.Close
On Error GoTo 0

Всё, остаётся обернуть эти строки в цикл по списку принтеров, и радоваться тому, что одна регулярная задача стала решаться немного проще. Файл лежит на Яндекс.Диске, правда, скорее всего, он будет бесполезен - вряд ли у кого-нибудь есть полсотни киосер.

Счётчик распечатанных страниц сетевого принтера - SNMP в Excel Microsoft Excel, Vba, Длиннопост

Да, почему на картинках идентификаторы начинаются с iso, а команды в коде - с ".1". Просто смиритесь. Или прочитайте описание стандарта.

UPD:

Обновлённая ссылка на файл
https://disk.yandex.ru/i/GhlgPxLfdhePBw

Показать полностью 6
[моё] Microsoft Excel Vba Длиннопост
33
1794
0617
0617
4 года назад
MS, Libreoffice & Google docs

Пингуем из Excel⁠⁠

Excel - это не только ВПР и дашборды, но и забавно, а иногда - бессмысленно и беспощадно.

На Youtube есть канал, где его автор творит в екселе всякие админские непотребства. Сейчас он дошёл до отправки в телеграм сообщений о результатах мониторинга.  Я иногда подбираю у него идеи, однако сильно чешусь в неприличных местах, когда вижу его код.

Увага: просмотр канала опасен для неокрепшей психики юных админов.

Пингуем из Excel Microsoft Excel, Vba

После просмотра видео, где он пингует список хостов, я подумал: а какого чёрта! И переписал это на свой лад.

Пингуем из Excel Microsoft Excel, Vba

Основная нагрузка - функция Ping

Function Ping(IP)

Ping = CreateObject("Wscript.Shell").Run("ping -n 1 -w 1000 " & IP, 0, True) = 0

End Function


Запускает внешний процесс, в котором выполняет собственно ping до нужного хоста.

В оригинале было так:

Пингуем из Excel Microsoft Excel, Vba

Весь остальной код - рюшечки вокруг этой функции: обход списка заданное количество раз, раскрашивание ячеек, ожидание паузы и проч.
Файл доступен по ссылке https://disk.yandex.ru/d/cA1XcK44Dx4uwQ

Пингуем из Excel Microsoft Excel, Vba
Показать полностью 2
[моё] Microsoft Excel Vba
119
59
0617
0617
4 года назад
MS, Libreoffice & Google docs

Excel VBA: как выбрать подходящее место для кода⁠⁠

В Excel VBA cуществует пять мест для кода:
- модуль;

- модуль листа;

- модуль книги;

- модуль формы;

- модуль класса.

Excel VBA: как выбрать подходящее место для кода Microsoft Excel, Vba, Для начинающих, Длиннопост

Модули формы и класса довольно специфичны, и если вы до них дошли, то этот пост точно не для вас: вы и так всё знаете.

У остальных модулей - своё назначение, так куда же положить код? Как выбрать подходящее место? На определённом этапе всё станет очевидно, но что делать с самым первым макросом?

Ответ 1: модули листа и книги должны содержать только код, который обрабатывает события листа и книги соответственно (но это же наш первый макрос, какие ещё события?); получается, что единственным местом остаётся модуль.

Ответ 2: если не знаете, куда поместить код, используйте модуль; кстати, записанные макросы попадают именно в модули.

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

Объект верхнего уровня - Application (собственно приложение Excel). В большинстве случаев его можно не указывать.

Следующий уровень - объект Workbook (книга). Все объекты этого уровня входят в коллекцию Workbooks и на каждый из них можно сослаться
Application.Workbooks("Книга1")
Workbooks("Книга1").

Далее - объект Worksheet (лист). Все объекты этого уровня входят в коллекции Worksheets и на каждый из них можно сослаться разными способами:

Application.Workbooks("Книга1").Worksheets("Лист1")
Workbooks("Книга1").Worksheets("Лист1")
Worksheets("Лист1")
Кроме того, все объекты Worksheet входят в коллекцию Sheets, т.е. можно обращаться к ним:

Application.Workbooks("Книга1").Sheets("Лист1")
Workbooks("Книга1").Sheets("Лист1")
Sheets("Лист1")
Далее остаётся только получить конкретную ячейку на листе в книге. Для получения ячейки используется свойство Cells объекта Worksheet. Для упрощения (очень-очень сильного упрощения) можно считать ячейку концом цепочки:

Application.Workbooks("Книга1").Sheets("Лист1").Cells(1, 1)
Workbooks("Книга1").Sheets("Лист1").Cells(1, 1)
Sheets("Лист1").Cells(1, 1)
Cells(1, 1)

Остаётся упомянуть ещё несколько крайне важных вещей:

Application.ActiveWorkbook или ActiveWorkbook возвращает активную книгу

Application.ActiveSheet или ActiveSheet возвращает активный лист

Application.ThisWorkbook или ThisWorkbook возвращает книгу, в которой расположен код

ThisWorkSheet - ошибка, нет такого слова!

И вот теперь можно, наконец, сказать главное: всегда, в каждой строчке кода, в любой момент времени нужно точно знать цепочку Workbook > Worksheet, потому что почти во всех случаях, если эта цепочка не указана явно, подразумевается активный лист и активная книга. Т.е. если код, расположенный в любом месте в "Книга1", выполняется при активной "Книга2", то он будет работать с данными и изменять содержимое активного листа книги "Книга2".

Исключение: если код расположен в модуле листа, то он всегда работает с этим листом.  Т.е всегда подразумевается ThisWorkSheet (которого не существует - и теперь понятно почему: он может существовать только в модуле листа, а там он подразумевается по умолчанию). Разумеется, это не мешает использовать явное указание на другой лист или книгу.

Например, код

Cells(1, 1)

расположенный в модуле листа, всегда будет работать с этим листом. Этот же код, расположенный в модуле или модуле книги, будет работать с активным листом активной книги.

Код

Workbooks("Книга1").Sheets("Лист1").Cells(1, 1)

всегда будет работать одинаково.

Таким образом:

- если вы совершенно точно собираетесь работать только с одним листом, то можно поместить код в модуль листа, это визуально упростит код;

- во всех остальных случаях при каждом обращении к свойствам или методам книги или листа (в том числе, и обращение к данным - Cells и т.п.) вы должны "тащить" всю цепочку начиная от Workbook, а в этом случае нет никаких причин использовать модули листа или книги.


Далее предполагаем, что с местом расположения кода мы определились - это модуль (Модуль. Просто Модуль. Взболтать, а не смешивать).

Существуют разные способы упростить код и избежать ошибок.

1. Если вы уверены, что работа с активным листом активной книги - всё, что вам нужно, то цепочку Workbook > Worksheet в большинстве случаев можно опустить.

2. Оператор With:

With Workbooks("Книга1").Sheets("Лист1")
.Cells(1, 1) = 1
End With
эквивалентен

Workbooks("Книга1").Sheets("Лист1").Cells(1, 1)
Excel VBA: как выбрать подходящее место для кода Microsoft Excel, Vba, Для начинающих, Длиннопост

Т.е. все свойства и методы внутри этого оператора, которые начинаются с ".", относятся к указанному объекту, а без точки - к активному листу активной книги

3. Переменные типа объект (и помните: любой код в VBA должен начинаться с Option Exlicit - два этих слова уберегут вас от миллионов ошибок)

Excel VBA: как выбрать подходящее место для кода Microsoft Excel, Vba, Для начинающих, Длиннопост

4. Можно просто сделать нужный лист активным (лично я не люблю этот метод, но почему бы и нет)

Excel VBA: как выбрать подходящее место для кода Microsoft Excel, Vba, Для начинающих, Длиннопост

Понимание объектной модели данных и умение точно указывать на объект, его свойства и методы, в Excel VBA чрезвычайно важны, без этого любые попытки что-то сделать будут мучением.

Показать полностью 3
[моё] Microsoft Excel Vba Для начинающих Длиннопост
16
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии