VBA считается стандартным языком написания сценариев для приложений Microsoft, и в настоящее время он входит в состав всех приложений Office и даже приложений других компаний. Следовательно, овладев VBA для Excel, вы сможете сразу перейти к созданию макросов для других программных продуктов Microsoft. Более того, вы сможете создавать полноценные программные продукты, одновременно использующие функции самых разных приложений.
Как включить макросы в Excel
По умолчанию, вкладка, отвечающая за управление и навигацию макросов в Excel, скрыта. Чтобы активировать данную опцию перейдите по вкладке Файл в группу Параметры. В появившемся диалоговом окне Параметры Excel, перейдите по вкладке Настройка ленты, в правом поле со списком ставим маркер напротив вкладки Разработчик. Данные действия актуальны для версий Excel 2010 и старше.
На ленте появиться новая вкладка Разработчик с элементами управления автоматизации Excel.
Написание макросов в Excel
Во вкладке Разработчик в группе Код, нажмите кнопку Запись макроса. Появиться диалоговое окно Запись макроса, которая запрашивает некоторую информацию о будущем записываемом коде. Если вы впервые создаете макрос, можете просто нажать кнопку ОК. С данного момента Excel будет фиксировать каждое действие пользователя в модуле VBA, будь то ввод данных, форматирование или создание диаграмм. Чтобы остановить запись макроса, нажмите кнопку Остановить запись, которая находится в той же группе Код.
Вы также можете воспользоваться альтернативным вариантом записи макросов, воспользовавшись кнопкой Запись макроса, которая находится в левом нижнем углу рабочей книги Excel (правее статуса Готово).
Теперь вы можете посмотреть список всех созданных макросов, нажав на кнопку Макрос, находящуюся в группе Код. В появившемся диалоговом окне вы можете дать более описательные имена своим кодам или задать сочетания клавиш, которые бы запускали тот или иной макрос. Альтернативным вариантом запуска данного окна является нажатие клавиш Alt + F8.
Редактирование макросов
Поздравляю! Вы написали свой первый макрос. Логичным будет проверить теперь, какой же код сгенерировал нам Excel. Сгенерированный код написан на языке VBA (Visual Basic for Applications). Чтобы увидеть его, нужно открыть Редактор VB (VBE), который запускается нажатием клавиш Alt + F11 или кнопкой Visual Basic на вкладке Разработчик.
Чтобы избежать путаницы в редакторе вы можете работать только с одной вкладкой рабочей книги, листа или модуля. Так выглядит редактор в реалии.
Предлагаю на данном этапе подробнее изучить различные окна и меню редактора VBA. В дальнейшем это поможет вам сэкономить кучу времени.
Для просмотра кода, щелкните по ветке Modules в окне проектов и дважды щелкните по появившейся ветке Module1. Редактор откроет окно с кодом, как изображено на картинке.
Здесь можно редактировать сгенерированный код, который был записан при работе в Excel. К примеру, вам требуется заполнить определенный столбец значениями от 1 до 10. У вас уже есть первые три шага, которые вводят значения 1, 2 и 3 в первые три ячейки столбца А. Нам необходимо дописать оставшиеся семь шагов.
Если вы посмотрите на приведенный выше код, вы увидите, что макрос определенным образом структурирован. Сначала приложение перемещает курсор на ячейку с помощью команды Range("A1").Select, затем редактирует его содержимое с помощью ActiveCell.FormulaR1C1 = "1". Таким образом, для оставшихся шагов мы можем повторить эти действия, меняя адрес ячейки и значение, которое вы хотите записать в эту ячейку. Например, чтобы задать ячейке A4 значение 4, вы должны написать:
1 2 | Range("A4").Select ActiveCell.FormulaR1C1 = "4" |
И повторить аналогичные шаги для оставшихся значений.
После того, как вы закончите редактирование, сохраните книгу. Запустить макрос вы сможете нажатием кнопки F5, либо, вернувшись в рабочую книгу Excel, перейти по вкладке Разработчик в группу Код -> Макросы и выбрать из списка, интересующий вас макрос.
Уделите несколько минут внимательному изучению кода, который сгенерировал Excel. Если вы новичок, вклад нескольких минут в изучение кода дадут потрясающий результат в знакомстве с объектами VBA в дальнейшем. Обратите внимание, что рассмотренный нами пример всего лишь иллюстрация. Есть более быстрые и эффективные способы достижения аналогичных результатов, о которых мы поговорим далее.
Увеличение скорости выполнения макросов Excel
Пока все хорошо. Давайте разберем пару хитростей, которые помогут ускорить выполнение макроса. Рассмотрим в качестве примера фрагмент кода, приведенный выше. Современные компьютеры отработают рассматриваемый код так быстро, что вы даже не заметите этого. Но что если вам необходимо выполнить операцию 50000 раз. Это займет какое-то время. Если макрос, написанный вами, исчисляется сотнями строк, ускорить выполнение кода можно путем обрезки части процессов, который не используется во время исполнения макроса.
Использование команды Application.ScreenUpdating
Первый фокус заключается в том, чтобы отказаться от обновления экрана в момент выполнения макроса. Это позволит Excel сохранить вычислительные мощности компьютера и обновить экран со свежими значениями, только после того, как весь код будет выполнен. Для этого необходимо добавить команду отключения обновления экрана в начале макроса и команду включения обновления экрана в конце макроса.
1 2 3 4 5 6 7 8 9 10 | Sub Макрос1() Application.ScreenUpdating = False Range("A1").Select ActiveCell.FormulaR1C1 = "1" Range("A2").Select ActiveCell.FormulaR1C1 = "2" Range("A3").Select ActiveCell.FormulaR1C1 = "3" Application.ScreenUpdating = True End Sub |
Команда Application.ScreenUpdating говорит Excel, чтобы он прекратил выводить пересчитанные данные на экран, а выдал готовые значения в конце выполнения кода.
Использование команды Application. Calculation
Вторая хитрость заключается в отключении автоматических вычислений. Давайте я поясню. Каждый раз, когда пользователь или процесс обновляет ячейку, Excel пытается пересчитать все зависимые от нее ячейки. Так скажем, если ячейка, которую пытается обновить макрос, влияет на 10000 остальных ячеек, Excel будет пытаться пересчитать их все до того, как закончится выполнение кода. Соответственно, если существует целый ряд влияющих ячеек, пересчет может значительно замедлить выполнение кода. Чтобы этого не происходило, вы можете установить команду Application. Calculation в начале кода, которая переключит пересчет формул в ручной режим, а затем вернуть автоматическое вычисление в конце макроса.
1 2 3 4 5 6 7 8 9 10 11 12 | Sub Макрос1() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Range("A1").Select ActiveCell.FormulaR1C1 = "1" Range("A2").Select ActiveCell.FormulaR1C1 = "2" Range("A3").Select ActiveCell.FormulaR1C1 = "3" Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub |
Будьте внимательны, не забудьте переключить данную опцию снова в автоматический режим в конце макроса. В противном случае, вам необходимо будет это сделать в самом Excel, перейдя по вкладке Формулы в группу Вычисление и выбрать Параметры вычислений –> Автоматический.
Избежание выбора ячеек и диапазонов
В режиме автоматической записи макросов, вы можете заметить, что Excel очень часто использует команду выбора ячеек, например, Range(«A1»).Select. В нашем примере, мы использовали данную команду несколько раз, чтобы выбрать ячейку и изменить ее значение. Вы можете избежать этого просто указав адрес ячейки и задав ей необходимое значение (Макрос записал движение курсора от одной ячейки к другой, следовательно, вставил эти шаги. Однако они не являются необходимыми). Так что, более эффективный код будет выглядеть следующим образом.
1 2 3 4 5 6 7 8 9 10 11 | Sub Макрос1() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Range("A1").Value = 1 Range("A2").Value = 2 Range("A3").Value = 3 Range("A4").Value = 4 Range("A5").Value = 5 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub |
В данном случае мы просто сослались на ячейку и задали ей необходимое значение, не выбирая его вообще. Это способ быстрее, чем предыдущий.
Примеры макросов Excel
Ниже приведены несколько примеров кодов VBA, которые помогут автоматизировать наиболее часто повторяющиеся задачи:
Макрос вставки строки
1 2 3 | Sub Макрос1() Rows(2).EntireRow.Insert 'Вставляет строку перед второй строкой End Sub |
Макрос вставки столбца
1 2 3 | Sub Макрос1() Columns(3).EntireColumn.Insert 'Вставляет столбец левее 3-го столбца End Sub |
Макрос форматирования
1 2 3 4 5 6 | Sub Макрос1() 'Делает формат ячейки D2 жирным, подчеркнутым и курсив Cells(2, 4).Font.Bold = True Cells(2, 4).Font.Underline = xlUnderlineStyleSingle Cells(2, 4).Font.Italic = True End Sub |
Макрос обхода диапазона ячеек
1 2 3 4 5 6 | Sub Макрос1() For Each cel In Range(Cells(1, 1), Cells(10, 5)) counter = counter + 1 cel.Value = counter Next cel End Sub |
Возможность писать макросы является одним из наиболее продуктивных способов решения повседневных задач. Они позволяют автоматизировать рутинные операции и выполнять их с гораздо большей скоростью.
а можно более подробно рассказать о VBA начиная с основ: порядок написания, какие операторы что выполняют или порекомендовать какую-нибудь литературу. Заранее спасибо.
Из литературы могу порекомендовать дедушку Джона Уокенбаха, очень грамотное изложение, сам когда-то начинал с него. По поводу операторов и циклов, планирую начать серию статей по VBA с описанием всех ключевых моментов
Уважаемый Ренат. Начал изучать vba по записям Уокенбаха. Но столкнулся с с задачей которую решить мои начальные знания в программировании не могут… пока). Если есть возможность прошу вашей помощи в её решении. Итак задача:
есть Список из 10 магазинов, у каждого магазина есть ряд показателей пока их 5, эти показатели фиксируются каждый месяц в общей таблице, потом на основании неё формируются отчеты. Сложность заключается в процессе забивания, т.к. таблица становится очень большой 60 столбцов. для облегчения внесения данных я бы хотел что бы «ненужные» столбцы скрывались.
Так как это можно сделать только с помощью макроса, не могли бы вы показать каким он должен быть при условии что выбор месяца\квартала\полугодия происходит с помощью «переключателя» из разработчика. заранее очень благодарен.
Сергей, если я правильно понял, то вы пытаетесь вызвать событие Worksheet_Change с помощью элемента управления Поле со списком, которое позволяет изменять значения ячейки в зависимости от выбранного значения. К сожалению, Excel не воспринимает изменения сделанные элементом как события и поэтому макрос не вызывается. Я рекомендую использовать элемент ActiveX ComboBox, которое выглядит аналогичным образом, но действует не как элемент листа рабочей книги, а как элемент формы VBA, у которого в свою очередь есть ряд своих событий, например ComboBox.Change. В файле пример использования данного приема — ComboBox Event
Использовал ComboBox. а какой должен быть макрос при этом?
В файле примера я указал, какой макрос можно использовать. Его можно увидеть либо в редакторе VBA, либо двойным щелчком по ComboBox в режиме конструктора
Слона я и не заметил. Огромное спасибо!
Салют брат!
И счего вы взяли, что на всех кинопорталах? Я смотрю как обычно на «https://kinopoisky . r u» И тот факт, что там постоянно премьеры в не плохом, кстати качестве меня просто манит туда вернуться!
И могу это доказать, вчера появились и там есть фильмы: Притяжение (2017), Викинг (2017) второго вообще не найти на торрентах, а там есть!
ну и зря, смотри kinozal.tv, только через tor 🙂
Салют брат!
И счего вы взяли, что на всех кинопорталах? Я смотрю как обычно на «https://kinopoisky . r u» И тот факт, что там всегда новинки в хорошем качестве меня просто манит туда вернуться!
И могу это обосновать, вчера появились и там есть фильмы: Притяжение (2017), Викинг (2017) 2-ого вообще не скачать, а там есть!
у вас очень хороший и главное полезный блог. стал регулярным вашим читателем 🙂
вы обязательно наберете свою аудиторию — пишите почаще.
Здравствуйте
Хотел спросить вопросик немного не по теме: что вы думаете по поводу подключения таблиц excel к access для дальнейшей обработки. Дело в том что я не очень уверен в стабильности этого соединения, к тому же не очень удобно переносить проект из одной сетевой папки в другую. Поискав в нете я нашел что можно создавать при помощи VBA таблицы в самом access копируя их с заданных листов excel, но лично для моих знаний VBA это уже сложновато. Хотелось бы услышать мнение специалиста…
Заранее спасибо.
К сожалению, ни разу не сталкивался с подобной необходимостью и помочь чем-нибудь дельным не могу. Был опыт экспорта данных с помощью VBA из Excel в SQL базу данных, но бесконечные ошибки несовместимости данных привели к тому, что я отказался от этого подхода
Здравствуйте.
Потребовалось мне в Excel 2007 убрать первый пробел из всех ячеек столбца. Решил сделать макрос. Очень простой: F2, Home, Del, Enter. Записал. Начал выполнять, а он мне во все ячейки вставляет текст из этой первой ячейки. Открыл макрос и увидел следующий код:
ActiveCell.FormulaR1C1 = "Асфальтобетонная смесь"
ActiveCell.Offset(1, 0).Range("A1").Select
Ну, и зачем мне такие макросы? Не подскажете как в Excel 2007 можно записать последовательность нажатия клавиш на клавиатуре и потом её воспроизвести?
Добрый день, Сергей
К сожалению, функция записи макросов не отсеживает нажания клавиш, как я уже писал, данный инструмент весьма ограничен. За симуляцию нажатия клавиш отвечает команда Sendkeys. Вот хорошая статья на эту тему.
А вообще, чтобы избавиться от ненужных пробелов, существует отличная функция Excel — СЖПРОБЕЛЫ.
Спасибо большое за ответ, Ренат.
Но благодаря этому своему небольшому опыту я понял, что для обычного пользователя функция «Запись макроса» потеряла смысл. Нужно знать VBA чтобы соорудить нормальный работоспособный макрос. А что получится при записи, наверное, только разработчики могут сказать.
Сергей, очень жаль, что первые опыты с макросами получились не столь удачными. Все таки — это машина, и ей не всегда понятно, какое действие хочет записать человек. Помню, как после первых записанных макросов, мне тоже приходили подобные мысли. В итоге было принято решение купить книгу по макросам) В своей работе функцию записи макросов я использую больше для понимания синтаксиса той или иной команды. Экспериментируйте, сейчас многие готовые вещи можно найти в сети, и со временем понимание придет.
Ренат, Здравствуйте. Сделал небольшую таблицу, у которой есть поле со списком (элемент управления формы) и при выборе любого элемента в этом списке высвечивается сообщение «не удалось выполнить макрос "год.xls!раскрсписок747_Изменение". возможно, этот макрос отсутствует в текущей книге либо все макросы отключены».
макросы включены. в списке макросов такого нет. И не могу избавиться от этого назойливого сообщения. не могли бы подсказать в чем тут дело и как это исправить. заранее спасибо.
Добрый день, Сергей
Видимо, когда-то к этому элементу был прикреплен макрос, а потом его удалили, но при этом связь с элементом осталась.
Я не нашел способ, как можно удалить эту связь на уровне интерфейса Excel. Получилось только с помощью макроса. Идея заключается в следующем, необходимо перепривязать макрос к элементу, но в параметрах не указывать имя макроса. Тогда получится, что мы перепривяжем макрос с отсутствующим именем, а старая связь удалится.
Команда в VBA выглядит следующим образом:
ActiveSheet.Shapes("имя_раскрывающегося_списка").OnAction = ""
Здравствуйте! Подскажите мне пожалуйста как вывести данные в excel из sql с помощью макроса. Подключение к базе я сделала и какие поля нужны тоже выбрала. Вобщем запрос написала. А как теперь сделать чтобы эти данные появились в excel я не пойму. Какой код нужен для вывода на лист. Спасибо
Здравствуйте.
Есть лист с данными, часть из которых постоянная, а часть каждый раз вносится пользователем. Необходимо, чтобы все нужные данные собирались в текст с сохранением форматирования (цвет и шрифт текста). Первая задача решается элементарной формулой «сцепить» с условием «если». Вторая часть задачи стандартными функциями Exel невыполнима. Подскажите,пожалуйста, какой может быть записан макрос, чтобы текст из ячеек все-таки сохранял форматирование при сцеплении???
Сама лично никогда не работала с языком VBA.
Ульяна, если я правильно понял, вам необходимо создать пользовательскую функцию, которая бы по аналогией с функцией СЦЕПИТЬ, еще копировала формат. К сожалению, функции написанные на VBA не позволяют изменять форматирование. Выходом из ситуации будет использование копирования форматов, которую можно найти правым щелчком мыши -> специальная вставка -> Вставить форматы.
Здравствуйте! Есть файл, несколько листов, первый подтягивает данные из интернета, на втором выполняется расчет. Беда в том, что при закрытие и новом открытие файла, данные на первом листе обновляются и на втором листе сбиваются ссылки на первый лист. Пробовал делать новый лист с изъятием нужных нужных ячеек, а расчет выполнять уже на него. Не получилось. Тогда я записал макрос, который при выполнении записывает ссылки. Так вот он корректно работает до первого закрытия. Потом он записывает ссылки но так же не корректно. Подскажите что я не так делаю.
Добрый день! В рамках подготовки ФЭМ необходимо провести анализ чувствительности фин индикаторов в том числе к параметрам, которые являются рядом переменных (прогноз цен на нефть), каждая из которых задается не числом, а формулой, причем использовать несколько сценариев. Иных вариантов как макрос, я не вижу, но написать его пока мне не по силам. Поскольку задача стандартная, не подскажете, может быть,где-н есть примеры/ образцы? Заранее большое спасибо!
Добрый день, Мария. Ресурсы с большим количеством примеров макросов можете найти на моей странице с Ссылками
Здравствуйте! Подскажите пожалуйста как сделать такую сортировку ?
Файл: .xlsx
Елена, в вашем примере речь, скорее всего, идет не о сортировке, а о группировке. Чтобы реализовать данную возможность воспользуйтесь инструментом Группировка, который находится во вкладке Данные
Ренат, здравствуйте! Помогите, пожалуйста, в реализации следующего:
лист 1 содержит таблицу с данными основными. лист2 содержит таблицу, в которую должны подтягиваться в соответствующие ячейки строки данные из таблицы листа1 при заполнении ячейки «номер помещени».
То есть, например. в листе 2 в таблице забиваю в ячейку №помещения текстом определенный номер и автоматом заполняются данные площади и ставки аренды, соответствующие данному номеру помещения.
Заранее спасибо!
Файл: .xlsx
Елена, ваша задача легко решается с помощью формулы ВПР. Прочитайте статью про формулы подстановки, вам многое станет понятно
есть задача:
1. файл ексель должен самостоятельно выбирать пол (ая, ый)
— должен при нажатии на кнопку — сохранять всё на рабочем столе в пдф
при сохранении, имя файла должно быть: номер письма + ячека текст
— должен сохранять копию на рабочем столе
!!! Это всё работало на 7, пока я виндоус 8.1 не установил
2. Аутлук:
автоматическое копирование контактов, календарей, задач, писем из уч. записи MAPI в Exchange
Ответ на почту. Цена вопроса
Ренат,могли бы помочь в решении данной задачи? Теорию перечитала всю, но код никак не получается( Привыкла программировать на СИ++,тут никак не могу перестроиться(
Файл: Excel-тест-пустой.xls
Ренат, подскажите пожалуйста формулу русские буквы менять на английские?
Ренат, доброго времени суток!)
Мне необходимо найти или разработать приложение для работы с БД предприятия. Какой-нибудь графический интерфейс для вывода всей соответствующей информации детали и последующего изменения серийного номера этой детали или документа к ней.
Как я могу это сделать? Какой софт или плагины посоветуете? Спасибо
Спасибо добрый человек, очень хочется научиться пользоваться макросами, как раз Вы и дали толчок в нужном направлении
Доброго времени суток! Можно ли в exel сделать такую фишку: в ячейках А1-А10 стоят значения 10; в ячейке А-11 сумма значений А1-А10 (100); нужно чтобы в ячейке А-11 стояла сумма 150 при этом чтобы в ячейках А1-А10 стояли значения 10. Спасибо. Очень нужно.
задача 10*10=100 (Нужно чтобы (=100) Выводило ответ 150 (не меняя формулы и переменных)
Возможно ли такое?
СПАСИБО.
Файл: .xlsx
к сумме разницы постоянно прибавлялось к примеру по 100едениц
не меня конечной формулы.
Добрый день, очень нужна помощь. Есть таблица, которая по столбцам каждый день копируется вправо. Очень нужен макрос, который бы копировал таблицу в пустую колонку справа.
Файл: 1.xlsx
Добрый день, Ренат!
Возник такой вопрос. Требуется ограничить число символов в ячейках. Но! Так, чтобы в одном столбце было ограничение 10 символов, а в соседнем — 20 символов. Также интересует немного не то, что нашлось в сети. В основном предлагаются коды, которые режут по факту. Т.е. пишешь-пишешь, а потом — бац, и половину обрезало. Нужно, чтобы при попытке напечатать 11ый (или 21ый) символ программа сразу сообщала, что лимит превышен. Я так думаю, чисто теоретически такая система должна конструироваться. Чисто практически же пока не знаю, куда копать.
помогите пожалуйста создать макрос и кнопку в excel 2010 и 21013. Очень срочно нужно. Заранее буду благодарен.
Файл: 03007-Е-.xlsx
Здравствуйте.
Помогите пожалуйста:
Можно написать макрос. чтобы он скрывал определенные строки (например 2, 4, 7) в листе (Лист2) в том случае если определенная ячейка в другом листе Exel пустая (например D4) в листе (Лист1)
Здравствуйте!
Подскажите пожалуйста, как настроить Exсel на автоматическое создание копии или сохранение книги при закрытии без запроса на сохранение. При этом, чтоб в названии файла автоматически вставлялась необходимая дата, к примеру:
01.01.2016г. поработал в книге под названием «Документ», внёс кое-какие изменения на разных листах и при закрытии создавалась копия на рабочем столе с датой завтрашнего дня «Документ 02.01.2016г.» При повторном открытии-закрытии файла «Документ» в этот же день еще одна копия «Документ 02.01.2016г.(2)» — но при этом, чтобы файл «Документ» оставался без изменений, а менялся только когда самостоятельно его перезаписываешь!
Заранее благодарю!
Александр, добрый день. К сожалению, у меня нет возможности писать коды, на подобного рода запросы. Рекомендую поискать в Google, например, такой запрос «сохранить vba excel». Там этой информации тонны.
Спасибо, Ренат!
Теперь над другой дилеммой голову ломаю.
Может поможете?
Необходимо создать кнопку, при нажатии которой производилось сложение двух ячеек.
Сложность заключается в том, нужно чтобы при повторном нажатии на эту же кнопку ничего не происходило! Короче говоря — можно ли ограничить в нажатии на кнопку? Либо каким кодом руководствоваться, чтоб сумма чисел производилась только один раз?
Ситуация в том, что:
имеется таблица «Док1» в которой я создал кнопку, при нажатии на которую — таблица автоматически сохраняется под именем с текущей датой «Док(дата)» в определённую папку и одна из ячеек суммируется к ячейке другого документа «Док2». А при повторном нажатии этой кнопки программа пересохраняет «Док(дата)» и в «Док2» опять прибавляет значение ячейки из «Док1», а мне повторное сложение не нужно!!!
Спасибо за внимание!
Здравствуйте, а как зациклить автосохранение макросом?
Добрый день,
Подскажите, пожалуйста, можно ли сделать такое макросом:
Есть продажи по месяцам. Левый столбец наименования, далее соответствующие месяца. Но есть одно «но». Ввиду некоторых особенностей одна и та же позиция бывает в нескольких вариантах. Например:
йцукен
йцукенУ1
йцукен о
Естественно, они выпадают как три строки. Можно ли как-либо прописать макрос, чтоб он по первым, допустим, 5 сиволам эти строки объединил в одну, а оставшиеся удалил?
Заранее спасибо.
Добрый день!Можете рассказать подробнее: как получить код программы, изменяющей цвет текста в ячейках рабочего листа MS Excel.
Добрый день.
Это сообщение из маркетингового альянса и нам важно Ваше мнение. Появилась новая тенденция, можно отслеживать у конкурентов потенциальных клиентов, особенно это актуально в вашей нише, что думаете по этому поводу? Подробности можно посмотреть вот в этом видео https://bizzersin.ru/video49385
Ренат, здравствуйте
Хотел спросить у вас.
У меня такая проблема.
Есть Таблица в Excel с кучей фильтров, кучей данных где строка — это какой то эксперимент, и в столбцах идут данные из этого эксперимента. И в одном из столбцов картинка для визуализации, привязанная к ячейки
Я сделал график, где вместо маркеров стоят эти же картинки (чтобы меняя параметры на графике, смотреть, как будут располагаться эти картинки). Но тут возникает проблема, когда я применяю фильтры для данных, картинки перестают соответствовать точке.
Я попробовал сделать график и вставить туда картинки из ячеек, но не получилось.
Вы бы не могли подсказать, как можно решить проблему привязки картинок к точке, может, макросы могут помочь с этим.
С уважением
Сергей
Здравствуйте, Ренат,
У меня много наработок в VBA Excel2003 под Windows XP.
Но судьба заставила перейти на Windows 10 и Excel2007.
Оказалось, что часть моих программ не работает.
Причем именно те, где используется Shape. Начал разбираться.
Раньше (в Excel2003) делал это так: запишу макрос, проанализирую код.
А в Excel2007 так не получается. Макрос, конечно, записывается, но пустой.
Пробовал записывать манипуляции с ячейками. Range записывается отлично.
Как только работаю с графическими объектами — тоскливая пустота 🙁
Подскажите, пожалуйста, выход.
С надеждой и уважением,
Владимир
Здравствуйте,
У меня проблема при отображении русских букв в экселе формата (.csv)
Пробовал ипортировать данные инструментами экселя, но при этом сбиваются колонки и текст «перемешивается».
нашел скрипт в интернете по перекодировке текста в формат UTF-8.
Подскажите, как его вставить в книгу эксель. (ALT+F11 нажимать умею, а что дальше, какие данные прописывать в теле кода и как его запускать?)
за раннее спасибо!
P.S. Моя конечная цель перекодировать текст в формат UTF-8 в конкретной колонке.
Пример скрипта:
Function ChangeFileCharset_UTF8noBOM(ByVal filename$, Optional ByVal SourceCharset$) As Boolean
‘ функция перекодировки (смены кодировки) текстового файла
‘ В качестве параметров функция получает путь filename$ к текстовому файлу,
‘ Функция возвращает TRUE, если перекодировка прошла успешно
On Error Resume Next: Err.Clear
DestCharset$ = «utf-8»
With CreateObject(«ADODB.Stream»)
.Type = 2
If Len(SourceCharset$) Then .Charset = SourceCharset$ ‘ указываем исходную кодировку
.Open
.LoadFromFile filename$ ‘ загружаем данные из файла
FileContent$ = .ReadText ‘ считываем текст файла в переменную FileContent$
.Close
.Charset = DestCharset$ ‘ назначаем новую кодировку «utf-8»
.Open
.WriteText FileContent$
‘Write your data into the stream.
Dim binaryStream As Object
Set binaryStream = CreateObject(«ADODB.Stream»)
binaryStream.Type = 1
binaryStream.Mode = 3
binaryStream.Open
‘Skip BOM bytes
.Position = 3
.CopyTo binaryStream
.Flush
.Close
binaryStream.SaveToFile filename$, 2
binaryStream.Close
End With
ChangeFileCharset_UTF8noBOM = Err = 0
End Function
Здравствуйте.
Возникла проблема при разработке нового отчета , суть задачи :
-есть календарь,в котором выбирается дата для внесения данных
-есть ячейка,которая выводит выбранную в календаре дату
-есть всплывающее меню со списком действий с зависимой ячейкой выбранного пункта
-таблица с названиями строк (действия) и столбцов (дата)
Нужно при нажатии на кнопку внести данные в ячейку,указаную выбраными параметрами.
Признаю, от VBA далек и только пытаюсь разбираться. Банальное указание в макросе Range.(«=adress….») вызывает ошибку
Прошу удалить комментарий. Ошибочно копировали не тот текст. Заранее благодарю!
Ренат, приветствую!
решились мы на небольшую оптимизацию в работе с нашими клиентами, а именно, все входящие обращения от потребителей, для учета, «заводим» в Ексель. Так удобнее контролировать сроки предоставления ответов.
Так вот, во вложении пример реестра входящих обращений, напротив каждого обращения были созданы кнопки ActiveX при нажатии на которую автоматом формируется письмо в Outlook’е для отправки (шаблон нашего ответа из ячейки и ниже текст обращения потребителя). Это всё для оперативности работы с потребителями, так как в день принимаем до 40-50 обращений.
Единственный минус этого реестра — необходимость каждый раз создавать новую кнопку с корректировкой кода (ссылок на ячейки):
Private Sub CommandButton2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim OutlookApp As Object, SM As Object
Set OutlookApp = CreateObject(«Outlook.Application»)
Set SM = OutlookApp.CreateItem(olMailItem)
SM.To = Range(«D4»).Value
SM.Subject = «ОТВЕТ НА ОБРАЩЕНИЕ»
On Error Resume Next
SM.Body = Range(«J4″).Value & » __________________________ » & Range(«E4»).Value
SM.Display
Set SM = Nothing
Set OutlookApp = Nothing
End Sub
В этом случае оптимизации никакой…
Вопрос: есть ли возможность копирования кнопки ActiveX в новой строке без переписывания кода???
Очень нам поможете!!!
Файл: .xlsx
вопрос может и простой но сам разобраться не могу…
Нужно чтобы при сочетании клавиш в клетке где стоит курсор появилась текущая дата (число месяц год). возможно ли сделать такой макрос?
Добрый вечер!
Сегодня зашел на кинопрталы, где раньше смотрел, удивленно нашел что они не работают, то есть их фильмы не показывают, типо в вашей стране видео запрещенно!
Теперь фильмы не глянуть в интернете везде фильмы удалены, что опять назад на торренты?
Мы вам звонили и не можем дозвонится, посмотрите презентацию https://breber.ru /video?activation=9c09944d
Здравствуйте! Можно ли записать автозаполнение из фильтра на макрос? Просто автозаполнения можно записать. А из филтьра, то есть некоторые из записей не могу записать на макрос. Помогите, пожалуйста!
Файл: -для-фильтра.xlsx
Здравствуйте,
помогите советом)))
у меня есть журнал работ, из которого я формирую отчетные документы, так вот — после фильтрации по значению ячеек у меня иногда могут отсутствовать данные для внесения в отчет и выдается ошибка: 1004 «изменить часть ячеек невозможно».
скажите как можно заставить макрос завершиться и скрыть незаполненную таблицу в отчете, если в журнале нет искомых данных? вообще возможно ли это?
Здравствуйте. Не дозвонились до Вас, презентация https://akamenster.ru/
Здравствуйте, столкнулся с проблемой написания макроса, подскажите с чего начать.
Задача состоит в следующем:
есть таблица где в каждой строке имя объекта и его потребление по годам( допустим за 10 лет), необходимо по щелчку мыши на любой строке получить диаграмму где бы выводилось 10 графиков для сравнения потребления по годам.
Файл: -абоненты.xlsx
Здравствуйте! Не дозвонился до Вас, посмотрите презентацию https://jastem.ru/
Здравствуйте! Мне нужен код макроса для волн. Можете помочь???
Здравствуйте! Это моя презентация, я не дозвонился до Вас, посмотрите пожалуйста https://pelenes.ru/
Добрый день! Посещали Ваш сайт, хотим пригласить на закрытый вебинар по теме получения дешевого трафика на Ваш сайт, посмотрите https://umeneeke.ru/
Здравствуйте, столкнулся с проблемо копирования таблици с одного листа к таблице в другой лист, сразу после существующей. Макрос создавался путём записывания действий, и он сохраняет адрес клетки, в которую я вставлял таблицу, проблема в том, что кол-во строк в таблицах может менятся, и я не совсем понимаю, как прописать поиск пустой клетки. По типу вставить в ячейку, если пусто, иначе номер строки +1?
Всем привет!
Мне очень нужна помощь в написании макроса для Эксель, которая решает такие задачи:
1. Скопировать текст с картинками с сайта и вставить в эксель файл на лист1
2. Скопированные фото из столбца 1 скачать в папку и наименовать их текстом, который скопировался в столбец 2
3. В столбец 3 вывести ссылки, которые указаны в описании картинки
4. Перейти по этой ссылке
5. В браузере нажать правой кнопкой мыши на картинку и сделать поиск в яндекс по картинке
5. Из полученных картинок выбрать большего размера
6. Вставить картинку в папку2 и наименовать ее текстом как в соседнем столбце 2
Такое задание нужно сделать срочно. Если найдется хороший исполнитель, то готова оплатить полученный результат. Об условиях давайте поговорим по телефону или почте.
Pingback: Как пользоваться макросами - Проще некуда
Здравствуйте, Ринат!
Подскажите, как написать макрос для такого запроса:
Примерно так это звучит If A = n then C(n) = B(n), D(n) = C(n) где n — это номер строки
но как в макросе это прописать
Причем С(n) берется из одной таблицы, а B(n) из другой. Спасибо заранее.
Добрый день. Нужна помощь. Надо посчитать сумму с НДС ( как это сделать знаю), но при этом чтобы она считалась автоматически при введении знака равно в определенном столбце, может есть какой-нибудь макрос?
Добрый день!
Нужна помощь (сам не потяну)
Дано:
В таблице через УФ подсвечивается строка желтым цветом по условию «=сегодня()-1=»диапазон ячеек»
Требуется:
через функцию Если И… выполнить два условия.. Если в диапазоне ячеек есть ячейка желтого цвета И эта ячейка не имеет данных, то Истина, если одно из условий не выполняется, то Ложь
как написать простой makros с использованием команды if, например если значение ячеики a1 больше 10 тогда ячеику a11 заполнить в зеленный цвет иначе в красный свет
Для этого даже макрос не нужен, можно обойтись условным форматированием.
Подробнее здесь
https://www.quickwin.ru/Solutions/QandA
Добрый день! Подскажите, пожалуйста, если можете.. Очень надо по работе прописать макрос в эксель, но сколько бы ни читала, все никак не постигну правильного ответа(
Ситуация следующая: есть таблица с исходными данными, где по каждому кораблю указывается приход актов в течение 1-2 месяцев.. подскажите, необходимо на другой странице отобразить таблицу, где будут отображатся данные при выборе месяца, года и корабля по каждому приходу и в конце суммироваться.. Пожалуйста, очень надо
есть у кого то еще прикольные тесты типо этого? полезно моцк размять))
Файл: Excel-тест-пустой-1.xls
Ренат, добрый день!
Как с Вами можно связаться? Не нашла ни формы, ни мейла. Оплатила курс по VBA но промокод не действителен, истек уже неделю назад. Прошу выслать действующий промокод