VBA Excel
242 subscribers
88 photos
23 links
VBA Excel для начинающих. Справка по VBA Excel. Visual Basic for Applications. Справочник. Самоучитель.
Download Telegram
Примеры циклов Do Until… Loop

Цикл Do Until… Loop с условием до исполняемых операторов:
Sub test1()
Dim a As Byte
Do Until a > 9
a = a + 1
Loop
MsgBox a
End Sub


Цикл Do Until… Loop с условием после исполняемых операторов:
Sub test2()
Dim a As Byte
Do
a = a + 1
Loop Until a > 9
MsgBox a
End Sub


Бесконечный цикл и Exit Do:
Sub test5()
Dim a As Byte, n As Long
Do Until a > 10
a = a + 1
n = n + 1
If a = 10 Then
a = 0
End If
If n = 1000 Then
Exit Do
End If
Loop
MsgBox n
End Sub

Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное окно MsgBox выведет на экран число повторений цикла Do Until… Loop из этого примера.
Цикл While… Wend

Цикл While… Wend в VBA Excel предназначен для выполнения блока операторов до тех пор, пока выполняется заданное условие (возвращается значение True). Этот цикл позволяет проверять условие только до выполнения операторов. Принудительный выход из цикла с помощью оператора Exit Do не предусмотрен.

Синтаксис цикла While… Wend
While condition
    [ statements ]
Wend


#VBA #ExcelVBA #While #WhileWend #ЦиклWhile #Цикл
*Если не использовать в цикле свой код VBA, смысл применения цикла теряется.
Пример цикла While… Wend
Sub test1()
Dim a As Byte
  While a < 100
    a = a + 7
  Wend
MsgBox a
End Sub

Информационное сообщение MsgBox выведет число 105.
Функции для работы с буфером обмена

🛠 Функция записи текста в буфер обмена:
Function SetClipBoardText(ByVal Text As Variant) As Boolean
    SetClipBoardText = CreateObject("htmlfile").parentWindow.clipboardData.SetData("Text", Text)
End Function


🛠 Функция вставки текста из буфера обмена:
Function GetClipBoardText() As String
    On Error Resume Next
    GetClipBoardText = CreateObject("htmlfile").parentWindow.clipboardData.GetData("Text")
End Function


🛠 Функция очистки буфера обмена:
Function ClearClipBoardText() As Boolean
    ClearClipBoardText = CreateObject("htmlfile").parentWindow.clipboardData.clearData("Text")
End Function


Пример использования функций для работы с буфером обмена:
Sub Primer()
Dim s As String
    s = "Копирование текста из переменной в буфер обмена"
    'Копируем текст в буфер обмена
    SetClipBoardText (s)
    'Вставляем текс из буфера обмена в ячейку "A1"
    Range("A1") = GetClipBoardText
    'Очищаем буфер обмена, если это необходимо
    ClearClipBoardText
End Sub


#VBA #ExcelVBA #БуферОбмена #ClipBoard
Ячейка в VBA Excel

Ячейка в VBA Excel - это частный случай объекта Range (диапазона), состоящего из одной ячейки. Cells - это свойство объекта Range, возвращающее объект Range, состоящий из одной ячейки.

#VBA #ExcelVBA #Range #Cells #Ячейка #Ячейки
Обращение к ячейке
Все известные мне способы обращения к ячейке в VBA Excel.

Обращение к ячейке по адресу

Обращение к ячейке "C5" на активном листе:
Range("C5")
Cells(5, 3)
Cells(5, "C")
[C5]


Обращение к активной (выбранной) ячейке на активном листе:
ActiveCell


Обращение к ячейке "C5" на неактивном листе книги с кодом:
'по основному имени листа
Лист2.Range("C5")
Лист2.Cells(5, 3)
Лист2.Cells(5, "C")
Лист2.[C5]
'по имени ярлыка
Sheets("Имя ярлыка").Range("C5")
Sheets("Имя ярлыка").Cells(5, 3)
Sheets("Имя ярлыка").Cells(5, "C")
Sheets("Имя ярлыка").[C5]

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке "C5" на листе "Лист2" другой открытой книги из книги с кодом:
Workbooks("Книга2.xlsm").Sheets("Лист2").Range("C5")
Workbooks("Книга2.xlsm").Sheets("Лист2").Cells(5, 3)
Workbooks("Книга2.xlsm").Sheets("Лист2").Cells(5, "C")
Workbooks("Книга2.xlsm").Sheets("Лист2").[C5]

Удобно обращаться к ячейке через свойство рабочего листа Cells(№ строки, № столбца), так как вместо номеров строк и столбцов можно использовать переменные.

#VBA #ExcelVBA #ОбращениеКЯчейке #Range #Cells
Обращение к ячейке по индексу

К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.

Для примера, Cells(4) - это та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel количество строк и столбцов на рабочем листе может быть разным.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range("A1:C3"):
Обращение к ячейке Range("A1:C3").Cells(5) соответствует выражению Range("B2").
Обращение к ячейке по имени

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – "Итого", тогда обратиться к ней можно – Range("Итого").
Запись, чтение, очистка

Запись информации в ячейку

Содержание ячейки определяется ее свойством "Value", которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания "=":
Cells(2, 4).Value = 15
Cells(2, 4) = 15
Range("A1") = "Этот текст записываем в ячейку"
ActiveCell = 28 + 10*36

Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа.

Чтение информации из ячейки

Считать информацию из ячейки в переменную можно также при помощи оператора присваивания "=":
Sub Test()
Dim a1 As Integer, a2 As Integer, a3 As Integer
Range("A3") = 6
Cells(2, 5) = 15
a1 = Range("A3")
a2 = Cells(2, 5)
a3 = a1 * a2
MsgBox a3
End Sub


Точно также можно обмениваться информацией между ячейками:
Cells(2, 2) = Range("A4")


Очистка значения ячейки

Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля, пустой строки или Empty:
Cells(10, 2).ClearContents
Range("D23") = 0
ActiveCell = ""
Cells(5, "D") = Empty


#Запись #Чтение #Очистка #Range #Cells
👍1
Цвет ячейки (заливка, фон)

Свойство .Interior.Color объекта Range

Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).
Sub ColorTest1()
Range("A1").Interior.Color = 31569
Range("A4:D8").Interior.Color = 4569325
Range("C12:D17").Cells(4).Interior.Color = 568569
Cells(3, 6).Interior.Color = 12659
End Sub


Если присвоить свойству .Interior.Color отрицательное значение от -16777215 до -1, то цвет будет соответствовать значению, равному сумме максимального значения палитры (16777215) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:
Sub ColorTest11()
Cells(1, 1).Interior.Color = -12207890
Cells(2, 1).Interior.Color = 16777215 + (-12207890)
Cells(3, 1).Interior.Color = 4569325
End Sub


Числовые значения цветов запомнить невозможно, поэтому часто возникает вопрос о том, как узнать числовое значение фона ячейки. Следующий код VBA Excel выводит сообщения о числовых значениях присвоенных ранее цветов:
Sub ColorTest2()
MsgBox Range("A1").Interior.Color
MsgBox Range("A4:D8").Interior.Color
MsgBox Range("C12:D17").Cells(4).Interior.Color
MsgBox Cells(3, 6).Interior.Color
End Sub

Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.

Использование предопределенных констант
В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:

#ЦветЯчейки #Заливка #Фон #InteriorColor #Interior #Color
👍1
Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:
Range("A1").Interior.Color = vbGreen
👍1
Цветовая модель RGB

Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 — это черный цвет, если все значения равны 255 — это белый цвет.

Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:
1
Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется — RGB.

Range("A1").Interior.Color = RGB(100, 150, 200)


#RGB #Цвет #Color
Очистка ячейки (диапазона) от заливки

Для очистки ячейки (диапазона) от заливки используется константа xlNone:
Range("A1").Interior.Color = xlNone


#VBA #ExcelVBA #xlNone #ОчисткаЯчейки
Свойство .Interior.ColorIndex объекта Range

До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:
Range("A1").Interior.ColorIndex = 8
MsgBox Range("A1").Interior.ColorIndex


Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:
Sub ColorIndex()
Dim i As Byte
For i = 1 To 56
Cells(i, 1).Interior.ColorIndex = i
Next
End Sub

Номера строк активного листа от 1 до 56 будут соответствовать индексу цвета, а ячейка в первом столбце будет залита соответствующим индексу фоном.

#VBA #ExcelVBA #ColorIndex #InteriorColorIndex #Interior
Цвет текста (шрифта) в ячейке

Свойство .Font.Color (основная палитра)

Основная палитра, начиная c Excel 2007, состоит из 16777216 цветов. Свойство .Font.Color может принимать значения от 0 до 16777215, причем 0 соответствует черному цвету, а 16777215 — белому.
Cells(1, 1).Font.Color = 0
Cells(2, 1).Font.Color = 6777215
Cells(3, 1).Font.Color = 4569325


При записи макрорекордером макроса с присвоением шрифту цвета используются отрицательные значения свойства .Font.Color, которые могут быть в пределах от -16777215 до -1. Отрицательные значения соответствуют по цвету положительному значению, равному сумме наибольшего индекса основной палитры и данного отрицательного значения. Например, отрицательное значение -8257985 соответствует положительному значению 8519230, являющегося результатом выражения 16777215 + (-8257985). Цвета текста двух ячеек из следующего кода будут одинаковы:
Cells(1, 1).Font.Color = -8257985
Cells(2, 1).Font.Color = 8519230


#VBA #ExcelVBA #ЦветТекста #FontColor #Font #Color
Свойство .Font.Color и модель RGB

Для изменения цвета текста в ячейке можно использовать цветовую модель RGB:
Range("A1").Font.Color = RGB(200, 150, 250)
Cells(2, 1).Font.Color = RGB(200, 150, 100)


Аргументы функции RGB могут принимать значения от 0 до 255. Если все аргументы равны 0, цвет — черный, если все аргументы равны 255, цвет — белый. Функция RGB преобразует числовые значения основных цветов (красного, зеленого и синего) в индекс основной палитры.

Свойство .Font.Color и предопределенные константы

Цвет шрифту в ячейке можно присвоить с помощью предопределенных констант:
Range("A1:C3").Font.Color = vbGreen
Range(Cells(4, 1), Cells(6, 3)).Font.Color = vbBlue
Cells(7, 1).Font.Color = vbRed

Список предопределенных констант смотрите в таблице ниже.

#VBA #ExcelVBA #RGB #FontColor