Pull to refresh

Comments 36

Честно говоря, не понимаю, почему они до сих пор держатся за Basic. Эклектичный, тяжело читаемый язык. Когда-то очень много пришлось писать макросов для Word, и, думаю, любая альтернатива была бы _намного_ лучше.
Быстро, просто, для выполнения нужен только пакет mso. Этого достаточно для бессмертия в его нише.
Сомневаюсь, что пропустят JavaScript или любой другой «неродной» язык. В лучшем случае на VB или C# заменят.
та MS (и не только они) много чего зря не делают ;)
я не знаю каким точно боком, но й нас ребята прикручиваю JavaScript, причем юзают интерпритарот какой то встроенный, валяющийся в системной директории винды, имхо из IE.
C# — мечта, но это чрезмерно типизированный язык (хорош для своих целей), я бы не назвал его скриптовым. JavaScript был бы идеален, элегантный, распространённый и не такой ломанный, как VB.
VBA уже редко используется. В основном все надстройки делаются в Visual Studio Tools for Office VSTO и пишутся либо на C# либо на VisualBasic.
Но честно, написать прямо в Excel, нажав Alt+F11 намного проще и быстрее. Но только чтобы автоматизировать что-то не очень сложное.
О, спасибо за наводку.
Я честно искал, как сделать в чем-то другом. 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 — это записывать макросы и затем просматривать их код. Зачастую помогает лучше всякого хелпа.
Не думаю, хотя для некоторых задач такой способ может подойти.
Чаще всего VBA используется при написание программ на MS Access, очень удобная и простая штука для многих задач связанных с базами данных. Мне на Access удавалось написать довольно сложные базы данных.
При этом, что интересно, работа идет быстрее, чем в самом VB.
Я писал приложение генератор расписания по множеству критериев методом случайного поиска. VB.NET 2008 приложение отрабатывало за 3-5 минут, а перенесенное в Access — всего 10 секунд.
Это наверное зависит от способа доступа к базе данных, в MS Access идет прямой доступ к данным (чере COM интерфейсы), а в VB.NET через SQL запросы (ADO.NET), что значительно медленнее. В вашем случае нужно было все данные загрузить в память и там отработать, тогда VB.NET будет намного быстрее.
Все «данные» вбивались в форму настроек, а результат выводился в Grid только после того, как был расчитан.
Как я понял, дело тут было в лучшей работе с именно математикой, там же случайным образом генерировалось кучу-кучу всего, потом по правилам пересчитывалось всё остальное, проверки, и т.п. — плюс вывод в таблицу быстрее, Grid реально тормозной.

Может такое быть, на ваш взгляд? =)
Просто Excel многим нравится за возможность обработки большого количества данных — инженерные или бухгалтерские расчеты и т.д. В общем многие используют его как большой и мощный калькулятор. Потому под чаще всего и пишут.
Неплохой набор советов, спасибо!

>«Я не буду рассказывать, как создавать формы или модули, здесь только примеры кода.»

Кстати, для совсем начинающих вот ещё неплохая статья, как за 10 минут начать работать с VBA:
www.planetaexcel.ru/tip.php?aid=122
Пожалуйста :)

Сайт вообще хороший, читал его. Бросилось в глаза в приведенной вами статье когда пишут:
.Interior.ColorIndex = 6
Интересно, что ColorIndex — номер цвета в текущей палитре. Она вполне может отличаться от ожидаемой.
Наши клиенты очень любят отчеты в экселе — делаем их на VBA, в самом макросе делаем запрос к SQL, затем данные выводим в эксель и форматируем. К стати, 1 замечание и совет:
1. Многие начинающие программировать в VBA в Excell запускают запись макроса и затем правят код, оставляя при этом, что то вроде
  RANGE("A1").Select
  Selection.Value="Привет мир"

и если его немного поменять, то вывод будет намного быстрее
 with  RANGE("A1")
   .Value="Привет мир"
 end with


2. Небольшая хитрость для хранения SQL-запросов — создайте форму, разместите на ней textbox с установленной опцией Multiline=true, растяните его на всю форму и вставте туда запрос. Далее текст запроса можно получить так

  SQLText=Form1.TextBox1.Text

Из замеченого
если вы захотите удалить строки из vba, то использовав при этом цикл с инкрементом:
for i=1 to n 
'удаление строки
next

подсвечивает код пр
не приведёт к желаемому результату

Вместо этого используйте декремент
for i=n to 1 step -1 
'удаление строки
next

А зачем удалять строки в цикле?
Rows("1:" & n).Delete
не подходит?

Удалять строки с шагом 1 нельзя потому, что после удаления строки i строка i+1 уже сама стала итой, таким образом можно было бы использовать цикл:
For i=1 to n
    Rows(1).Delete
Next i

В данном случае переменная счетчика будет реально просто счетчиком.
а если нужно добавить условие, что удаляй каждую 2-й каждой 10-й строки?
Если каждую десятую тогда
For i=1 to shag*(howmany-1) step shag-1
    Rows(i).Delete
Next i
или около того, но для такого случая обратный отсчет будет проще, да. Я просто хотел прояснить, для каких ситуаций и почему это может пригодится, спасибо.
Жаль, что ни один из 25-ти минусующих топик\карму не высказался и не помог мне в следующий раз написать статью лучше :(
Важно понимать, что VBA выполняет все действия так же, как и пользователь. Поэтому для того, чтобы установить параметры страницы, он каждый раз открывает и закрывает окно параметров.


Это как?
Знаете, есть такие программы, которые водят мышкой и так автоматизируют любые приложения (часто боты для игр))? Примерно то же самое… Команды, которые доступны в VBA — это те же самые действия, которые выполняются пользователем. Пользователь нажал на ячейку — выполнился метод .Activate. Выделил — .Select. Поэтому, например, после выполнения макроса могут остаться выделнные области, листы могут переключиться (Sheets(5).Activate) и т.п.

При обращении к PageSetup эксель откроет окошко параметров страницы, изменит значения в полях и «нажмет» ок. Вместо того, чтобы как-то низкоуровнево поменять свойста страницы — такого нет! Надеюсь, понятно рассказал.
Не очень понятно, на самом деле. VBA обращается к объектной модели, для того, чтобы изменить какие-то значения, необязательно вызывать экранные формы.

В справке о PageSetup написано: «Returns a PageSetup object that contains all the page setup settings for the specified object. Read-only.». Вы хотите сказать, что при получении этого объекта у вас на экране рисуется форма настройки страницы?
Нет, форма, к счастью, не рисуется :)
В данном случае я ошибся, и причина жутких тормозов с PageSetup (как пишут в Интернете) в «обращении к драйверу печати» каждый раз, при каждом изменении. Но всё остальное рисуется :)
Если открыть файл Экселя с установленными областями печати на компе без принтера (какого-либо), вылезают ошибки. Какая-то завязка, видимо, есть.
К SELECT CASE, если не ошибаюсь, ещё есть добавление:
CASE IS >= 5
Only those users with full accounts are able to leave comments. Log in, please.