Перейти к содержанию
На чтение 3 мин Опубликовано 27.10.2015
Это краткое пошаговое руководство предназначено для начинающих пользователей и рассказывает о том, как вставлять код VBA (Visual Basic for Applications) в книгу Excel, и как запускать вставленный макрос для выполнения различных задач на этом листе.
Большинство пользователей не являются гуру Microsoft Office. Они могут не знать всех тонкостей работы той или иной функции, и не смогут ответить на вопрос, как отличается скорость выполнения макроса VBA в Excel 2010 и 2013. Многие просто используют Excel, как инструмент для обработки данных.
Предположим, нужно изменить данные на листе Excel определённым образом. Мы немало погуглили и нашли макрос VBA, который решает эту задачу. Однако, наше знание VBA оставляет желать лучшего. Вот тут-то и придёт на помощь пошаговая инструкция, с помощью которой мы сможем использовать найденный код.
- Вставляем код VBA в книгу Excel
- Запускаем макрос VBA в Excel
Вставляем код VBA в книгу Excel
В этом примере мы будем использовать VBA макрос, который удаляет переносы строк из ячеек текущего листа Excel.
-
- Открываем рабочую книгу в Excel.
- Нажатием Alt+F11 вызываем окно редактора Visual Basic
- На панели Project-VBAProject кликаем правой кнопкой мыши по имени рабочей книги (в левой верхней части окна редактора) и в контекстном меню выбираем Insert > Module.
- Копируем код VBA (с веб-страницы или из другого источника) и вставляем его в правую область редактора VBA (окно Module1).Подсказка: Как увеличить скорость выполнения макроса?
В самом начале кода Вашего макроса VBA должны содержаться строки:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Если таких строк нет, то обязательно добавьте следующие строки в свой макрос, чтобы он работал быстрее (см. рисунок выше):
- В самое начало кода после всех строк, начинающихся с Dim (если строк, начинающихся с Dim нет, то вставляем сразу после строки Sub):
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
- В самый конец кода, перед End Sub:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Эти строки, как можно понять из их содержания, отключают обновление экрана и пересчёт формул рабочей книги перед выполнением макроса. После выполнения кода эти параметры снова включаются. Данный приём приводит к ускорению выполнения макроса от 10% до 500% (да, макрос может работать в 5 раз быстрее, если манипуляции над ячейками происходят без лишних остановок).
- В самое начало кода после всех строк, начинающихся с Dim (если строк, начинающихся с Dim нет, то вставляем сразу после строки Sub):
- Сохраняем рабочую книгу, как книгу Excel с поддержкой макросов. Для этого нажмите Ctrl+S и в окне с предупреждением Следующие компоненты невозможно сохранить в книге без поддержки макросов (The following features cannot be saved in macro-free workbook) нажмите Нет (No).Откроется диалоговое окно Сохранение документа (Save as). В выпадающем списке Тип файла (Save as type) выбираем Книга Excel с поддержкой макросов (Excel macro-enabled workbook) и нажимаем кнопку Сохранить (Save).
- Нажимаем Alt+Q, чтобы закрыть окно редактора VBA и вернуться к книге Excel.
Запускаем макрос VBA в Excel
Чтобы запустить только что добавленный макрос, нажмите Alt+F8. Откроется диалоговое окно Макрос (Macro). В списке Имя макроса (Macro name) выберите нужный макрос и нажмите кнопку Выполнить (Run).
Оцените качество статьи. Нам важно ваше мнение:
Время на прочтение
7 мин
Количество просмотров 312K
Приветствую всех.
В этом посте я расскажу, что такое 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».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Sub FormatPrice()End Sub
Напишем Hello World:
Sub FormatPrice()
MsgBox "Hello World!"
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
' Exit Sub ' Это значит "выйти из процедуры"
MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As Integer) As Integer
' Exit Function
LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
Dim s1 As String, s2 As String
s1 = "str1"
s2 = "str2"
If s1 <> s2 Then
foo "123", "456" ' Скобки при вызове процедур запрещены
End IfDim 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 iDim x As Double
x = Val("1.234") ' Парсинг чисел
x = x + 10
MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
x = 5 / 0
MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
x = 5 / 0
MsgBox "OK!"
GoTo ne
Err:
MsgBox
"Err!"
ne:
On Error GoTo 0 ' Отключаем обработку ошибок
' Циклы бывает, какие захотите
Do While True
Exit DoLoop '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' Двухмерный массив.
' Можно также менять размеры командой ReDim (Preserve) - см. google
Dim arr(1 to 10, 5 to 6) As Integer
arr(1, 6) = 8Dim coll As New Collection
Dim coll2 As Collection
coll.Add "item", "key"
Set coll2 = coll ' Все присваивания объектов должны производится командой Set
MsgBox coll2("key")
Set coll2 = New Collection
MsgBox coll2.Count
End Sub
Грабли-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, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
- Считали группы из очередной строки.
- Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
- Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
- После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer) As String
GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As Integer) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As Integer) As Range
Set GetCell = Range(GetCol(Col) + CStr(Row))
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
Sheets(
"data").Activate
I = 2
Do While True
If GetCell(0, I).Value = "" Then Exit Do
' ...
I = I + 1
Loop
End Sub
Теперь надо заполнить массив Groups:
На месте многоточия
Dim I2 As Integer
For I2 = 1 To GroupsCount
Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
PrGroups(I2) = Groups(I2)
Next I2
I = I + 1
И создать заголовки:
На месте многоточия в предыдущем куске
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
Sub AddHeader(Ty As Integer, Name As String)
GetCellS("result", 1, CurRow).Value = Name
CurRow = CurRow + 1
End Sub
Теперь надо перенести всякую информацию в result
For I2 = 0 To DataCount - 1
GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets("Result").Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Sub AddHeader(Ty As Integer, Name As String)
Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
' Чтобы не заводить переменную и не писать каждый раз длинный вызов
' можно воспользоваться блоком With
With GetCellS("result", 0, CurRow)
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
Select Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
Case 2 ' Производитель
.Font.Size = 12
End Select
.HorizontalAlignment = xlCenter
End With
CurRow = CurRow + 1
End Sub
Уже лучше:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Sub AddHeader(Ty As Integer, Name As String)
With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
.Merge
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
.HorizontalAlignment = xlCenterSelect 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) — тут скобки нужны постоянно.
Как в Excel 2010 или 2013 вставить и запустить код VBA – руководство для начинающих
Смотрите такжеAleksey1404 :-), то его назад, и взгляни что от него и даже выделено описать одной строкой.повторюсь: моя функция Приведите кодNext .Name Then: _Щелкните Популярное и
в меню должен быть введён книге. Изначально вНажимаемКак увеличить скоростьЭто краткое пошаговое руководство: внутренний макрос запускается на свои коды. хочет компилятор при какая. Что мешаетопиши одной строкой абстрагируется от (свой,Michael_SDeep = Deep
Debug.Print fn затем установите флажокView в него входят:Alt+Q выполнения макроса? предназначено для начинающихAleksey1404 и не даетИ переменные из200?’200px’:»+(this.scrollHeight+5)+’px’);»>Option Expicit объявить? Это же алгоритм сортировки (без
- чужой и т.п.).: Vitalts, Все, разобрался.
- — 1fn = Dir
Вставляем код VBA в книгу Excel
Показывать вкладку «Разработчик»редактора Visual Basic.Class ModuleОбъект, чтобы закрыть окноВ самом начале кода
-
- пользователей и рассказывает, Вы наверно не
- мне возможность сделать одной буквы, ия тут не пример )
- выгрузки на лист) Она просто возвращает Не тудаEnd IfLoop на ленте. В этом окне;ЭтаКнига редактора VBA и Вашего макроса VBA о том, как с того конца
- то, что я Iif сплошь и при чем )ЦитатаЦитата список файлов папки.Set wb = Workbooks.Open(ActiveWorkbook.PathIf Deep =End WithПримечание. Лента является отображаются все переменные,
Если нужно создать диалоговое(ThisWorkbook), привязанный к вернуться к книге
должны содержаться строки:
вставлять код VBA
начали программу писать хочу с ним рядом, и ещеЦитата(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>У каждого свои(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Что легче можно
- При желании может & «» & -1 ThenНу и собственно, частью интерфейса «Пользовательский объявленные в текущей окно для взаимодействия книге Excel; Excel.Application.ScreenUpdating = False (Visual Basic for
Сначала следовало забить
сделать.
- куча всего, что(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты упорно пытаешься понятия «правильности» будет понять и
делать это рекурсивно.
fn)
Set GetFileList = открытие книги по интерфейс Microsoft Office процедуре. Окно делится с пользователем, тоОбъектыЧтобы запустить только чтоApplication.Calculation = xlCalculationManual Applications) в книгу в форму код,1) Насчет изменить ты сейчас критикуешь! доказать всем участникамвообще-то нет отредактировать?Функцию можно подключитьвпихивал. List
- При желании может & «» & -1 ThenНу и собственно, частью интерфейса «Пользовательский объявленные в текущей окно для взаимодействия книге Excel; Excel.Application.ScreenUpdating = False (Visual Basic for
- названию файла и Fluent». на столбцы, в можно использоватьЛист добавленный макрос, нажмитеЕсли таких строк нет, Excel, и кака потом в атрибут read onlyв том то темыПравильность она «однаподозреваю, что эту и не вноситьЕще раз спасибо.Set List = папки активной:В меню Справка которых содержатся имя,Userform(Sheet), привязанные кAlt+F8 то обязательно добавьте запускать вставленный макрос прятки с не знаю, не и дело. Яя отстаиваю свою
- на всех мы длинную строку будет существенных изменений вnerv NothingКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>Set wb =
Запускаем макрос VBA в Excel
выберите пункт Справка: значение и тип. каждому листу текущей. Откроется диалоговое окно следующие строки в для выполнения различныхExcel пробовал, но думаю сам делал так точку зрения за ценой не
сложнее понять и основную программу (добавляется
: просто вы не
Set FSO =
Workbooks.Open(ActiveWorkbook.Path & «»
office-guru.ru
Редактор Visual Basic в Excel
Microsoft Visual Basic. каждой переменной, иДвойной щелчок мышью по рабочей книги Excel.Макрос свой макрос, чтобы задач на этом`ем играть. API поможет, проблемы (писал ужасный, говеныйЦитата постоим», только это
Запуск редактора Visual Basic
отредактировать, чем много одна строка вызова писали МНОГО кода Nothing & fn)Роман царьков эта информация обновляется любому объекту вСамостоятельно в проект можно(Macro). В списке он работал быстрее листе.Странно, у меня конечно с сетевыми код) и не(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>и правда думаешь, не все понимают правильных/правильно_отформатированных строк функции).
Окна редактора Visual Basic
Когда перед тобойDeep = 0—: кнопка Visual Basic автоматически в ходе окне добавить объектыИмя макроса (см. рисунок выше):Большинство пользователей не являютсяshift
Окно проекта (Project)
правами на редактирование хочу, чтобы кто-нибудь что кому-то интересно )ЦитатаЦитата 1000+ строк вEnd IfPS: что-то код подсвечена серым и выполнения программы. ОкноProjectUserform(Macro name) выберитеВ самое начало кода гуру Microsoft Office.
- позволяет открыть файл файла. еще наступал на искать все твои
- Цитата(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ведро картошки можно(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Я уж не одном только модуле,End Function
при каждом релоаде не работает какLocalsоткрывает соответствующее окно, нужный макрос и после всех строк, Они могут не в2) Запретить выполнение эти грабли. Это сообщения выискивая в(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Саш, мы уже отвезти на мопеде, говорю о размере нет желания разбиратьвпрочем, уже вижу по разному кажет,
быть?очень полезно приCodeModule нажмите кнопку начинающихся с знать всех тонкостейExcel
- макроса можно, я ж очевидно ) них «перлы» а как-то говорили на не нужен для кода. и додумывать. Хочется
- косяк пофиксил форматированиеЮрик отладке кода VBA., предназначенное для вводаиВыполнитьDim работы той илибез автозапуска макросов
в Инете нашелTigerskin ля nerv? эту тему; твои этого БелАзКачество кода не просто читать. Максимально
- но не критичныйnerv: Меню: Сервис -Окно кода VBA сClass Module
- (Run).(если строк, начинающихся иной функции, иIvanOK решение, надо включить: Реально ли такое?
- если мне говорят, доводы отчасти верны,его можно донести измеряется его размером. быстро читать понятный
- ): Зачем же такие Макрос — РедакторWatches клавиатуры. На одном
- . Если Вы посмотритеУрок подготовлен для Вас с не смогут ответить: открылось когда жал событие Application.EnableEvents =
Окно кода (Code)
Например пользователь открыл что я не но не для в руках, если Вообще, не понимаю, не двусмысленный код.Vitalts извороты? не проще Visual Basic.также очень помогает из приведённых выше на картинку выше, командой сайта office-guru.ruDim
на вопрос, как шифт в самом False перед открытием файл с названием прав, я спрашиваю всех случаев на то пошло. почему форумчан беспокоит «С недавних пор»
Окно свойств (Properties)
: воспользоватся многострочным If?Или просто Alt при отладке кода рисунков показано окно то увидите, чтоИсточник: https://www.ablebits.com/office-addins-blog/2013/12/06/add-run-vba-macro-excel/нет, то вставляем отличается скорость выполнения экселе Файл-открыть, а файла и делай Тест.xls, расположенный на в чем, а
Окно отладчика (Immediate)
для каких случаев Речь не об размер (не только однострочный If яnervмой велосипед. Особо — F11. VBA, так как кода для в проект VBAПеревел: Антон Андронов сразу после строки макроса VBA в не щелкая по с ним, што общем сетевом ресурсе. не заведомо соглашаюсь мои доводы не этом. Как только этого) кода, если
не использую вообще, эээ, и вы не тестировал, ноСаня в нём можноModule1 для книгиАвтор: Антон АндроновSub
Окно переменных (Locals)
Excel 2010 и самому файлу))) хош :-) Включаю процедуру иЦитата верны? Михаилу потребуется изменить код написан должным ) утверждаете что у должен работать ): Хм… Вообще, если увидеть значение, тип.Book1.xlsmВ этой главе даётся): 2013. Многие простоIvanOKApplication.EnableEvents = False по ходу её
Окно отслеживания (Watches)
(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Растеряешь друзей.KuklP что-то в коде, образом? Подключили, забыли.Цитата меня извороты?200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Example() я не ошибаюсь, и контекст любогоПо мере ввода кодадобавлен объект очень краткий обзорApplication.ScreenUpdating = False используют Excel, как: при етом коде Application.Workbooks.Open «test.xls», False выполнения необходимо записатьт.е. если наши: Саш, ты посмотри ему придется ковырять Если хотите по(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>жалуется на Mask
Чем вам DirSet Folder =
- то в MS отслеживаемого выражения, которое
- VBA в окноModule редактора Visual BasicApplication.Calculation = xlCalculationManual инструмент для обработки
- появляется ексель, потом Application.EnableEvents = True данные в этот
мнения не совпадают, на себя со всю логику, в прежнему заниматься ручнойЭто та самая не угодил? GetFileList(«d:Contacts») Office есть такая
задаст пользователь. ЧтобыCode
с названием
в Excel. Если
В самый конец кода,
office-guru.ru
Как открыть visual basic через excel в office 2007?
данных. исчезает, потом появляется
Assassinys файл. Пользовательские изменения
то я уже стороны. Ты упорно т.ч. логику получения
обсфукацией, экономить на ошибка, о кот.Похоже, изначально не
End Sub фишка — макросы.
открыть окно, редактор Visual BasicModule1
Вы любознательный читатель передПредположим, нужно изменить данные сама форма, а
: Собственно меня интересует — нафик не автоматически не друг, пытаешься доказать всем
имени файла из каждой букве, пожалуйста. я говорил. Замените
правильно понял вас.’ —————————————- Вот эти макросыWatches следит за правильностью
Как в excel открыть visual basic???
. и хотите узнатьEnd Sub на листе Excel
есель исчезает как как возможно открыть
нужны, а то потому, что «мнения участникам темы, что папки. В моемЯ пишу универсальные Mask на Filter. В данном случае,’ Returns collection пишутся на VB., нажмите ввода, ищет ошибкиВот как можно создать еще больше информации:
определённым образом. Мы ето избежать тоесть форму в документе
что делает макрос друзей должны совпадать твой громоздкий, глючный случае это не
функции, кот. таскаюЦитата
Открыть файл excel. (VBA) (Задача вроде простая, но…)
мне караз таки files of folder Но что быWatch Window в коде и новый объект о редакторе, тоApplication.ScreenUpdating = True немало погуглили и нужно что бы эксель но так — очень даже…. всегда»? (это следует в таком виде требуется, т.к. вынесено
(использую) из проекта(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>В данном случае,
было удобнее воспользоваться’ Exel’ем открыть проект…
в меню выделяет код, которыйUserform при желании безApplication.Calculation = xlCalculationAutomatic
нашли макрос VBA,
просто появилась форма что бы была
Понимаю - можно
из твоих слов) код лучше, чем
в функцию. Если в проект. Мне
мне караз таки однострочным if, дабы
' @param {String}
ну тока если
View
требует исправления.
, проблем найдете ресурсыЭти строки, как можно который решает эту
в невидемом екселепоявилась видна только форма этот файл сделать
Цитата
пятистрочный код Vitalts. ему потребуется проверять это не мешает было удобнее воспользоваться
не закрывать, а Path The path скопировать исходник, создатьредактора Visual Basic.
В окнеModule с более подробным
понять из их
задачу. Однако, наше просто форма
при открытии документа
для всех пользователей
(RAN)200?'200px':''+(this.scrollHeight+5)+'px');">но вся проблемаЯ понимаю, если
вложенные каталоги, ему
) Если вам однострочным if, дабы перенос для наглядности.
to folder макрос и туда Также окно
Propertiesили
описанием.
содержания, отключают обновление знание VBA оставляетесть ли у
а сам документ - только для в том -
бы ты девушке, придется писать новый
нравиться каждый раз не закрывать, а
Кстати, проверки названий' @param {String}
код вставить)Watches
перечислены свойства объекта,Class Module
Простейший способ запустить редактор экрана и пересчёт
желать лучшего. Вот кого каки ето
был скрыт или чтения. Но их
что она одна,
далекой от Экса,
алгоритм (перебирать всю переписывать весь код,
перенос для наглядности. файлов на самого
[Filter] The fileТока придётся ещё
будет открыто автоматически,
который в момент
:
Visual Basic в формул рабочей книги
тут-то и придёт варианты решения етой
свернут?
на самом деле
но для всех это доказывал. Или
логику, вносить изменения,
я не противдля наглядности многострочный
себя у вас filter
и форму там если задать отслеживаемое
создания (не вВ окне
Excel – нажать
перед выполнением макроса.
на помощь пошаговая
проблемыаналитика много — этих разная!
ты всех нас отлаживать и т.п.Serge_007 If. В вашем нет.’ @return {Collection} чертить новую :) выражение.
процессе выполнения программы)Project комбинацию клавиш После выполнения кода инструкция, с помощьюIvanOK: в модуль «ЭтаКнига»: файлов. Прошу совета!!!
Не поверишь, есть дураками считаешь? всю программу, а: Точно так же
случае это неочевидность.Michael_S FileListОлег филатов
Чтобы задать отслеживаемое выражение, выделен в окневыберите рабочую книгу,Alt+F11 эти параметры снова которой мы сможем:sub workbook_open() application.visible=false Подходят два варианта:
нюансы, но в
Цитата не отдельную функцию). как и формул.Цитата
: Vitalts, в вашем’ —————————————-: Вот Вам руководство нужно: проекта. Эти свойства в которую нужно(то есть нажать включаются. Данный приём использовать найденный код.IvanOK yourform.show end sub
1. Макрос пользователя целом правильность одинаковая(nerv)200?’200px’:»+(this.scrollHeight+5)+’px’);»>для каких случаевЕсли вы предпочитаете Кстати и скорость(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати, проверки названий варианте не хочетPrivate Function GetFileList(ByVal по его использованию
Выделить выражение в редактируемом могут быть различными добавить объект, и
клавишу приводит к ускорениюВставляем код VBA в, На горе программист:Assassinys обламывает и «захватывает»Я общаюсь не
мои доводы не
закладывать фундамент дома тоже от длинны файлов на самого открывать файл (error) Path As String, (в приложении) : коде VBA. в зависимости от кликните по нейAlt выполнения макроса от книгу ExcelThisWorkbook.Windows.Application.Visible = False: не работает( права на изменение
только (и уже верны? — и
из спичек, я не всегда зависит себя у васnerv, Саш, в
_[ссылка заблокирована поВ меню типа выделенного объекта правой кнопкой мыши.и, удерживая её, 10% до 500%
Запускаем макрос VBA в UserForm1.ShowAssassinys
файла. Возможно ли? не столько) на правда думаешь, что не против, ноОднако ты прав,
нет. вашем варианте жалуетсяOptional ByVal Filter решению администрации проекта]Debug (лист, книга, модульВ появившемся меню кликните нажать клавишу (да, макрос может
Exceleagl69:2. Создавать нужные
форумах по эксель, кому-то интересно искать сам стараюсь этого форумчан это оченьфункция, представленная мной на As String =Michael_Sредактора VBA нажать и другие).
InsertF11 работать в 5В этом примере мы:Assassinys файлы (создавать макросами)
и почему то все твои сообщения не делать беспокоит
возвращает список файловMask «*») As Collection: Все, что обQuick WatchОкнои в раскрывшемся
). После этого откроется раз быстрее, если будем использовать VBAinv.DS, работает. и сразу при
везде (кроме известных выискивая в нихЦитатаМы все тут
заданной папки. Понятияи что онStatic List As этом файле известно.Immediate меню выберите окно редактора Visual манипуляции над ячейками макрос, который удаляет,Код надо поместить
этом ставить «только мне форумов по «перлы» а ля(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати и скорость хотим размер покороче «самого себя» здесь должен делать мне New Collection — он находится
Нажатьможно отобразить вUserform Basic, как показано происходят без лишних переносы строк из
inv.DS куда и сказано для чтения», при
эксель) правильность одна. nerv? Хочешь быть тоже от длинны и даже соревнуемся нет, т.к. функции не понятно. У
Static FSO As в той жеAdd редакторе Visual Basic, на картинке ниже. остановок). ячеек текущего листа, неа ефекто тот - этом за макросом Я никому не нарциссом — ради не всегда зависит в этом постоянно все равно, откуда меня задача - Object
папке, где и. через меню
Module Имейте ввиду, чтоСохраняем рабочую книгу, как Excel. же….в модуль «Эта книга»
должно оставаться право навязывал, даже не Бога. Растеряешь друзей.
зависит от алгоритма, в специально созданном она вызывается. Думаю, открыть файл.
Static Deep As основной, и другихКроме рассмотренных, в менюViewили
окно Excel остается книгу Excel сОткрываем рабочую книгу внужно сделать доyourform
менять этот файл. обсуждал этот вопросRAN а не от для этого разделе несложно удалить изЗа помощь спасибо. Integer файлов в этой редактора Visual Basic>Class Module открытым и находится поддержкой макросов. Для Excel. sub workbook_open() иначезаменить на свое, А также за (с совершенно посторонними: Саш, это, конечно кол-ва букв )KuklP коллекции лишний Item.
зы. кстати, везде,Dim SubFolder As папке нет. И в Excel существуетImmediate Window.
позади окна редактора. этого нажмитеНажатием ефект полюбому останется….
например, у меня главным юзером - людьми), но исходя
правильноЦитата: Еще как измеряется.KuklP где возможно, я Object что он -
ещё множество параметров
или нажатием комбинацииДля каждого из описанныхВ процессе работы в
Ctrl+SAlt+F11 потому что сначалаUserform1 то бишь мной из их сообщений,
но вся проблема(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Мы все тут Можно написать на
: Саша, ты из тоже предпочитаю однострочныйDim Folder As эксель. Ни имя и команд, используемых клавиш выше объектов предусмотрено редакторе Visual Basicи в окне
вызываем окно редактора открываеться ексель аAleksey1404
) Как это очевидно, что правильность в том - хотим размер покороче 10 страниц «правильного» пушки по воробьям If.
Object и расширение файла, при создании, выполненииCtrl+G специальное окно, в в Excel могут с предупреждением
Visual Basic потом он выполняет: Да заработало ,
сделать? одна. Это видно что она одна, и даже соревнуемся кода, а можно стреляешь. Миша пишет:VitaltsDim File As а также имя и отладке кода
. Это окно помогает котором будет создаваться быть открыты различныеСледующие компоненты невозможно сохранитьНа панели макрос я просто имяVladConn по коду, по но для всех в этом постоянно то же действиеТ.е. первый же: Object и расположение папки VBA. при отладке кода.
и храниться новый окна. Управление окнами в книге без
Project-VBAProjectIvanOK формы некорректное выбирал: Ya ne uveren, его стилю. Т.е.
разная! в специально созданном описать одной строкой.
файл с несовпадающимMichael_SIf FSO Is не известны.Урок подготовлен для Вас Оно выполняет роль
код VBA. Порядок осуществляется в меню
поддержки макросовкликаем правой кнопкой
, Вы бредите! Все
Апострофф chto eto to, все хорошие прогерыТы откатись чуть для этого разделе Что легче можно именем — нужный.
, что значит не
Nothing ThenВозможно? Если возможно
командой сайта office-guru.ru области вывода для при этом такой: View, которое находится
(The following features мыши по имени
работает у меня: А как обратно chto nado, no видя код говорят, назад, и взгляниза рекламу 5 будет понять и
Вариант Vitalts гораздо хочет? Без кодаSet FSO = — как?Источник: http://www.excelfunctions.net/Visual-Basic-Editor.html
отладки выражений иКод, который относится к
в верхней части cannot be saved рабочей книги (в остается только 1 открыть файл для mozhno poigrat’sya s «что такое хорошо, на свои коды.
Michael_S отредактировать? Ведро картошки лучше подходит для я не могу CreateObject(«Scripting.FileSystemObject»)nerv
Перевел: Антон Андронов позволяет вычислять отдельные рабочей книге, должен окна редактора VBA. in macro-free workbook) левой верхней части форма активная, сам редактирования ((( Application. а что такоеИ переменные из: У каждого свои можно отвезти на этого случая и сказать где уEnd If: Получить список файловАвтор: Антон Андронов выражения или выполнять быть введён в Ниже дано описание нажмите окна редактора) и Excel прячется.Aleksey1404AutomationSecurity плохо». Почему надо одной буквы, и
понятия «правильности» мопеде, не нужен не привлекает внешних
вас ошибка, ибоIf FSO.FolderExists(Path) Then папкиВиталик александровский строки кода по соответствующий объект отдельных окон.
Нет в контекстном менюinv.DS: Разве не очевидно?
100g делать так, а Iif сплошь иСаш, мы уже для этого БелАз. библиотек. Я уж
код замечательно работает.Set Folder =Vitalts: Alt плюс F11 одной.ЭтаКнигаОкно(No). выбираем
excelworld.ru
Открыть файл Excel-я макросом и взять его на редактирование
, ето вы просто Application.Visible = True
: Создаешь новую книгу, не иначе. рядом, и еще как-то говорили на Но если тебе не говорю о Ни один год FSO.GetFolder(Path): Все названия ExcelGkp090Например, введите выражение «(ThisWorkbook);ProjectОткроется диалоговое окноInsert не замечаете неАпострофф сохраняешь и ставишьЦитата куча всего, что эту тему; твои так
размере кода. пользуюсь подобными методами.For Each File файлов в папке
: VBA?jКод, который относится коткрывается в левойСохранение документа> мощном ПК, а: Может есть какое-то пароль на запись,(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Хочешь быть нарциссом ты сейчас критикуешь! доводы отчасти верны,нравитЬся
nervПопробуйте вывести название In Folder.Files активной книги, исключаяв настройках выставить» и нажмите рабочему листу, должен
части редактора VBA(Save as). ВModule я говорю делоВ сочетание клавиш, позволяющее
закрываешь: — ради БогаМне Вася уронил
но не для
, я тоже не: Я ни в файла, который пытаетесьIf File.Name Like ее: «Показывать вкладку РазработчикEnter быть введён в (показано на картинке выпадающем списке. продолжение темы:
открыть файл безWorkbooks.Add ActiveWorkbook.SaveAs Filename:=»C:Text1.xls»,Хоть Жераром Депардье молоток на голову! всех случаев. против кого не стреляю, открыть, возможно, лимит
Filter Then200?’200px’:»+(this.scrollHeight+5)+’px’);»> на ленте»– в результате соответствующий объект выше). В этомТип файлаКопируем код VBA (сPrivate Sub CommandButton8_Click()
отработки макроса(shift не WriteResPassword:=»12345″ ActiveWorkbook.CloseКогда надо или психом в
CyberForum.ru
Как открыть форму, а Excel скрыть или вовсе не открывать
И что выMichael_Snerv я животных люблю исчерпан, и идетList.Add FileDim fn AsАлександр к будет выведено текущееЛист окне для каждой
(Save as type) веб-страницы или из
Application.Visible = False помогает), т.к. у
редактировать открываешь так: белой рубашке с
ему сказали?: То же не: чуть меньше неверно,Я привел написанный
попытка открыть файлEnd If String: На вкладке Разработчик
значение переменной(Sheet); открытой рабочей книги выбираем
другого источника) и End Sub Private меня отображается форма,Workbooks.Open Filename:=»C:Text1.xls», WriteResPassword:=»12345″
пеной у ртаТы…, Вася…, неправ!!!!!!!!! работает чем полностью
мной ранее код с пустым названием.Next
With ActiveWorkbook щелкните Visual Basic.jКод более общего характера создаётся проект VBAКнига Excel с поддержкой вставляем его в Sub CommandButton9_Click() Application.Visible но я неR1001 (в ваших глазах).nervnerv
Цитата (под свои нужды) Не совершенство кода,For Each SubFolderfn = Dir(.PathЕсли Вкладка Разработчик
. должен быть введён
(VBA Project). Проект макросов правую область редактора = True End
могу добавить код: Я сталкивался с Моя точка зрения: об единственной опечатке: Захотелось кнопку «Ok»(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Можно написать на
Цитата написанного на скорую In Folder.SubFolders & «*.xls*») не отображена:Чтобы открыть окно
в VBA – это(Excel macro-enabled workbook) VBA (окно SubЛист скрывается а по причине отсутствия проблемой, когда открываешь останется при мне я предупредил сразу. нажать 10 страниц «правильного»
(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Т.е. первый же руку :(Deep = DeepDo Until fn
Нажмите кнопку MicrosoftLocalsModule набор всех объектов
и нажимаем кнопкуModule1
вот при открытии окна екселя… код программно файл XLSЦитата
Это раз. Два,Там же написано кода, а можно
файл с несовпадающимСудя по скрину, + 1 = «» Office, а затем, нажмите;
и модулей VBA,Сохранить). появляется еще какой не большой написан, (ну типа test.xls(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты откатись чуть кто-то не знает, «Переменная не определена» то же действие именем — нужный так и есть.
GetFileList SubFolder.Path, MaskIf fn <> — Параметры Excel.Locals WindowКод для нового объекта привязанных к текущей(Save).Подсказка: то лист пустой
CyberForum.ru
просто стало интересно)
Некоторые приложения пакета Microsoft Office, такие как Word, Excel, Access, Outlook, позволяют использовать для решения пользовательских задач язык программирования Visual Basic for Applications (VBA).
Для того чтобы использовать возможности VBA, макросы, процедуры и надстройки, написанные на этом языке программирования, необходимо чтобы компонент Visual Basic для приложений был установлен вместе с приложениями пакета Microsoft Office.
Как проверить установлен ли Visual Basic для приложений?
Самый простой способ проверить наличие либо отсутствие установленного VBA это попробовать его запустить. Запустить VBA можно сочетанием клавиш Alt+F11 на клавиатуре, либо кнопкой «Visual Basic» на вкладке «Разработчик». По умолчанию вкладка «Разработчик» отключена во всех приложениях пакета Microsoft Office, поэтому предварительно ее нужно отобразить в настройках ленты.
Итак, если VBA установлен, то нажатие горячих клавиш либо кнопки «Visual Basic» на ленте приложения приводит к появлению окна редактора Visual Basic на экране монитора. Выглядит редактор примерно так, как показано на изображении ниже.
В случае, если окно редактора не появилось, то компонент Visual Basic для приложений необходимо установить.
Как установить Visual Basic для приложений?
Чтобы установить компонент пакета Visual Basic for Applications, необходимо нажать кнопку Пуск, зайти в Панель управления/Программы и компоненты, выбрать программу Microsoft Office и нажать кнопку «Изменить», либо запустить установочный файл Setup.exe.
Далее выбрать опцию «Добавить или удалить компоненты», в параметрах установки выбрать компонент Visual Basic для приложений и доустановить его.
Другие материалы по теме:
В Excel 5 впервые была реализована поддержка нового макроязыка Visual Basic for Applications (VBA). Каждая копия Excel, начиная с 1993 года, содержит копию языка VBA, в явном виде не представленную на рабочих листах. VBA позволяет выполнять действия, которые обычно реализуются в Excel, но делает это намного быстрее и безукоризненно.
Если вам доводилось прежде сталкиваться с VBA-программами, то вы знаете, что очень часто они позволяют с помощью всего одного щелчка получать результаты, на которые в случае применения обычных средств Excel уходит несколько часов, а то и дней. Не стоит пугаться сложностей VBA, это ничуть не сложнее чем эмулятор psp. В 90% случаев программный код генерируется благодаря функции записи макросов, и только самые эффективные VBA-приложения пишутся вручную. В примерах раздела «Использование VBA для создания сводных таблиц» вы познакомитесь с нелегкой работой настоящего VBA-программиста.
По умолчанию VBA в Excel 2010 отключен. Прежде чем начать его использовать, нужно активизировать его в диалоговом окне Центр управления безопасностью (Trust Center). Выполните следующие действия.
- Выберите вкладку Файл (File) для перехода в окно представления Backstage.
- В находящейся слева навигационной панели щелкните на кнопке Параметры (Options). На экране появится диалоговое окно Параметры Excel (Excel Options).
- В диалоговом окне Параметры Excel выберите категорию Настройка ленты (Customize Ribbon).
- В находящемся справа списке отображается перечень основных вкладок Excel. По умолчанию флажок для вкладки Разработчик (Developer) не установлен. Установите его, после чего вкладка Разработчик отобразится на ленте. Щелкните на кнопке ОК для закрытия окна Параметры Excel.
- Щелкните на кнопке Безопасность макросов. На экране появится диалоговое окно Центр управления безопаность, в котором можно выбрать одну из четырех настроек, задающих уровень безопасности при работе с макросами. Названия этих настроек изменились по сравнению с названиями, применяемыми в версиях Excel 97 — Excel 2003. Соответствующие объяснения можно найти при описании следующего шага.
- Выберите один из следующих переключателей.
- Отключить все макросы с уведомлением (Disable all macros with notification). Эта настройка эквивалентна среднему уровню безопасности макросов в Excel 2003. При открытии рабочей книги, содержащей макросы, на экране появится сообщение о том, что в файле имеются макросы. Если вы хотите, чтобы эти макросы выполнялись, щелкните на кнопке Параметры (Options) и установите флажок Включить это содержимое (Enable). Это позволит VBA выполнять макросы, но вам придется явным образом разрешать их запуск при загрузке Excel.
- Включить все макросы (Enable all macros). Эта настройка эквивалентна низкому уровню защиты макросов в Excel 2003. Поскольку она разрешает выполнение абсолютно всех макросов, содержащихся в рабочей книге (в том числе и зловредных), разработчики из Microsoft настоятельно не рекомендуют ее использовать.
5. Выберите вкладку ленты Разработчик. Нам понадобится группа команд Код (Code), в состав которой входят кнопки Visual Basic Editor, Макросы (Macros), Запись макроса (Macro Recorder) и Безопасность макросов (Macro Security) (рис. 12.1).
Рис. 12.1. Доступ к инструментам VBA реализуется через вкладку Разработчик