VBA Excel
241 subscribers
88 photos
23 links
VBA Excel для начинающих. Справка по VBA Excel. Visual Basic for Applications. Справочник. Самоучитель.
Download Telegram
📂 Чтение текста из файла с помощью FileSystemObject

В VBA Excel для работы с файлами удобно использовать объект FileSystemObject (FSO). Он позволяет читать, записывать и управлять файлами.

🎤 Объявление FileSystemObject
🔹 Объявить переменную как FileSystemObject можно с ранней или поздней привязкой.
🔹 Чтобы использовать раннюю привязку, необходимо подключить библиотеку Microsoft Scripting Runtime (Tools - References - установите галочку перед Microsoft Scripting Runtime - нажмите 🆗).
🔹 Поздняя привязка не требует подключения библиотеки Microsoft Scripting Runtime к проекту VBA.

' Ранняя привязка
Dim fso As New FileSystemObject
' Поздняя привязка
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")


📌 Примеры

1️⃣ Чтение всего текста из файла сразу:
Sub Primer1()
Dim fso, fl, st As String
' Создаем новый экземпляр объекта FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
' Открываем файл для чтения
Set fl = fso.OpenTextFile("C:\Test\Текстовый документ.txt")
' Считываем весь текст из файла в переменную st
st = fl.ReadAll
' Закрываем файл
fl.Close
'Отображаем содержимое переменной в окне Immediate
Debug.Print st
End Sub


2️⃣ Чтение текста из файла построчно:
Sub Primer2()
Dim fso, fl, st As String
' Создаем новый экземпляр объекта FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
' Открываем файл для чтения
Set fl = fso.OpenTextFile("C:\Test\Текстовый документ.txt")
' Читаем построчно текст из файла и выводим в окно Immediate
Do Until fl.AtEndOfStream
st = fl.ReadLine
Debug.Print st
Loop
' Закрываем файл
fl.Close
End Sub

В этом примере также читается весь файл, только построчно, и, соответственно, результат построчной записи в окно Immediate будет таким же, как и в первом примере.

#VBA #ExcelVBA #FileSystemObject #ReadAll #ReadLine
👍3
🔲 Максимизация окна Excel при открытии

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

🔥 Ниже приведены примеры кода, которые работали у меня. Размещаются процедуры в модуле ЭтаКнига личной книги макросов.

1️⃣ Для Excel 2010
Private Sub Workbook_Open()
Application.WindowState = xlMaximized
End Sub


2️⃣ Для Excel 2016
Private Sub Workbook_Open()
Application.DisplayFullScreen = True
End Sub


💡 Возможно, второй код подойдет и для Excel 2010 - проверить не было возможности.

#VBA #Excel #Максимизация #Window #Maximized
👍1
🛠 Исправление ошибок в Personal.xlsb

Если в коде процедур, размещенных в личной книге макросов (Personal.xlsb) и запускаемых при загрузке Excel, будут допущены ошибки, Excel может перестать открываться.

🚀 Решается проблема следующим образом:

1️⃣ Перейдите в папку XLSTART:
🔹 Путь к папке XLSTART:
C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART
🔹 Так как папка AppData - скрытая, у вас должно быть включено отображение скрытых папок
2️⃣ Переместите файл Personal.xlsb в другое место, например, в папку Excel.
3️⃣ Перезагрузите компьютер и откройте любой файл Excel с поддержкой макросов.
4️⃣ Откройте перемещенный файл Personal.xlsb (он появится в проводнике редактора VBA).
5️⃣ Исправьте ошибки в проблемной процедуре.
6️⃣ Сохраните и закройте Excel.
7️⃣ Переместите файл Personal.xlsb обратно в папку XLSTART.

💡 Если файл Personal.xlsb окажется поврежденным, его на 2 шаге можно просто удалить и, после перезагрузки, создать новый.

#VBA #Excel #XLSTART #Personalxlsb #ЛичнаяКнигаМакросов
👍31
📖 Открыть сайт или файл для просмотра

Самый простой способ открыть сайт или файл для просмотра из кода VBA Excel - использовать метод Workbook.FollowHyperlink. 🚀

🖊 Запись метода можно сделать в двух вариантах:
🔹 ThisWorkbook.FollowHyperlink Address:="https://www.travelpayouts.com/ru/?marker=95707.tg"
🔹 ThisWorkbook.FollowHyperlink ("https://www.travelpayouts.com/ru/?marker=95707.tg")

Я предпочитаю скобки. Хоть немного, но покороче 🙂.

📌 Примеры

1️⃣ Открываем сайт:
Sub OpenSite()
On Error Resume Next
ThisWorkbook.FollowHyperlink _
("https://vremya-ne-zhdet.ru/rabota-v-internete/travelpayouts-partnerskaya-programma/")
End Sub


2️⃣ Открываем файл:
Sub OpenFile()
On Error Resume Next
ThisWorkbook.FollowHyperlink _
("C:\Test\Текстовый документ.txt")
End Sub


💡 Примечания
🔹 Оператор On Error Resume Next необходим, чтобы завершить процедуру без ошибки, если указанный сайт или файл не существует.
🔹 В комментариях на сайте писали, что метод Workbook.FollowHyperlink не работает в VBA Excel 2007. Возможно, это частный случай.

#VBA #ExcelVBA #Workbook #FollowHyperlink #ОткрытьСайт #ОткрытьФайл
👍3
🏁 Добавление узора в ячейку

Добавление узора (штрихового рисунка) в ячейку осуществляется с помощью свойства Range.Interior.Pattern.

💡 Свойство Interior объекта Range возвращает объект Interior (внутренняя область диапазона), а свойство Pattern объекта Interior задает шаблон узора ячейки (диапазона) или возвращает его числовое значение.

Range.Interior.Pattern = ConstantXlPattern

где ConstantXlPattern – константа из коллекции XlPattern, задающая шаблон узора (штрихового рисунка).

🛠 Константы XlPattern с шаблонами узоров (штриховых рисунков) на изображении ниже.

#VBA #ExcelVBA #Range #Pattern #Ячейка #Узор
🔥1
📌 Пример
Вставка узора «Шахматная доска» в диапазон A1:C3:
Sub Primer1()
Range("A1:C3").Interior.Pattern = xlPatternChecker
End Sub
🔥1
🏁 Украшение узора в ячейке

Штриховой рисунок можно украсить цветом (оттенком), за который отвечает свойство PatternThemeColor объекта Interior.

Range.Interior.PatternThemeColor = ConstantXlThemeColor

где ConstantXlThemeColor – константа из коллекции XlThemeColor, задающая цвет узора (штрихового рисунка).

🛠 Константы XlThemeColor с оттенками для узоров (штриховых рисунков) на изображении ниже.

#VBA #ExcelVBA #Range #PatternThemeColor #Ячейка #УзорЯчейки
🔥1
В начале таблицы нет ошибок. Это разработчики пошутили или начудили 🤣: xlThemeColorDark соответствует оттенку Светлый, а xlThemeColorLight соответствует оттенку Темный.👏

📌 Примеры
Присвоение узору «Шахматная доска» в диапазоне A1:C3 из примера выше оттенков Темный2 и Светлый2:
Sub Primer2()
Range("A1:C3").Interior.PatternThemeColor = xlThemeColorLight2 'Темный2
End Sub

Sub Primer3()
Range("A1:C3").Interior.PatternThemeColor = xlThemeColorDark2 'Светлый2
End Sub
🔥1
Использование галочки в ячейке Excel в качестве переключателя.

Выбор позиции в списке

Вставка галочки в ячейке слева от выбранной позиции из списка с очисткой предыдущего выбора.

📌 Код VBA Excel
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Проверяем, что выбрана одна ячейка
If Target.Cells.Count > 1 Then Exit Sub

'Задаем диапазон для вставки галочки
Dim rng As Range
Set rng = [A1:A5]

'Проверяем, входит ли выбранная ячейка в указанный диапазон
If Not Intersect(Target, rng) Is Nothing Then
rng.ClearContents 'Очищаем диапазон от старой галочки
Target.Value = ChrW(10004) 'Вставляем галочку в выбранную ячейку
End If
End Sub


💡 Примечания
🔹 Код размещается в модуле листа.
🔹 Функция ChrW возвращает символы Unicode
🔹 ChrW(10004) возвращает галочку.
🔹 Проверено в Excel 2016.

#VBA #ExcelVBA #Выбор #Позиция #Галочка
🔥1
📅 Вставка текущей даты в ячейки Excel

Вставляем текущую дату в заданном формате в ячейки Excel сочетанием клавиш. 🚀

📌 Код для вставки текущей даты в активную ячейку:
Sub InsertCurrentDate()
' Вставляем текущую дату в активную ячейку
ActiveCell.Value = Format(Date, "dd.mm.yyyy")
End Sub


1️⃣ Скопируйте процедуру InsertCurrentDate в стандартный модуль Личной книги макросов.
2️⃣ Перейдите из редактора VBA в Excel, сохраните текущую книгу и откройте окно "Макрос": Разработчик ➔ Макросы.
3️⃣ В списке макросов выберите процедуру PERSONAL.XLSB!InsertCurrentDate и нажмите кнопку "Параметры".
4️⃣ В поле "Сочетание клавиш:" впишите букву "й" (или другую свободную) и нажмите 🆗.
5️⃣ Сохраните текущую книгу и вставляйте текущую дату в ячейки Excel сочетанием клавиш Ctrl+й.

💡 Работа сочетания клавиш зависит от раскладки клавиатуры: если вы назначите - "й", будет работать только сочетание Ctrl+й, сочетание Ctrl+q работать не будет, и наоборот.

#VBA #ExcelVBA #Date #Ячейка #Дата #СочетаниеКлавиш
👍1
✏️ Редактирование текста в ячейке из кода VBA
Программное редактирование текста в ячейке с помощью VBA Excel.

📌 Примеры

1️⃣ Добавление текста в начало строки с заменой первой буквы:
Sub Primer1()
Dim obj As Object
Range("A1") = "Короткий текст"
'Превращаем "Короткий текст" в "Очень короткий текст"
Range("A1").Characters(1, 1).Insert ("Очень к")
End Sub

💡 В Characters(1, 1) первая цифра означает, что "курсор" ставится перед первым знаком текста в ячейке, в вторая цифра означает, что выбирается один знак после точки вставки ("курсора"), который будет замещен вставляемой строкой.

2️⃣ Добавление текста в середину строки перед 9 знаком:
Sub Primer2()
Dim obj As Object
Range("A1") = "Короткий текст"
Range("A1").Characters(9, 0).Insert (", но не очень,")
End Sub

💡 В Characters(9, 0) первая цифра означает, что "курсор" ставится перед 9 знаком текста в ячейке, в вторая цифра означает, что дополнительный текст будет вставлен, начиная с точки вставки, без замещения каких-либо знаков существующей строки.

#VBA #ExcelVBA #Range #Characters #Ячейка #Редактирование
👍5
🚀 Создание и распаковка ZIP-архива с помощью VBA Excel

С помощью VBA можно легко создавать ZIP-архивы и распаковывать их без сторонних программ.

📦 Создание ZIP-архива:
Sub CreateZipArchive()
Dim oShell As New Shell32.Shell
Dim oSourceFolder As Shell32.Folder
Dim oZipFolder As Shell32.Folder
Dim sourceFolder As String
Dim zipFile As String
Dim startTime As Double
Dim timeoutSeconds As Double

' Укажите свои пути
sourceFolder = "C:\Test\Лагенария\"
zipFile = "C:\Test\Лагенария.zip"

' Проверка исходной папки
Set oSourceFolder = oShell.Namespace(sourceFolder)
If oSourceFolder Is Nothing Then
MsgBox "Исходная папка '" & sourceFolder & "' не найдена или недоступна!", vbExclamation
Exit Sub
End If

' Создаем архив
On Error Resume Next
If Dir(zipFile) = "" Then
CreateObject("Scripting.FileSystemObject").CreateTextFile(zipFile).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
If Err.Number <> 0 Then
MsgBox "Ошибка при создании ZIP-файла: " & Err.Description, vbCritical
Exit Sub
End If
End If
On Error GoTo 0

' Проверка ZIP-файла
Set oZipFolder = oShell.Namespace(zipFile)
If oZipFolder Is Nothing Then
MsgBox "Не удалось создать или открыть ZIP-архив!", vbCritical
Exit Sub
End If

' Добавляем файлы
oZipFolder.CopyHere oSourceFolder.Items

' Ждем завершения с тайм-аутом
startTime = Timer
timeoutSeconds = 30
Do Until oZipFolder.Items.Count = oSourceFolder.Items.Count
Application.Wait (Now + TimeValue("0:00:01"))
If Timer - startTime > timeoutSeconds Then
MsgBox "Тайм-аут: процесс архивации не завершился за " & timeoutSeconds & " секунд.", vbExclamation
Exit Sub
End If
Loop

MsgBox "ZIP-архив успешно создан! (" & oZipFolder.Items.Count & " элементов)", vbInformation
End Sub


🛠 Настройка:
1️⃣ Откройте VBA Editor (Alt + F11).
2️⃣ Перейдите в Tools → References.
3️⃣ Подключите библиотеку Microsoft Shell Controls And Automation.
4️⃣ Замените пути на свои и протестируйте код.

💡 Примечания
🔹 Код может быть значительно короче, но данный код учитывает больше возможных ошибок.
🔹 Для объектов Shell используется ранняя привязка (для этого потребовалось подключить библиотеку Microsoft Shell Controls And Automation) — мне не удалось заставить его работать с поздней привязкой на своем компьютере.

#VBA #ExcelVBA #ZIP #Архив #Создание
👍3
📂 Распаковка ZIP-архива:
Sub ExtractZipArchive()
Dim oShell As Shell32.Shell
Dim oZipFolder As Shell32.Folder
Dim oExtractFolder As Shell32.Folder
Dim zipFile As String
Dim extractPath As String
Dim startTime As Double
Dim timeoutSeconds As Double

' Указываем пути
zipFile = "C:\Test\Лагенария.zip"
extractPath = "C:\Test\ЛагенарияКопия\"

' Инициализация Shell
Set oShell = New Shell32.Shell

' Проверка существования архива
If Dir(zipFile) = "" Then
MsgBox "Архив '" & zipFile & "' не найден!", vbExclamation
Exit Sub
End If

' Проверка существования папки для распаковки, создание, если не существует
On Error Resume Next
If Dir(extractPath, vbDirectory) = "" Then
MkDir extractPath
If Err.Number <> 0 Then
MsgBox "Не удалось создать папку для распаковки: " & Err.Description, vbCritical
Exit Sub
End If
End If
On Error GoTo 0

' Устанавливаем объекты
Set oZipFolder = oShell.Namespace(zipFile)
If oZipFolder Is Nothing Then
MsgBox "Не удалось открыть ZIP-архив!", vbCritical
Exit Sub
End If

Set oExtractFolder = oShell.Namespace(extractPath)
If oExtractFolder Is Nothing Then
MsgBox "Не удалось открыть папку для распаковки!", vbCritical
Exit Sub
End If

' Извлекаем содержимое
oExtractFolder.CopyHere oZipFolder.Items

' Ждем завершения с тайм-аутом
startTime = Timer
timeoutSeconds = 30
Do Until oExtractFolder.Items.Count = oZipFolder.Items.Count
Application.Wait (Now + TimeValue("0:00:01"))
If Timer - startTime > timeoutSeconds Then
MsgBox "Тайм-аут: процесс распаковки не завершился за " & timeoutSeconds & " секунд.", vbExclamation
Exit Sub
End If
Loop

MsgBox "Архив успешно распакован! (" & oExtractFolder.Items.Count & " элементов)", vbInformation
End Sub


#VBA #ExcelVBA #ZIP #Архив #Распаковка
👍3
🖥 Форма на весь экран в VBA Excel
Хотите, чтобы UserForm автоматически разворачивалась на весь экран при открытии? Это можно сделать двумя простыми способами! 🚀

1️⃣ Пример с Application
Этот способ использует свойства Application для установки ширины и высоты формы.
Private Sub UserForm_Initialize()
With Application
.DisplayFullScreen = True 'Включаем полноэкранный режим
Me.Width = .Width 'Устанавливаем ширину формы
Me.Height = .Height 'Устанавливаем высоту формы
.DisplayFullScreen = False 'Отключаем полноэкранный режим
End With
End Sub


Плюсы:
✔️ Простая реализация без подгонки каких-либо коэффициентов.
✔️ Работает при любом разрешении и масштабировании экрана.
Минусы:
✖️ Мелькания программы Excel на экране при разворачивании и сворачивании.
✖️ В старых версиях Excel может не работать Application.DisplayFullScreen = True, но там можно попробовать Application.WindowState = xlMaximized.

2️⃣ Пример с WinAPI
Этот способ использует функцию API Windows для точного определения системных размеров экрана.
'Функция WinAPI размещается в стандартном модуле, в модуле формы она работать не будет
Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

'Эта процедура размещается в модуле формы
Private Sub UserForm_Initialize()
Dim k As Single
k = 1.99
With Me
.Width = GetSystemMetrics(0) / k 'Получаем ширину экрана
.Height = GetSystemMetrics(1) / k 'Получаем высоту экрана
End With
End Sub


Плюсы:

✔️ Отсутствие мельканий программы Excel на экране.
Минусы:
✖️ Требует использование функции WinAPI и применение коэффициента для подгонки размера формы под конкретный дисплей.

💡 Коэффициент необходим, чтобы учесть масштабирование экрана, которое часто установлено на 125%, 150% или выше. Возможно, что-то еще влияет, кроме масштабирования. У меня масштабирование - 150%, но форма разворачивается на весь экран при k = 1.99, а не при k = 1.5.

#VBA #ExcelVBA #Масштабирование #Форма #Экран
👍2
🔥 Функциональные клавиши в Excel (F1–F12) и полезные сочетания

Использование функциональных клавиш (F1–F12) — это способ ускорить выполнение в Excel различных задач. Функциональные клавиши работают как самостоятельно, так и в сочетании с другими клавишами (Alt, Ctrl, Shift).

Функции клавиш F1–F12

🔹 F1 – Открывает справку Excel.
🔹 F2 – Редактирует активную ячейку (курсор перемещается в строку формул).
🔹 F3 – Отображает диалоговое окно "Вставка имени" (если имена определены).
🔹 F4 – Переключает в формулах тип ссылок ($A$1 → A$1 → $A1 → A1).
🔹 F5 – Открывает окно "Перейти" для быстрого перехода к ячейке или диапазону.
🔹 F6 – Переключает фокус между панелями (лист, строка формул, панель вкладок).
🔹 F7 – Запускает проверку орфографии.
🔹 F8 – Включает режим выделения (позволяет расширять выделение стрелками).
🔹 F9 – Пересчитывает все формулы в книге (полезно при ручном режиме расчета).
🔹 F10 – Активирует меню (аналог Alt).
🔹 F11 – Создает новый график на отдельном листе из выделенного диапазона.
🔹 F12 – Открывает окно "Сохранить как".

💫 Полезные сочетания с функциональными клавишами

🔹 Ctrl + F1 – Сворачивает/разворачивает ленту (Ribbon).
🔹 Ctrl + F2 – Открывает окно предварительного просмотра перед печатью.
🔹 Ctrl + F3 – Открывает диспетчер имен для управления именованными диапазонами.
🔹 Ctrl + F4 – Закрывает текущую книгу, не выходя из Excel.
🔹 Ctrl + F6 – Переключается между открытыми книгами Excel.
🔹 Ctrl + F9 – Сворачивает окно текущей книги в значок на панели задач.
🔹 Ctrl + F10 – Разворачивает/сворачивает окно текущей книги.
🔹 Alt + F4 – Закрывает Excel полностью.
🔹 Alt + F11 – Открывает редактор VBA для написания макросов.
🔹 Shift + F2 – Добавляет или редактирует примечание к ячейке.
🔹 Shift + F3 – Открывает окно "Вставка функции" (помощник для формул).
🔹 Shift + F5 – Запускает поиск (аналог Ctrl + F).
🔹 Shift + F11 – Добавляет новый лист в книгу.

💡 Если функциональные клавиши не работают, проверьте, не включен ли режим Fn Lock на вашей клавиатуре (особенно на ноутбуках).

#Excel #Горячие #Функциональные #Клавиши #Сочетания
👍9
🎁 Поздравление-сюрприз от VBA Excel

Хотите оригинально поздравить с каким-нибудь праздником коллегу по работе? 🎈 Это можно организовать с помощью VBA Excel. 🚀

Как это работает?

Поздравляемый включает свой компьютер, на котором после загрузки Windows, из папки "Автозагрузка" открывается файл Excel с поздравлением (форма с поздравлением разворачивается на весь экран). 🖥

🛠 Что для этого нужно?

1️⃣ Создайте файл Excel с поддержкой макросов.
2️⃣ Сохраните его в папку "Автозагрузка". Обычно, путь к ней таков: C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.
3️⃣ Откройте редактор VBA, создайте пользовательскую форму и добавьте на нее три элемента Label.
4️⃣ Вставьте в модули книги и формы следующие процедуры:

' В модуль книги
Private Sub Workbook_Open()
UserForm1.Show
End Sub

'В модуль формы
Private Sub UserForm_Initialize()
Dim colForm&, colTxt&, c1$, c2$, c3$
colForm = RGB(0, 0, 255) 'Цвет формы (синий)
colTxt = RGB(255, 255, 255) 'Цвет текста (белый)
c1 = "Привет!" 'Заголовок
c2 = "Поздравляю с Днем рождения!!!" 'Поздравление
c3 = "Твой Комп" 'Подпись

With Application
.DisplayFullScreen = True
Me.Width = .Width
Me.Height = .Height
.DisplayFullScreen = False
End With

With Me
.Caption = ""
.BackColor = colForm
End With

With Label1
.Caption = c1
.BackColor = colForm
.TextAlign = fmTextAlignCenter
.Font.Size = 40
.ForeColor = colTxt
.Width = Me.Width
.Height = 50
.Top = Me.Height / 3
.Left = 0
End With

With Label2
.Caption = c2
.BackColor = colForm
.TextAlign = fmTextAlignCenter
.Font.Size = 50
.ForeColor = colTxt
.Width = Me.Width
.Height = 60
.Top = Me.Height / 2.4
.Left = 0
End With

With Label3
.Caption = c3
.BackColor = colForm
.TextAlign = fmTextAlignCenter
.Font.Size = 30
.ForeColor = colTxt
.Width = Me.Width
.Height = 40
.Top = Me.Height / 1.8
.Left = 0
End With
End Sub


5️⃣ Сохраните книгу.

💡 Примечания
🔹 Каждому элементу Label можно задать свой размер и цвет текста.
🔹 Другие варианты разворачивания формы на весь экран, если вдруг не получится с этим кодом, можно посмотреть здесь.

#VBA #ExcelVBA #UserForm #Форма #Поздравление
🔥5👍1
🔄 Работа с буфером обмена в VBA Excel

✖️ До Windows 8 в VBA Excel работали с буфером обмена через объект DataObject. Но в Windows 8 метод DataObject.PutInClipboard не работает правильно: если открыт хотя бы один экземпляр Проводника (папка), в буфер обмена записываются два квадратика. ◽️◽️☹️

В Windows 10 метод DataObject.PutInClipboard я не проверял, а в Windows 11 он работает корректно. Как работать с буфером обмена через DataObject смотрите на сайте. 🚀

🔥 Для работы с буфером обмена можно использовать следующие функции:
'Функция записи текста в буфер обмена
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


💡 Ячейки и диапазоны ячеек копируем и вставляем по-старинке:
Sub RangeCopyPaste()
'Копирование диапазона ячеек в буфер обмена
Range("A1:F5").Copy
'Вставка диапазона из буфера обмена на рабочий лист
ActiveSheet.Paste Range("A7")
'Очистка буфера обмена
Application.CutCopyMode = False
End Sub


#VBA #ExcelVBA #ClipBoard #Range #БуферОбмена #Диапазон
👍4
🎯 Расположение формы в окне Excel

Если при работе в Excel часто приходится обращаться к какой-либо форме, например с кнопками вызова макросов и/или открытия файлов, ее можно отобразить в немодальном окне. А для того, чтобы открытая форма не мешалась перед глазами, ее можно закрепить на постоянное место в окне рабочей книги. 📌

Наиболее подходящим местом для закрепления формы, по моему мнению, является верхний правый угол.

🛠 Как это работает?
🔹 При открытии книги, если активным является "Лист1", форма автоматически загружается и размещается в правом верхнем углу.
🔹 В открытой книге: при выборе листа "Лист1" - форма отображается, при выборе любого другого листа - форма закрывается.
🔹 При изменении размеров окна активной книги открытая форма будет перемещаться вслед за правым верхнем углом.

1️⃣ В стандартный модуль:
Sub UserFormPosition()
With UserForm1
'Задаем расположение формы (в правом верхнем углу)
.Top = ActiveWindow.Top + 40
.Left = ActiveWindow.Left + ActiveWindow.Width - .Width - 20
End With
End Sub

🔸 Числовые коэффициенты отодвигают форму от краев окна. Сверху - чтобы не были закрыты кнопки управления окном приложения, а справа - просто так, для лучшего вида.

2️⃣ В модуль листа "Лист1":
'Загружаем форму при активации листа "Лист1"
Private Sub Worksheet_Activate()
UserForm1.Show 0
Call UserFormPosition
End Sub

'Выгружаем форму при деактивации листа "Лист1"
Private Sub Worksheet_Deactivate()
Unload UserForm1
End Sub


3️⃣ В модуль книги:
'Загружаем форму при открытии книги, если нужно
Private Sub Workbook_Open()
If ActiveSheet.Name = "Лист1" Then
UserForm1.Show 0
Call UserFormPosition
End If
End Sub

'Перемещаем форму при изменении размеров окна Excel
Private Sub Workbook_WindowResize(ByVal Wn As Window)
Call UserFormPosition
End Sub


💡 Примечания
🔹 При перемещении окна Книги в пределах экрана вручную, форма будет оставаться неподвижной. Чтобы вернуть ее в свой правый верхний угол, достаточно выбрать другой лист и вернуться на "Лист1".
🔹 Проверено в Excel 2016. Я работал с такой формой в Excel 2000, но там устанавливал расположение вручную, выбрав в свойствах формы: StartupPosition = 0 - Manual.

#VBA #ExcelVBA #Форма #Положение #Расположение
🔥3👍2