как узнать версию vba
Как узнать версию Visual Basic?
Как узнать версию Visual Basic? А какие версии есть вообще? А чем одна отличается от другой? А какая конкретно нужна мне?
Всего есть три большие категории, на которые делится Visual Basic, и в этой заметке мы покажем, как определить версию, если вы не знаете её наверняка.
Visual Basic 6.0
Это очень старая версия языка, выпущенная в 1998 году. Она устанавливалась в составе Visual Studio 98 или как отдельная программа. Окно нового проекта выглядит так.
Обратите внимание: панель инструментов – слева, свойства и предпросмотр – справа. На форме нарисована сетка из точек, а иконка на форме сама похожа на форму – белый прямоугольник с голубым заголовком.
Visual Basic
Визуально она сильно отличается от Visual Basic 6.0 и выглядит гораздо современнее, чем прошлая версия. Сетки из точек на форме уже нет, а у самой формы другая иконка из нескольких цветных квадратов.
Visual Basic для приложений (VBA)
Это Visual Basic, встроенный в программы от Microsoft – Word, Excel или Access. Редактор кода на VBA запускается с вкладки «Разработчик» в этих программах.
Сам редактор при этом выглядит так:
Здесь сразу после открытия состав проекта и окно свойств находятся слева, справа – окно кода и нет никаких элементов управления, пока вы не создадите форму. Таким образом, узнать эту версию легче всего.
Как видите, все три версии значительно отличаются визуально. Надеемся, что теперь, после прочтения данной статьи, для вас не станет проблемой выбрать нужную. Пишите нам в личные сообщения группы – мы всегда готовы вам помочь.
Как узнать версию vba
Как найти версию Excel, которую вы используете сейчас?
В некоторых случаях вам может потребоваться информация о версии используемого вами Excel. В этой статье мы покажем вам методы поиска информации о версии вашего Excel.
Чтобы найти версию Excel 2013/2016, вы можете сделать следующее.
1. Нажмите Файл > Аккаунт > О Excel. Смотрите скриншот:
2. Затем вы узнаете свою версию Excel в О Microsoft Excel диалоговое окно.
Для Excel 2010 сделайте следующее.
1. Нажмите Файл > Справка. Затем вы можете увидеть, что версия Excel отображается в О Microsoft Excel раздел. Смотрите скриншот:
1. Нажмите Офисы кнопка> Параметры Excel.
2. в Параметры Excel диалоговое окно, нажмите Ресурсы на левой панели, вы увидите версию Excel в о Microsoft Office Excel 2007 раздел. Смотрите скриншот:
Помимо вышеперечисленных методов, вы также можете найти версию Excel с кодом VBA.
1. Нажмите другой +F11 для открытия Окно Microsoft Basic для приложений.
2. Затем нажмите Вставить > Модуль. Смотрите скриншот:
3. Скопируйте и вставьте приведенный ниже код VBA в окно модуля, а затем нажмите F5 ключ для запуска кода.
Код VBA: найти версию Excel
4. Затем Microsoft Excel появится диалоговое окно с номером версии.
excel vba как узнать разрядность системы
Иногда нужно узнать какая разрядность у системы (например мне нужно было узнать какой установщик качать, из за того что установщик на x86 (x32) отказывался устанавливатся на x64, понадобилось определение разрядности, а разрядность бывает: x86 (так же известна как x32) и x64. Они различаются тем что x86 (x32) может видить до 4 гигов оперативной памяти (приложения работают чуть медленнее), в отличии от x64 (которая жрёт немного больше оперативной памяти, но видит от 4+ гигов оперативы, и приложения работают на ней быстрее), поэтому разработчики которые любят «железки» не брезгают тем, что их программа может работать быстрее на x64 нежели на x32, поэтому некоторые крупные разработчики делают разные версии своих программ под x86(x32), и x64, соотвецтвенно что некоторые приложения «заточенные» под одну разрядность отказываются работать в другой и нужно определить разрядность и скоректировать установку, ломал я голову и придумал =)
Вас интересует, какая версия Office 2010 используется на домашнем компьютере – 32 или 64-битная? В этой статье мы вам подскажем, как узнать версию Office.
Как узнать версию office
1. Открываем офисное приложение. В нашем примере речь пойдет о Word 2010, но этот способ работает также как и с другими версиями офисного приложения. Открываем раздел главного меню «File», а в нем пункт «Help».
2. В результате вы сможете получить информацию о той версии офисного пакета, которая у вас установлена. Помимо версии основного пакета вы узнаете версии других связанных приложений, равно как номер версии и ID проекта.
3. Запишите номер версии, который, скорее всего, окажется 32-битной версией офисного пакета. Чаще всего именно эту разрядность приложений используют при установке Office 2010 (по умолчанию).
4. Если вы обнаружили, что используете 32-битную версию, то можно загружать и использовать как 32-битную версию, так и версию x86 офисных расширений.
5. Если же вы используете 64-битную версию офисного пакета, то в указании версии после названия Office должен стоять суффикс «64-bit». В таком случае при загрузке дополнений вам необходимо использовать исключительно версии для стандарта x64.
6. Если вы непроизвольно попытаетесь установить 32-битное расширение на 64-битную версию Office или наоборот, мастер установки может предупредить вас о необходимости скачать и установить правильную версию. Стоит обратить внимание также на то, что некоторые 32-битные расширения, включая старые версии, могут нормально работать с 64-битной версией.
Заключение
Хотя проверку версии офисного пакета не следует проводить каждый день, будет не лишним проверить, какую версию Office вы используете – 32 или 64-битную. Теперь, когда вы в курсе, как узнать версию Office, можно приступить к его тонкой настройке. Расширения и плагины могут добавить офисному пакету новые возможности, начиная с поддержки сервисов LinkedIn и Facebook и заканчивая вставкой в письмо почтового клиента Outlook химических уравнений.
Если вы хотя бы немного пользуетесь операционной системой от Microsoft, то наверняка знаете, что как сама ОС, так и различные программы для нее имеют разрядность x32 и x64. Например, если вы решите купить Microsoft Office 2007, то у вас будет возможность выбрать данный параметр.
На что он влияет? Тут есть много нюансов, но самое главное заключается в поддержке оперативной памяти. В x32 системах максимально допустимое количество ОЗУ – 4 Гб, тогда как в x64 ОС это значение намного выше. Поэтому если у вас современный ПК с большим объемом памяти, то вам наверняка нужно устанавливать x64 систему. Но помимо ОС, программы также различаются разрядностью. И, как правило, между собой несовместимы. То есть для системы x64 нужно использовать программы с такой же разрядностью. Поэтому, если вы планируете обновлять свой ПК, то не помешает заранее узнать тип уже установленных программ для последующей установки. Например, как узнать разрядность MS Office 2007?
Как узнать разрядность Офиса?
Для чего нужно узнать данный параметр? Если у вас программа устанавливается с диска, то вам нужно узнать данное значение, чтобы понять, сможете ли вы ее установить на новый ПК с другой операционной системой. Чтобы определить разрядность своего Офиса, вам необходимо выполнить следующие шаги:
Из этого меню вы можете не только выяснить разрядность, но и узнать версию программного обеспечения (полезно, если вы хотите обновиться). Также здесь представлен номер продукта, статус ПО (активирован ли ключ) и многое другое.
Альтернативные способы
Если такой вариант вам не подходит, то есть другой способ. Вам необходимо выполнить следующие шаги:
Также есть вариант для продвинутых – поиск записей в реестре. Нужно найти элемент «InstallRoot» в системе и посмотреть его параметры (где в реестре хранится ключ, вы можете узнать, используя базу данных MSI через специальное приложение).
Теперь вы знаете, как определить разрядность вашего Офиса. Это будет полезно при установке MS Office на новую систему. Если вы попытаетесь инсталлировать неправильную версию (например, Офис 32 на систему x64), то программа выдаст ошибку или предложит скачать правильную версию. Поэтому не помешает знать, как узнать данный параметр и правильно инсталлировать пакет редакторов. После успешной установки вам больше не потребуется беспокоиться о разрядности. В случае обновления программного обеспечения необходимая версия автоматически будет загружена и установлена.
Несколько советов по работе с VBA в Excel
Добрый день!
Некоторое время назад меня попросили «помочь с Экселем», а потом и работа подвернулась такая, так что за последние пару месяцев я узнал много полезного, чем и хочу поделиться в догонку к недавней статье.
Предполагается, что вы знаете основы Visual Basic. Я не буду рассказывать, как создавать формы или модули, здесь только примеры кода.
Visual Basic
Опции
Во-первых, в VB массивы могут начинаться с индекса 1, что для многих странно, поэтому в начале модулей можно прописывать:
Так же рекомендуется прописать:
В этом случае интерпретатор потребует заблаговременного объявления всех переменных. Переменные объявлять нужно потому, что:
— VB запомнит их нАпиСание и не будет исправлять во всём коде на последний введенный вариант;
— иногда возникают ошибки с передачей переменных byRef, если они не объявлены (то есть надо или объявить переменную, или приписать в функции/процедуре перед ней byVal).
Ещё одним важным оператором является ON ERROR. Привожу варианты:
Возможности языка
Хотя VB довольно прост, полезно почитать документацию по его синтаксису. Я, например, с удивлением узнал, что можно прописывать сложные усолвия в SELECT’ах (аналог switch):
Ускорение работы макросов
Часто макросы требуют долгого времени выполнения, которое можно значительно сократить. В начале и в конце каждой ресурсоёмкой функции вызвать Prepare и Ended.
По порядку:
1. Отключить перерисовку объектов на экране, чтобы ничего не мигало.
2. Выключить расчет. Внимание, если макрос прерваляс посреди работы, то расчет так и останется в ручном режиме!
3. Не обрабатывать события.
4. Отображение границ страниц, тоже почему-то помогает.
5. В статусной строке выводятся различные данные, что замедляет работу, отключаем.
6. Это если нужно. Выключает сообщения Экселя. Например, мы делаем Workbook.Close, Эксель хочет спросить сохранить ли изменения. При выключении этого параметра все ответы будут даны автоматически (изменения не сохранятся).
Важно понимать, что VBA выполняет все действия так же, как и пользователь. Поэтому для того, чтобы установить параметры страницы, он каждый раз открывает и закрывает окно параметров. У меня выставлялись параметры для 10 листов, это реально не быстро. Поэтому делаем так:
Далее, часто нужно просмотреть различные диапазоны ячеек и что-то с ними сделать. Тут важно не использовать циклы for с перебором индексов, они медленные. Можно использовать встроенные функции Экселя, но удобнее всего такой вариант:
Данный код просматривает указанный диапазон, выбирает в нем «специальные ячейки», в данном случае все, в которых есть формулы (т.е. начинаются со знака равно). Для каждой ячейки смотрится, если она не закрашена, то её надо защитить (см. далее) и покрасить. Такой код работает очень быстро.
Для любых переменных, которым вы собираетесь присвоить книгу, лист, диапазон (ячейку) нужно предварительно объявить как Variant.
Естественно, что если вам нужны однотипные значения в ячейках, нужно использовать автозаполнение, всё равно как «растягивание» ячеек пользователем.
Второй диапазон должен включать первый, а второй необязательный параметр указывает тип автозаполнения.
Загрузка книги и события
При открытии книги каждый раз срабатывает процедура.
В данном случае настройки печати (поля, ориентация) сбрасываются на дефолтные. Можно и другую инициализацию выполнять. Важно, что если макросы отключены, то и не выполнится ничего. Если в Экселе вылезла вверху панелька с предупреждением о макросах и пользователь нажал «Включить», то именно в этот момент выполнится процедура Workbook_open().
Список доступных событий можно посмотреть вверху редактора VB. Например, я делал на событие Change проверку, где лежит ячейка, в которой было изменения, и если это нужный диапазон, то делалась запись в лог со старым и новым значением.
Защита
Во-первых сразу отмечу, что MS Office не исполняет макросы на компьютерах, где он не нашел антивируса, если книга зашифрована. Сталкивался на компьютерах, где антивирус был, но видимо Windows XP об этом не знала.
Ещё антивирус может странным образом мешать работе, вызывать ошибки, не совсем объяснимые. Показал айтишникам, сказали ок, что-то сделали, не знаю.
Итак, нам надо защитить книгу, чтобы ввод был разрешен только в нужные ячейки (формулы и заголовки поменять нельзя). Во-первых, нужно сделать соответствующие ячейки «не защищенными». Для этого делаем одно из:
— выделяем диапазон, формат ячеек, снять галочку «Блокировать ячейку»;
— выводим кнопку «Блокировать ячейку» в быстрый доступ и нажимаем её, очень удобно смотреть на неё чтобы понять, защищена ячейка или же нет;
— а это пригодится, чтобы проверить третий вариант — написать макрос, который снимает защиту с нужных ячеек сам.
Далее нужно защитить лист. На вкладке Рецензирование есть такая кнопка. Окошко просит ввести пароль и установить исключения (что можно будет делать пользователю). К сожалению, список исключений маловат. Самое обидное, что нельзя разрешить сворачивать/разворачивать группы столбцов/строк. Поэтому действуем так, на загрузку книги прописываем:
Знак подчеркивания продолжает логическую строку на следующей физической строке. Итак, здесь мы:
1. Сняли защиту.
2. Включили группировку.
3. Поставили защиту, при этом:
— защита только от юзера, макросы продолжают иметь полный доступ (!), крайне важно;
— разрешили сортировку, фильтрацию и форматирование строк/столбцов (высота/ширина);
— DrawingObject в данном случае снимает защиту с примечаний к ячейкам, может и ещё с чего.
Тут мы сталкиваемся с парой сюрпризов. Во-первых, не все макросы будут работать даже так. Известный баг, ничего не сделаешь. Нельзя вставить строку, например. Приходится снимать и тут же ставить защиту. Если «злоумышленник» в этот момент нажмет ctrl+break, то защита слетит.
Во-вторых, скажем никаким способом нельзя удалять строки (AllowDeletingRows), в которых есть защищенные ячейки, хоть одна. Подробнее вот тут.
Решением (костылем) является добавление кнопки или сочетания клавиш для удаления. Заодно можно проверить, чтобы пользователь не удалил чего не надо. В Workbook_open добавляем:
Теперь процедура будет вызываться при нажатии shift+delete.
Знаю, код некрасивый, простите. Здесь я пытался проверить, что выделена строка, то есть строк там 1, а ячеек не меньше тысячи. Чтобы удалить не то, придется выделить тысячу ячеек начиная не с первого столбца. Далее проверяется имя листа и номера строк. Вместо 50 был расчет последенй строки (ведь их число меняется, если мы их удаляем и добавляем).
Заключение
VBA — весьма глючная вещь, которая позволяет сворачивать горы в MS Office. Многие предприятяи используют модели на Excel годами, и если они сделаны хорошо, то всё работает.
Для изучения VBA подходит он сам, во-первых там хорошая справка. Например, чтобы узнать все варианты что можно разрешить в методе Protect, нажимаем F1, Protect, ввод. И вуаля.
Предлагаю знатокам поделиться своим опытом, дать советы в комментариях. Спасибо за внимание, удачных разработок вам.
Автоматизация рутины в Microsoft Excel при помощи VBA
В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.
VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.
Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.
Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.
Поэтому, увы, будем учить Visual Basic.
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Напишем Hello World:
Sub FormatPrice()
MsgBox «Hello World!»
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
Dim res As sTRING ‘ Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
‘ Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ‘ Конвертация чего угодно в String
If i = 5 Then Exit For
Next i
Dim x As Double
x = Val( «1.234» ) ‘ Парсинг чисел
x = x + 10
MsgBox x
On Error GoTo Err ‘ При ошибке перейти к метке Err
x = 5 / 0
MsgBox «OK!»
GoTo ne
ne:
On Error GoTo 0 ‘ Отключаем обработку ошибок
‘ Циклы бывает, какие захотите
Do While True
Exit Do
Loop ‘While True
Do ‘Until False
Exit Do
Loop Until False
‘ А вот при вызове функций, от которых хотим получить значение, скобки нужны.
‘ Val также умеет возвращать Integer
Select Case LengthSqr(Len( «abc» ), Val( «4» ))
Case 24
MsgBox «0»
Case 25
MsgBox «1»
Case 26
MsgBox «2»
End Select
Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.
Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.
Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.
Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.
Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.
Кодим много и под Excel
В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.
Sub FormatPrice()
Sheets( «result» ).Cells.Clear
Sheets( «data» ).Activate
End Sub
Работа с диапазонами ячеек
Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.
Примеры работы с Range
Sheets( «result» ).Activate
Dim r As Range
Set r = Range( «A1» )
r.Value = «123»
Set r = Range( «A3,A5» )
r.Font.Color = vbRed
r.Value = «456»
Set r = Range( «A6:A7» )
r.Value = «=A1+A3»
Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer ) As String
GetCol = Chr(Asc( «A» ) + Col)
End Function
Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».
Глобальные переменные
Option Explicit ‘ про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3
FormatPrice
Sub FormatPrice()
Dim I As Integer ‘ строка в data
CurRow = 1
Dim Groups(1 To GroupsCount) As String
Dim PrGroups(1 To GroupsCount) As String
Теперь надо заполнить массив Groups:
На месте многоточия
И создать заголовки:
На месте многоточия в предыдущем куске
For I2 = 1 To GroupsCount
If Groups(I2) <> PrGroups(I2) Then
Dim I3 As Integer
For I3 = I2 To GroupsCount
AddHeader I3, Groups(I3)
Next I3
Exit For
End If
Next I2
Не забудем про процедуру AddHeader:
Перед FormatPrice
Теперь надо перенести всякую информацию в result
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets( «Result» ).Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Select Case Ty
Case 1 ‘ Тип
.Font.Bold = True
.Font.Size = 16
.Borders(xlTop).Weight = xlThick
Case 2 ‘ Производитель
.Font.Size = 12
.Borders(xlTop).Weight = xlMedium
End Select
.Borders(xlBottom).Weight = xlMedium ‘ По убыванию: xlThick, xlMedium, xlThin, xlHairline
End With
CurRow = CurRow + 1
End Sub
Осталось лишь добится пропусков перед началом новой группы. Это легко:
В начале FormatPrice
Dim I As Integer ‘ строка в data
CurRow = 0 ‘ чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String
В цикле расстановки заголовков
If Groups(I2) <> PrGroups(I2) Then
CurRow = CurRow + 1
Dim I3 As Integer
В точности то, что и хотели.
Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.
Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
Спасибо за внимание.
Буду рад конструктивной критике в комментариях.
UPD: Перезалил пример на Dropbox и min.us.
UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.