Комментарии 36
Честно говоря, не понимаю, почему они до сих пор держатся за Basic. Эклектичный, тяжело читаемый язык. Когда-то очень много пришлось писать макросов для Word, и, думаю, любая альтернатива была бы _намного_ лучше.
Быстро, просто, для выполнения нужен только пакет mso. Этого достаточно для бессмертия в его нише.
К примеру, Javascript — отличная альтернатива.
Сомневаюсь, что пропустят JavaScript или любой другой «неродной» язык. В лучшем случае на VB или C# заменят.
VBA уже редко используется. В основном все надстройки делаются в Visual Studio Tools for Office VSTO и пишутся либо на C# либо на VisualBasic.
Но честно, написать прямо в Excel, нажав Alt+F11 намного проще и быстрее. Но только чтобы автоматизировать что-то не очень сложное.
Но честно, написать прямо в Excel, нажав Alt+F11 намного проще и быстрее. Но только чтобы автоматизировать что-то не очень сложное.
О, спасибо за наводку.
Я честно искал, как сделать в чем-то другом. Basic ладно, но ещё и редактор сам убогий, крайне неудобно работать в сравнении с современными Visual Studio!
Я честно искал, как сделать в чем-то другом. Basic ладно, но ещё и редактор сам убогий, крайне неудобно работать в сравнении с современными Visual Studio!
VSTO есть начиная от 2005 Visual Studio. Правда я бы советовал пользоваться новыми лицензионными бесплатно по специальным программам Microsoft (как Bizspark, например).
Почитал, не очень понял как оно с совместимостью. Похоже сделанное в новой студии не будет работать, скажем, в MS Office 2003. У конторы, для которой я делал систему, много филиалов и нету единой IT (а зря), потому встречается всякое разное. VBA в этом смысле хорошо, а вы можете из своего опыта/знаний прокомментировать ситуацию с совместимостью VSTO-надстроек и где гарантии, что в 2014 офисе заработает то, что я сделаю для 2007?
Спасибо за статью. Кстати, программирование на VBA почему-то всегда рассматривают на примере Excel. Реже видел примеры для Word и Outlook, и совсем единичные случаи — PowerPoint.
Если у вас есть ссылки на примеры на VBA для MS Office — поделитесь, пожалуйста! На любом языке. Нужно для написания диплома и книжки. В основном помогает только MSDN и внутренняя справка. Большинство справочников «VBA для чайников» являются «кратким излоЖением» справки VBA. Нужны практические примеры: например, TNS обрабатывает отчеты Excel и по определенному алгоритму строит презентации PowerPoint, подставляя данные в шаблоны слайдов.
Если у вас есть ссылки на примеры на VBA для MS Office — поделитесь, пожалуйста! На любом языке. Нужно для написания диплома и книжки. В основном помогает только MSDN и внутренняя справка. Большинство справочников «VBA для чайников» являются «кратким излоЖением» справки VBA. Нужны практические примеры: например, TNS обрабатывает отчеты Excel и по определенному алгоритму строит презентации PowerPoint, подставляя данные в шаблоны слайдов.
Самые лучший способ получить примеры на VBA — это записывать макросы и затем просматривать их код. Зачастую помогает лучше всякого хелпа.
Набрал в поиске «excel to powerpoint vba», есть результаты, может можно и что-то уровня диплома найти.
Простейший пример — vbadud.blogspot.com/2006/07/vba-creating-powerpoint-presentation.html
Простейший пример — vbadud.blogspot.com/2006/07/vba-creating-powerpoint-presentation.html
Чаще всего VBA используется при написание программ на MS Access, очень удобная и простая штука для многих задач связанных с базами данных. Мне на Access удавалось написать довольно сложные базы данных.
При этом, что интересно, работа идет быстрее, чем в самом VB.
Я писал приложение генератор расписания по множеству критериев методом случайного поиска. VB.NET 2008 приложение отрабатывало за 3-5 минут, а перенесенное в Access — всего 10 секунд.
Я писал приложение генератор расписания по множеству критериев методом случайного поиска. VB.NET 2008 приложение отрабатывало за 3-5 минут, а перенесенное в Access — всего 10 секунд.
Это наверное зависит от способа доступа к базе данных, в MS Access идет прямой доступ к данным (чере COM интерфейсы), а в VB.NET через SQL запросы (ADO.NET), что значительно медленнее. В вашем случае нужно было все данные загрузить в память и там отработать, тогда VB.NET будет намного быстрее.
Все «данные» вбивались в форму настроек, а результат выводился в Grid только после того, как был расчитан.
Как я понял, дело тут было в лучшей работе с именно математикой, там же случайным образом генерировалось кучу-кучу всего, потом по правилам пересчитывалось всё остальное, проверки, и т.п. — плюс вывод в таблицу быстрее, Grid реально тормозной.
Может такое быть, на ваш взгляд? =)
Как я понял, дело тут было в лучшей работе с именно математикой, там же случайным образом генерировалось кучу-кучу всего, потом по правилам пересчитывалось всё остальное, проверки, и т.п. — плюс вывод в таблицу быстрее, Grid реально тормозной.
Может такое быть, на ваш взгляд? =)
Просто Excel многим нравится за возможность обработки большого количества данных — инженерные или бухгалтерские расчеты и т.д. В общем многие используют его как большой и мощный калькулятор. Потому под чаще всего и пишут.
Неплохой набор советов, спасибо!
>«Я не буду рассказывать, как создавать формы или модули, здесь только примеры кода.»
Кстати, для совсем начинающих вот ещё неплохая статья, как за 10 минут начать работать с VBA:
www.planetaexcel.ru/tip.php?aid=122
>«Я не буду рассказывать, как создавать формы или модули, здесь только примеры кода.»
Кстати, для совсем начинающих вот ещё неплохая статья, как за 10 минут начать работать с VBA:
www.planetaexcel.ru/tip.php?aid=122
Наши клиенты очень любят отчеты в экселе — делаем их на VBA, в самом макросе делаем запрос к SQL, затем данные выводим в эксель и форматируем. К стати, 1 замечание и совет:
1. Многие начинающие программировать в VBA в Excell запускают запись макроса и затем правят код, оставляя при этом, что то вроде
и если его немного поменять, то вывод будет намного быстрее
2. Небольшая хитрость для хранения SQL-запросов — создайте форму, разместите на ней textbox с установленной опцией Multiline=true, растяните его на всю форму и вставте туда запрос. Далее текст запроса можно получить так
1. Многие начинающие программировать в VBA в Excell запускают запись макроса и затем правят код, оставляя при этом, что то вроде
RANGE("A1").Select Selection.Value="Привет мир"
и если его немного поменять, то вывод будет намного быстрее
with RANGE("A1") .Value="Привет мир" end with
2. Небольшая хитрость для хранения SQL-запросов — создайте форму, разместите на ней textbox с установленной опцией Multiline=true, растяните его на всю форму и вставте туда запрос. Далее текст запроса можно получить так
SQLText=Form1.TextBox1.Text
Из замеченого
если вы захотите удалить строки из vba, то использовав при этом цикл с инкрементом:
подсвечивает код пр
не приведёт к желаемому результату
Вместо этого используйте декремент
если вы захотите удалить строки из vba, то использовав при этом цикл с инкрементом:
for i=1 to n
'удаление строки
next
подсвечивает код пр
не приведёт к желаемому результату
Вместо этого используйте декремент
for i=n to 1 step -1
'удаление строки
next
А зачем удалять строки в цикле?
Удалять строки с шагом 1 нельзя потому, что после удаления строки i строка i+1 уже сама стала итой, таким образом можно было бы использовать цикл:
В данном случае переменная счетчика будет реально просто счетчиком.
Rows("1:" & n).Delete
не подходит?Удалять строки с шагом 1 нельзя потому, что после удаления строки i строка i+1 уже сама стала итой, таким образом можно было бы использовать цикл:
For i=1 to n
Rows(1).Delete
Next i
В данном случае переменная счетчика будет реально просто счетчиком.
а если нужно добавить условие, что удаляй каждую 2-й каждой 10-й строки?
Жаль, что ни один из 25-ти минусующих топик\карму не высказался и не помог мне в следующий раз написать статью лучше :(
Важно понимать, что VBA выполняет все действия так же, как и пользователь. Поэтому для того, чтобы установить параметры страницы, он каждый раз открывает и закрывает окно параметров.
Это как?
Знаете, есть такие программы, которые водят мышкой и так автоматизируют любые приложения (часто боты для игр))? Примерно то же самое… Команды, которые доступны в VBA — это те же самые действия, которые выполняются пользователем. Пользователь нажал на ячейку — выполнился метод .Activate. Выделил — .Select. Поэтому, например, после выполнения макроса могут остаться выделнные области, листы могут переключиться (Sheets(5).Activate) и т.п.
При обращении к PageSetup эксель откроет окошко параметров страницы, изменит значения в полях и «нажмет» ок. Вместо того, чтобы как-то низкоуровнево поменять свойста страницы — такого нет! Надеюсь, понятно рассказал.
При обращении к PageSetup эксель откроет окошко параметров страницы, изменит значения в полях и «нажмет» ок. Вместо того, чтобы как-то низкоуровнево поменять свойста страницы — такого нет! Надеюсь, понятно рассказал.
Случайно ответила в ветку ниже. habrahabr.ru/blogs/msoffice_advanced/112458/#comment_3601962
Не очень понятно, на самом деле. VBA обращается к объектной модели, для того, чтобы изменить какие-то значения, необязательно вызывать экранные формы.
В справке о PageSetup написано: «Returns a PageSetup object that contains all the page setup settings for the specified object. Read-only.». Вы хотите сказать, что при получении этого объекта у вас на экране рисуется форма настройки страницы?
В справке о PageSetup написано: «Returns a PageSetup object that contains all the page setup settings for the specified object. Read-only.». Вы хотите сказать, что при получении этого объекта у вас на экране рисуется форма настройки страницы?
Нет, форма, к счастью, не рисуется :)
В данном случае я ошибся, и причина жутких тормозов с PageSetup (как пишут в Интернете) в «обращении к драйверу печати» каждый раз, при каждом изменении. Но всё остальное рисуется :)
Если открыть файл Экселя с установленными областями печати на компе без принтера (какого-либо), вылезают ошибки. Какая-то завязка, видимо, есть.
В данном случае я ошибся, и причина жутких тормозов с PageSetup (как пишут в Интернете) в «обращении к драйверу печати» каждый раз, при каждом изменении. Но всё остальное рисуется :)
Если открыть файл Экселя с установленными областями печати на компе без принтера (какого-либо), вылезают ошибки. Какая-то завязка, видимо, есть.
К SELECT CASE, если не ошибаюсь, ещё есть добавление:
CASE IS >= 5
CASE IS >= 5
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Несколько советов по работе с VBA в Excel