Pull to refresh

Comments 37

Когда-то еще в школе мне VBA в ворде и экселе помогал форматировать рефераты и другие текста. Было очень захватывающе писать программу которая тут же на глазах обрабатывала данный тобой текст, тогда это было похоже на некую магию и чувствовалась власть над кремниевым разумом :)
Да, согласен — похоже на магию.
Меня в свою очередь удивило когда-то когда после универа устроился на работу в весьма не последнуюю в Киеве компанию, а в отделе продаж про макросы и хоть какую-нить автоматизацию задач даже не слышали.
Хорошо бы включить в статью немного о «записи макроса». Для новичков это действительно лёгкий и быстрый способ изучить VBA.
Это точно, я такое использую для того чтобы узнать какими функциями можно сделать нужные операции
В статье почти не освещено как запускать VBA программы (в частности через макросы), способ через через отладчик хорош для тестирования, а готовое решение лучше всего через кнопку на панели…
Я знаю только два способа — вытащить кнопку на лист и добавить в Quick Access (на Ribbon).

Первый я вроде рассказал.
Ой, немного проглядел, в рамках данной статьи этого достаточно
Можно и свою вкладочку на Ribbon добавить, с кнопками и т.п. Только там надо файлик книги руками потрошить и добавлять туда схему в формате XML.
Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
— dropbox погуглите

Я бы посоветовал min.us — там теперь не только картинки можно заливать просто перетаскиванием.

Dropbox на бесплатном аккаунте может забанить юзера на некоторое время, который вешает ссылки в публичный доступ, после какого-то количества переходов по ним. Да и к тому же, может быть, автору вовсе не хочется регаться где-то, тем более ради мелкого файла.

Visual Studio Tools for Office позволяет писать макросы на C# и встраивать их в книгу Excel. Для 2003 офиса работает вполне адекватно.
Несколько лет назад на тогдашней работе меня попросили «что-то придумать», чтобы извлекать тексты из технических спецификаций и чертежей AutoCAD и складывать их в таблицы Excel.
В Автокаде есть интерпретаторы Lisp (точнее диалекта AutoLisp) и VBA. Лисп привёл меня в ужас, несмотря на поверхностное знакомство с ним в университете — остался VBA.
Язык непривычный и поначалу какой-то некомфортный для тех, кто учился Паскалю и C++ — но, надо признать, по-своему мощный. Через пару дней Автокад у меня уже «дистанционно» рулил Экселем и экспортировал таблички.
AutoCAD и его возможности автоматизации — по-моему такой конструктор лего, что от одной просьбы «что-то придумать» можно надолго зависнуть в выборе способа реализации «чего-то» )))
а что, PivotTable для такой задачи мало?
Спасибо, первый раз слышу, если честно.
А вообще задача показалась мне достаточной, чтобы показать основные средства форматирования через VBA. Это было целью.
А еще VBA, как и его старший брат VB, содержит костыль для вызова нативных DLL.
И отроки пишут нехитрые макровирусы, например.

Или вот такие, вполне себе легитимные вещи.
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Sub open_cdrom()
  Dim a As Double
  a = mciSendString("open cdaudio", 0&, 0&, 0&)
  a = mciSendString("set cdaudio door open", 0&, 0&, 0&)
  a = mciSendString("close cdaudio", 0&, 0&, 0&)
End Sub

Private Sub close_cdrom()
  Dim a As Double
  a = mciSendString("open cdaudio", 0&, 0&, 0&)
  a = mciSendString("set cdaudio door closed", 0&, 0&, 0&)
  a = mciSendString("close cdaudio", 0&, 0&, 0&)
End Sub

* This source code was highlighted with Source Code Highlighter.
Я ваял скрипты для экселя (некоторые ещё используются), но на jscript, от vba меня воротит.
а в 2007 и 2010 так же, как и в младших версиях, в редакторе кода не работает полоса прокрутки колесиком? :)
кстати, для обхода ячеек иногда удобно пользоваться конструкций For Each :)
Без обид, но что тут хорошего? Ужасный язык с уродливым синтаксисом, который вообще предназначем для обучения основам компьютерной грамотности, а не для работы, закрытая платная проприетарная замкнутая среда. То ли дело, если бы использовали опенсурсный яваскрипт, чтоб работало в бесплатной программе, но при этом не тормозило как опенофис.
Эх когда то я макро вирусы клепал для Ворда и Экселя… Как же тогда это было интересно…
На стыке веков, помнится, практически везде (в банках и госконторах — точно) с помощью Excel, VBA и такой-то матери писалось практически все.

Мне VBA здорово помогал разруливать документооборот в конторе, где я работал.
Собственно, что ценилось — скорость достижения результата.
Практически на каждый чих быстро ваялась «помогалка» мощами МС Офиса.
Кто не заморачивался сильно — обходился экселем, кто хотел большего — подключал MS Access.

Делалось для нужд любого подразделения — программеско-эникейские, бухгалтерия, склад, экономисты, юристы, оперчасть…

Один мой друг «автоматизировал» на Excel ведение зарплаты — получилась вполне сносная система по учету оной.

Другой сделал практически цельную систему (с использованием Access) документооборота и ведения прочих баз/дел/делишек почти всех подразделений в конторе. С архивациями, звонилками, экспортом, импортом, блекждеком и прочими.

А еще один — тетрис в экселе наваял (наверное, другие игрушки у него были деревянные и прибитые к полу).
foo «123», «456» ' Скобки при вызове процедур запрещены
foo «123», «456» ' Скобки при вызове процедур запрещены
......
' А вот при вызове функций, от которых хотим получить значение, скобки нужны.

Извиняюсь что-то FF глючит, комментарии сами уходят.
Хотел сказать, что сам недавно столкнулся с VBA и был озадачен логикой наличия/отсутствия скобок для функций и процедур.
Интересно, а можно писать макросы на C# для OpenOffice. На работе отказались от платных продуктов. Поэтому есть Visual Studio Express и OpenOffice. Хотелось бы попрактиковаться
А какие другие языки можно использовать в офисе для подобных задач?
Выше FireStorm писал, что есть Visual Studio Tools for Office. Они позволяют писать на C#. Видимо и на всех .NET языках тоже.
А если хочется не .NET язык — то заявлять ничего не буду. Но точно есть привязка через COM к любому языку, который это поддерживает.
а можно сделать так, чтобы с N количества страниц информация с 2 определенны столбцов собиралась на странице Х??
Да, конечно.
Просто делаете цикл от 1 до N, пробегаетесь по всем строкам нужной страницы ( вызвав сначала Sheets(«page» + CStr(ID)).Activate ) и копируете нужные данные в result ( GetCellS(«result», ...).Value =… ).
Спасибо за очень нужный материал.
А в googledocs можно ли программировать, никто не в курсе?
Я в экселе написал целую систему имитационного моделирования системы массового обслуживания :)

А вот с ОпенОфис не смог разобраться. Там какой-то очень стрёмный хелп. VBA в целом выглядит как-то логичнее.
Хотя я VBA специально никогда не учил, могу писать сложные штуки по хелпу, а в ОпенОфисе вообще ничего понять — хелп на сайте составлен крайне неудачно.
Статья не смогла оттенить убогость сабжа, не смотря на оформление, язык и целостность. (спасибо. Если не приведи господи придется с этим встретится, буду ее искать ))) )

P.S. Чет накатило
Эта публикация вдохновила меня на написание нечто похожего. Здесь
(http://habrahabr.ru/blogs/sandbox/112259/) можно посмотреть практическое применение макросов в качестве примера к Вашей статье.
Sign up to leave a comment.

Articles

Change theme settings