Сохранить Excel с поддержкой макросов? Варианты сохранения

· Видеоурок по данной теме

Excel - это конечно хорошо, но Excel с поддержкой макрасов ещё лучше.

Существует несколько вариантов сохранения книг с поддержкой макросов. Тут нет никакого тибетского метода по их сохранению просто нажимаем кнопку на ленте Файл и выбираем пунктСохранить как. По умолчанию в настоящее время книга сохраняется с расширением .xlsx, к сожелению данное сохранение не поддерживает макросы.

Для того чтобы наши макросы адекватно работали нам подходят три "полноценных" формата сохранения книги.

1 - Сохранение книги с расширением .xls

2 - Сохранение книги с расширением .xlsm

3 - Сохранение книги с расширением .xlsb

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

Второй вариант неплохой, но всем сразу видно, что это не просто книга Excel, а с поддержкой макросов, и по личному опыту знаю, что многие с недоверием относятся к таким книгам.

Третий способ самый интересный. Это так называемая двоичная книга. Я предпочитаю сохранять под данным расширением. Дело в том, что это самый экономичный способ сохранения. Если книга с раширением .xls имеет размер порядка 6 Мбайт, то книга с расширением .xlsb будет весить порядка 100-200 кБайт. Что значительно экономит место на жёстком диске. Так же значительно проще отправлять по электронной почте. Но у этого метода так же есть свои недостатки. Книга с таким расширением работает только под Майкрософт Оффисом.

Вот вообщем-то и всё. Вам самим решать под каким расширением сохранять книгу с макросами, и что вы хотите с ней делать.

 

Заполняем ячеки таблицы
Условие Если... То...

· Видеоурок по данной теме

Ячейка Cells

Ячейка в VBA описывается Cells(a, b) через запятую, где
a - это номер строки
b - это номер столбца

Предположим необходимо прописать в первую ячейку первого столбца некоторое число.
Запись будет выглядеть так:

Cells(1, 1) = 123

Если необходимо прописать значение в ячейку на конкретный лист, то запись будет выглядеть следующим образом:

Worksheets("Лист1").Cells(1, 1) = 123

При этом отделение листа и ячейки осуществляется точкой.
Если содержимое ячейки текст, то его необходимо заключать в кавычки.

Worksheets("Лист1").Cells(1, 1) = "Текст"

Условие Если... То...

Иногда требуется выполнение определённого условия. Самое распростронённое как ни странно - это условие Если То.
Запись его выглядит так:

If Then Else End If

If - это начало условия, читается как Если
Then - это равносильно российскому То
Else - это равносильно слову Иначе
End If - это закрытие данного условия

Ниже приведён пример его применения.

Sub Primer() If Cells(1, 1) = 1 Then Cells(1, 2) = 1 Else Cells(1, 2) = 0 End If End Sub

Данный код читается следующим образом. Если ячейка А1 = 1, то В1 = 1, иначе В1 = 0.

Ниже приведён пример с информационными сообщениями.

Sub Primer() Da = MsgBox("Вам понравился данный пример?", vbYesNo, "Пример") If Da = vbYes Then MsgBox "Это хорошо", vbInformation, "Пример" Else MsgBox "Печально", vbInformation, "Пример" End If End Sub

 

Работа с диапазоном ячеек
Range

· Видеоурок по данной теме

Диапазон ячеек описывается Range( ).

При этом в скобках может находиться не обязательно диапазон ячеек, можно описать и одну ячейку, например, так:

Range("A1").Select

При такой записи произойдёт выделение только одной ячейки А1.

А вот если запись произвести следующим образом:

Range("A1:B3").Select

то произойдёт выделение всего указанного диапазона, в данном случае это А1:В3.
Если произвести следующую запись:

Range("A1:B3")=1 Range("A1:B3")="Текст"

то единица, в первом случае, будет находиться во всём указанном диапазоне (в каждой ячейке будет 1). Аналогичная ситуация во втором случае: слово Текст будет написано во всех ячейках указанного диапазона.

При этом, следующие записи равнозначны:

Range("A1:B3") = "Текст" = Range("A1","B3")="Текст"

А как сделать так, чтобы было одновременно выделено несколько диапазонов?
Очень просто. Выглядеть это будет так:

Range("A1:A4,C1:C3").Select Range("A1:A3,C1:C3,E2:E5").Select

Как и в примере с ячейками, диапазон можно выделить, изменить и т.п. не обязательно на активном листе, а на каком-нибудь другом. Выглядеть это будет так:

Worksheets("Лист2").Range("A1:B3") = "Текст"

Ну и конечно же диапазон можно задать ячейками:

Range(Cells(1, 1), Cells(3, 3)) = "Текст"