Еще по теме:
1. Тема: Выгрузка с форматированием: задать диапазон выгружаемых данных
2. Тема: Пример записи / чтения с Microsoft Excel в VB
Способы передачи данных с Visual Basic в Excel
Источник: MSDN
В данной статье рассматриваются способы передачи данных в Microsoft Excel из приложения Microsoft Visual Basic. В статье также представлены преимущества и недостатки каждого из способов, что позволяет пользователю выбрать наиболее подходящий способ для конкретной ситуации.
Дополнительная информация
Чаще всего для передачи данных в книгу Excel используется программирование объектов (автоматизация). Этот способ обладает наибольшим спектром возможностей для указания местоположения данных в книге Excel, а также обеспечивает возможность форматирования книги и настройки различных параметров во время выполнения. Программирование объектов позволяет использовать для передачи данных несколько подходов:
- Передача данных по одной ячейке
- Передача массива данных в диапазон ячеек
- Передача набора записей ADO в диапазон ячеек с помощью способа CopyFromRecordset
- Создание в листе Excel объекта QueryTable, содержащего результаты запроса по источнику данных ODBC или OLEDB
- Передача данных в буфер обмена с последующей вставкой содержимого буфера обмена в лист Excel
Также существуют способы передачи данных в Excel, не требующие программирования объектов. При работе с серверным приложением рекомендуется освободить клиентов от большого объема обрабатываемых данных. Ниже приведены способы передачи данных, не использующие программирование объектов.
- Передача данных в текстовый файл, использующий запятые или знаки табуляции в качестве разделителей, который Excel впоследствии может разобрать на ячейки листа
- Передача данных на лист Excel с помощью ADO
- Передача данных в Excel с помощью динамического обмена данными (DDE)
В следующих разделах приведены дополнительные сведения о каждом решении.
Примечание. При использовании Microsoft Office Excel 2007 для сохранения книги Excel 2007 можно использовать новый формат файла (XSLX). Для этого найдите следующую строку кода в приведенных ниже примерах:
Visual Basic
oBook.SaveAs "C:Book1.xls"
Замените этот код следующей строкой кода:
Visual Basic
oBook.SaveAs "C:Book1.xlsx"
Кроме того, база данных «Борей» не входит в состав Office 2007 по умолчанию. Тем не менее базу данных «Борей» можно загрузить с веб-узла русской версии Microsoft Office Online.
Перенос данных по одной ячейке с помощью автоматизации
Автоматизация позволяет передавать данные на лист Excel по одной ячейке:
Visual Basic | ||
|
Передача данных по одной ячейке является оптимальным способом передачи небольших объемов данных. Этот способ позволяет помещать данные в любом месте рабочей книги и форматировать ячейки во время выполнения. Однако этот способ не рекомендуется применять при передаче больших объемов данных в книгу Excel. Каждый объект Range, получаемый во время выполнения, вызывает запрос к интерфейсу, поэтому такой способ передачи данных может оказаться очень медленным. Кроме того, в Microsoft Windows 95 и Windows 98 существует ограничение на запросы к интерфейсу, составляющее 64 КБ. При превышении лимита в 64 КБ сервер автоматизации (Excel) может перестать отвечать на запросы или может отображаться сообщение о нехватке памяти. Это ограничение для Windows 95 и Windows 98 рассматривается в следующей статье базы знаний Майкрософт:
216400 Автоматизация COM может привести к зависанию клиентского приложения в Win 95/98 (Эта ссылка может указывать на содержимое полностью или частично на английском языке).
Таким образом, передача данных по одной ячейке допустима только для небольших объемов данных. Для передачи больших объемов данных в Excel следует использовать один из способов, описанных ниже.
Примеры сценариев для автоматизации Excel см. в следующей статье базы знаний Майкрософт:
219151 Использование Visual Basic для автоматизации Microsoft Excel
Передача массива данных в диапазон ячеек листа с помощью программирования объектов
Массив данных можно одновременно передать в диапазон ячеек листа:
Visual Basic | ||
|
Передача большого объема данных с помощью массива происходит значительно быстрее, чем передача данных по одной ячейке. Обратите внимание на строку из приведенного выше сценария, которая одновременно передает данные в 300 ячеек листа:
Visual Basic
oSheet.Range("A2").Resize(100, 3).Value = DataArray
Эта строка представляет всего два запроса к интерфейсу (один для объекта Range, возвращаемого методом Range, и один для объекта Range, возвращаемого методом Resize). При этом при передаче данных по одной ячейке потребовалось бы 300 запросов к интерфейсу для объектов Range. Поэтому по возможности рекомендуется выполнять массовый перенос данных, чтобы сократить число запросов к интерфейсу.
Перенос набора записей ADO в диапазон листа с помощью автоматизации
В Excel 2000 появился метод CopyFromRecordset, позволяющий переносить наборы данных ADO (или DAO) в диапазон ячеек листа. Приведенный ниже сценарий является примером автоматизации Excel 2000, Excel 2002 или Office Excel 2003 для переноса содержимого таблицы Orders образца базы данных «Борей» с помощью метода CopyFromRecordset.
Visual Basic | ||
|
Примечание. При использовании версии базы данных «Борей» для Office 2007 необходимо заменить в примере следующую строку кода:
Visual Basic | ||
|
Замените эту строку кода следующей строкой:
Visual Basic | ||
|
В Excel 97 также имеется метод CopyFromRecordset, однако его можно использовать только для набора записей DAO. CopyFromRecordset в Excel 97 не поддерживает ADO.
Дополнительные сведения об использовании ADO и метода CopyFromRecordset см. в следующей статье базы знаний Майкрософт:
246335 Использование программирования объектов для передачи данных из набора записей в Excel
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Создание объекта QueryTable с помощью программирования объектов
Объект QueryTable представляет собой таблицу, содержащую данные, возвращенные из внешнего источника. При автоматизации Microsoft Excel для создания объекта QueryTable следует просто указать строку подключения к источнику данных OLEDB или ODBC в строке SQL. Далее Excel генерирует набор записей и вставляет его в указанное местоположение на листе. Использование объекта QueryTables обладает несколькими преимуществами по сравнению с использованием метода CopyFromRecordset:
- Созданием набора записей и его размещением на листе управляет Excel.
- Запрос можно сохранить в объекте QueryTable таким образом, чтобы в дальнейшем его можно было обновить и получить обновленный набор записей.
- При добавлении нового объекта QueryTable к листу можно переместить данные, уже находящиеся в ячейках листа, чтобы свободно разместить новые данные (см. свойство RefreshStyle).
Ниже приводится пример сценария, позволяющего автоматизировать Excel 2000, Excel 2002 или Office Excel 2003 для создания нового объекта QueryTable на листе Excel с данными из базы Northwind:
Visual Basic | ||
|
Использование буфера обмена
Буфер обмена Windows также может использоваться как механизм передачи данных на лист Excel. Чтобы вставить данные в несколько ячеек листа, можно скопировать строку, в которой столбцы разделены знаками табуляции, а строки – символами возврата каретки. В приведенном ниже сценарии показано, как Visual Basic может использовать буфер обмена для передачи данных в Excel:
Visual Basic | ||
|
Создание текстового файла с разделителями, который Excel может разобрать на строки и столбцы
Excel может открывать файлы с разделителями-запятыми и знаками табуляции и разбирать данные по ячейкам. Этим можно воспользоваться при необходимости передачи большого объема данных в лист Excel с минимальным использованием автоматизации. Этот подход рекомендуется для приложений типа клиент-сервер, поскольку текстовый файл может генерироваться серверным приложением. Затем текстовый файл можно открыть с помощью клиентского приложения, при необходимости используя автоматизацию.
Ниже приведен сценарий, иллюстрирующий создание текстового файла с разделителями-запятыми из набора записей ADO:
Visual Basic | ||
|
Примечание. При использовании версии базы данных «Борей» для Office 2007 необходимо заменить в примере следующую строку кода:
Visual Basic | ||
|
Замените эту строку кода следующей строкой:
Visual Basic | ||
|
Если файл имеет расширение CSV, Excel открывает его без отображения мастера импорта текста и по умолчанию принимает, что в файле используются разделители-запятые. Если же файл имеет расширение TXT, Excel автоматически разбирает его, используя в качестве разделителей знаки табуляции.
В приведенном выше примере запуск Excel осуществлялся с помощью оператора Shell, а имя файла использовалось как аргумент командной строки. А в этом примере автоматизация не использовалась. Однако при желании можно применить минимум автоматизации, чтобы открыть текстовый файл и сохранить его в формате книги Excel:
Visual Basic | ||
|
Дополнительные сведения об операциях ввода-вывода файлов из приложения Visual Basic см. в следующей статье базы знаний Майкрософт:
172267 RECEDIT.VBP демонстрирует ввод-вывод файлов в Visual Basic recedit.rar
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Передача данных на лист Excel с помощью ADO
С помощью Microsoft Jet OLE DB Provider можно добавлять записи в таблицу существующей книги Excel. «Таблицей» в Excel считается диапазон с заданным именем. Первая строка диапазона содержит заголовки (или имена полей), а все последующие строки – записи. Ниже приведен пример создания книги с пустой таблицей MyTable.
Excel 97, Excel 2000 и Excel 2003
1. Откройте новую книгу Excel.
2. Добавьте следующие заголовки в ячейки A1:B1 листа Sheet1:
A1: FirstName B1: LastName
3. Выровняйте ячейку B1 по правому краю.
4. Выделите A1:B1.
5. В меню Вставка выберите Имя, а затем Присвоить. Введите имя MyTable и нажмите кнопку OK.
6. Сохраните новую книгу как C:Book1.xls и закройте Excel.
Чтобы добавить записи в таблицу MyTable с помощью ADO, понадобится сценарий приблизительно следующего вида:
Visual Basic | ||
|
Excel 2007
1. В Excel 2007 создайте книгу.
2. Добавьте следующие заголовки в ячейки A1:B1 листа «Лист1»:
A1: FirstName B1: LastName
3. Выровняйте ячейку B1 по правому краю.
4. Выделите диапазон A1:B1.
5. На ленте откройте вкладку Формулы и выберите пункт Определить имя. Введите имя MyTable и нажмите кнопку ОК.
6. Сохраните новую книгу как C:Book1.xlsx и закройте Excel.
Чтобы добавить записи в таблицу MyTable с помощью ADO, используйте код, подобный приведенному ниже.
Visual Basic | ||
|
При подобном добавлении записей в таблицу производится форматирование книги. В приведенном выше примере новые поля, добавляемые в столбец B, выравниваются по правому краю. Каждая запись, добавляемая в строку, форматируется так же, как предыдущая.
Обратите внимание на то, что при добавлении в ячейку или ячейки листа запись заменяет любые данные, находившиеся в этих ячейках ранее; другими словами, строки листа не сдвигаются вниз при добавлении новых записей. Это следует иметь в виду при планировании размещения данных на листе.
Примечание. Обновление данных на листе Excel с помощью ADO или DAO невозможно в среде Visual Basic для приложений в Access после установки пакета обновления 2 (SP2) для Office 2003 или обновления для Access 2002, описанного в статье 904018 базы знаний Майкрософт. Однако этот способ можно использовать в среде Visual Basic для приложений в других приложениях Office, например в Word, Excel и Outlook. Дополнительные сведения см. в следующих статьях базы знаний Майкрософт:
904953 Запрещается вносить изменения, добавлять или удалять данные, источником которых являются книги Excel в Office Access 2003 или в Access 2002
904018 Описание обновления для Access 2002: от 18 октября 2005 г.
Дополнительные сведения об использовании ADO для доступа к книгам Excel см. в следующих статьях базы знаний Майкрософт:
195951 Создание запросов и обновление данных Excel с помощью ADO со страниц ASP
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Передача данных в Excel с помощью DDE
Наряду с программированием объектов DDE является способом связи с Excel и передачи данных; однако, в противоположность автоматизации и COM, DDE больше не является часто используемым способом связи с другими приложениями и должен использоваться только при отсутствии других решений.
Для передачи данных в Excel с помощью DDE можно воспользоваться одним из следующих способов:
- LinkPoke для вставки данных в указанный диапазон ячеек
. - LinkExecute для отправки команд, которые будет выполнять Excel.
В приведенном ниже примере показано, как установить связь DDE с Excel таким образом, чтобы модно было поместить данные в ячейки листа и выполнить команды. В этом примере для успешного установления связи DDE с файлом LinkTopic Excel|MyBook.xls книга с именем MyBook.xls уже должна быть открыта в запущенном экземпляре Excel.
Примечание. При использовании Excel 2007 для сохранения книг можно использовать новый формат файла (XLSX). Обязательно обновите имя файла в приведенном ниже примере кода.
Примечание. В данном примере Text1 представляет элемент управления Text Box формы Visual Basic:
Visual Basic | ||
|
При использовании метода LinkPoke с Excel необходимо указать диапазон в формате строка-столбец (R1C1) для LinkItem. Если данные вставляются в несколько ячеек, можно использовать строку, в которой столбцы разделены символами табуляции, а строки – символами возврата каретки.
Если метод LinkExecute используется для выполнения команды в Excel, синтаксис команды должен соответствовать языку Excel Macro Language (XLM). Документация по XLM не входит в состав Excel 97 и более поздних версий. Дополнительные сведения о получении документации по XLM см. в следующей статье базы знаний Майкрософт:
143466 Файл Macro97.exe доступен для загрузки. macro97.rar
(Эта ссылка может указывать на содержимое полностью или частично на английском языке)
DDE не является рекомендуемым способом связи с Excel. Программирование объектов предоставляет больше возможностей и обеспечивает лучший доступ к новым функциям Excel.
Все ссылки MSDN по теме:
Автоматизация COM может привести к зависанию клиентского приложения в Win 95/98
Использование Visual Basic для автоматизации Microsoft Excel
Использование программирования объектов для передачи данных из набора записей в Excel
RECEDIT.VBP демонстрирует ввод-вывод файлов в Visual Basic
Запрещается вносить изменения, добавлять или удалять данные, источником которых являются книги Excel в Office Access 2003 или в Access 2002
Описание обновления для Access 2002: от 18 октября 2005 г.
Создание запросов и обновление данных Excel с помощью ADO со страниц ASP (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
Документация по XLM
Способы передачи данных из Visual Basic в Excel
Применимо к: Microsoft Office Excel 2007Microsoft Office Excel 2003Excel 2010
Аннотация
В данной статье рассматриваются способы передачи данных в Microsoft Excel из приложения Microsoft Visual Basic. В статье также представлены преимущества и недостатки каждого из способов, что позволяет пользователю выбрать наиболее подходящий способ для конкретной ситуации.
Дополнительная информация
Чаще всего для передачи данных в книгу Excel используется программирование объектов (автоматизация). Этот способ обладает наибольшим спектром возможностей для указания местоположения данных в книге Excel, а также обеспечивает возможность форматирования книги и настройки различных параметров во время выполнения. Программирование объектов позволяет использовать для передачи данных несколько подходов:
Передача данных по одной ячейке
Передача массива данных в диапазон ячеек
Передача набора записей ADO в диапазон ячеек с помощью способа CopyFromRecordset
Создание в листе Excel объекта QueryTable, содержащего результаты запроса по источнику данных ODBC или OLEDB
Передача данных в буфер обмена с последующей вставкой содержимого буфера обмена в лист Excel
Также существуют способы передачи данных в Excel, не требующие программирования объектов. При работе с серверным приложением рекомендуется освободить клиентов от большого объема обрабатываемых данных. Ниже приведены способы передачи данных, не использующие программирование объектов.
Передача данных в текстовый файл, использующий запятые или знаки табуляции в качестве разделителей, который Excel впоследствии может разобрать на ячейки листа
Передача данных на лист Excel с помощью ADO
Передача данных в Excel с помощью динамического обмена данными (DDE)
В следующих разделах приведены дополнительные сведения о каждом решении.
Примечание. При использовании Microsoft Office Excel 2007 для сохранения книги Excel 2007 можно использовать новый формат файла (XSLX). Для этого найдите следующую строку кода в приведенных ниже примерах:
oBook.SaveAs «C:Book1.xls»
Замените этот код следующей строкой кода:
oBook.SaveAs «C:Book1.xlsx»
Кроме того, база данных «Борей» не входит в состав Office 2007 по умолчанию. Вы можете скачать базу данных «Борей» из Microsoft Office Online.
Для передачи данных между ячейкой используйте службу автоматизации.
С помощью службы автоматизации вы сможете передавать данные на лист по одной ячейке за раз:
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
‘Start a new workbook in Excel
Set oExcel = CreateObject(«Excel.Application»)
Set oBook = oExcel.Workbooks.Add
‘Add data to cells of the first worksheet in the new workbook
Set oSheet = oBook.Worksheets(1)
oSheet.Range(«A1»).Value = «Last Name»
oSheet.Range(«B1»).Value = «First Name»
oSheet.Range(«A1:B1»).Font.Bold = True
oSheet.Range(«A2»).Value = «Doe»
oSheet.Range(«B2»).Value = «John»
‘Save the Workbook and Quit Excel
oBook.SaveAs «C:Book1.xls»
oExcel.Quit
Передача данных по одной ячейке является оптимальным способом передачи небольших объемов данных. Этот способ позволяет помещать данные в любом месте рабочей книги и форматировать ячейки во время выполнения. Однако этот способ не рекомендуется применять при передаче больших объемов данных в книгу Excel. Каждый объект Range, получаемый во время выполнения, вызывает запрос к интерфейсу, поэтому такой способ передачи данных может оказаться очень медленным. Кроме того, в Microsoft Windows 95 и Windows 98 существует ограничение на запросы к интерфейсу, составляющее 64 КБ. При превышении лимита в 64 КБ сервер автоматизации (Excel) может перестать отвечать на запросы или может отображаться сообщение о нехватке памяти.
Таким образом, передача данных по одной ячейке допустима только для небольших объемов данных. Для передачи больших объемов данных в Excel следует использовать один из способов, описанных ниже.
Примеры сценариев для автоматизации Excel см. в следующей статье базы знаний Майкрософт:
219151 Как использовать Visual Basic для автоматизации Microsoft Excel
Использование автоматизации для передачи массива данных на диапазон на листе
Массив данных может передаваться одновременно на диапазон из нескольких ячеек:
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
‘Start a new workbook in Excel
Set oExcel = CreateObject(«Excel.Application»)
Set oBook = oExcel.Workbooks.Add
‘Create an array with 3 columns and 100 rows
Dim DataArray(1 To 100, 1 To 3) As Variant
Dim r As Integer
For r = 1 To 100
DataArray(r, 1) = «ORD» & Format(r, «0000»)
DataArray(r, 2) = Rnd() * 1000
DataArray(r, 3) = DataArray(r, 2) * 0.7
Next
‘Add headers to the worksheet on row 1
Set oSheet = oBook.Worksheets(1)
oSheet.Range(«A1:C1»).Value = Array(«Order ID», «Amount», «Tax»)
‘Transfer the array to the worksheet starting at cell A2
oSheet.Range(«A2»).Resize(100, 3).Value = DataArray
‘Save the Workbook and Quit Excel
oBook.SaveAs «C:Book1.xls»
oExcel.Quit
Передача большого объема данных с помощью массива происходит значительно быстрее, чем передача данных по одной ячейке. Обратите внимание на строку из приведенного выше сценария, которая одновременно передает данные в 300 ячеек листа:
oSheet.Range(«A2»).Resize(100, 3).Value = DataArray
Эта строка представляет всего два запроса к интерфейсу (один для объекта Range, возвращаемого методом Range, и один для объекта Range, возвращаемого методом Resize). При этом при передаче данных по одной ячейке потребовалось бы 300 запросов к интерфейсу для объектов Range. Поэтому передачу данных необходимо по возможности осуществлять с помощью массива, чтобы сократить число запросов к интерфейсу.
Передача набора записей ADO с помощью программирования объектов
В Excel 2000 появился метод CopyFromRecordset, позволяющий передавать наборы данных ADO (или DAO) в диапазон ячеек листа. Приведенный ниже сценарий является примером автоматизации Excel 2000, Excel 2002 или Office Excel 2003 для переноса содержимого таблицы Orders образца базы данных «Борей» с помощью метода CopyFromRecordset.
‘Create a Recordset from all the records in the Orders table
Dim sNWind As String
Dim conn As New ADODB.Connection
Dim rs As ADODB.Recordset
sNWind = _
«C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb»
conn.Open «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» & _
sNWind & «;»
conn.CursorLocation = adUseClient
Set rs = conn.Execute(«Orders», , adCmdTable)
‘Create a new workbook in Excel
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
Set oExcel = CreateObject(«Excel.Application»)
Set oBook = oExcel.Workbooks.Add
Set oSheet = oBook.Worksheets(1)
‘Transfer the data to Excel
oSheet.Range(«A1»).CopyFromRecordset rs
‘Save the Workbook and Quit Excel
oBook.SaveAs «C:Book1.xls»
oExcel.Quit
‘Close the connection
rs.Close
conn.Close
Примечание. При использовании версии базы данных «Борей» для Office 2007 необходимо заменить в примере следующую строку кода:
conn.Open «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» & _ sNWind & «;»
Замените эту строку кода следующей строкой:
conn.Open «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» & _ sNWind & «;»
В Excel 97 также имеется метод CopyFromRecordset, однако его можно использовать только для набора записей DAO. CopyFromRecordset в Excel 97 не поддерживает ADO.
Дополнительные сведения об использовании ADO и метода CopyFromRecordset см. в следующей статье базы знаний Майкрософт:
246335 Как передавать данные из набора записей ADO в Excel средствами автоматизации
Использование автоматизации для создания объекта QueryTable на листе
Объект QueryTable представляет собой таблицу, созданную на основании данных, возвращенных из внешнего источника данных. При автоматизации Microsoft Excel для создания объекта QueryTable следует просто указать строку подключения к источнику данных OLEDB или ODBC в строке SQL. Далее Excel генерирует набор записей и вставляет его в указанное местоположение на листе. Использование объекта QueryTables обладает несколькими преимуществами по сравнению с использованием метода CopyFromRecordset:
Созданием набора записей и его размещением на листе управляет Excel.
Запрос можно сохранить в объекте QueryTable таким образом, чтобы в дальнейшем его можно было обновить и получить обновленный набор записей.
При добавлении нового объекта QueryTable к листу можно переместить данные, уже находящиеся в ячейках листа, чтобы свободно разместить новые данные (см. свойство RefreshStyle).
Ниже приводится пример сценария, позволяющего автоматизировать Excel 2000, Excel 2002 или Office Excel 2003 для создания нового объекта QueryTable на листе Excel с данными из образца базы данных «Борей».
‘Create a new workbook in Excel
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
Set oExcel = CreateObject(«Excel.Application»)
Set oBook = oExcel.Workbooks.Add
Set oSheet = oBook.Worksheets(1)
‘Create the QueryTable
Dim sNWind As String
sNWind = _
«C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb»
Dim oQryTable As Object
Set oQryTable = oSheet.QueryTables.Add( _
«OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» & _
sNWind & «;», oSheet.Range(«A1»), «Select * from Orders»)
oQryTable.RefreshStyle = xlInsertEntireRows
oQryTable.Refresh False
‘Save the Workbook and Quit Excel
oBook.SaveAs «C:Book1.xls»
oExcel.Quit
Использование буфера обмена
Буфер обмена Windows также может использоваться как механизм передачи данных на лист Excel. Чтобы вставить данные в несколько ячеек листа, можно скопировать строку, в которой столбцы разделены знаками табуляции, а строки – символами возврата каретки. В приведенном ниже сценарии показано, как Visual Basic может использовать буфер обмена для передачи данных в Excel:
‘Copy a string to the clipboard
Dim sData As String
sData = «FirstName» & vbTab & «LastName» & vbTab & «Birthdate» & vbCr _
& «Bill» & vbTab & «Brown» & vbTab & «2/5/85» & vbCr _
& «Joe» & vbTab & «Thomas» & vbTab & «1/1/91»
Clipboard.Clear
Clipboard.SetText sData
‘Create a new workbook in Excel
Dim oExcel As Object
Dim oBook As Object
Set oExcel = CreateObject(«Excel.Application»)
Set oBook = oExcel.Workbooks.Add
‘Paste the data
oBook.Worksheets(1).Range(«A1»).Select
oBook.Worksheets(1).Paste
‘Save the Workbook and Quit Excel
oBook.SaveAs «C:Book1.xls»
oExcel.Quit
Создание текстового файла с разделителями, который Excel может разобрать по строкам и столбцам
Excel может открывать файлы с разделителями – знаками табуляции и запятыми – и правильно распределять данные по ячейкам. Этим можно воспользоваться при необходимости передачи большого объема данных в лист Excel с минимальным использованием автоматизации. Этот подход рекомендуется для приложений типа клиент-сервер, поскольку текстовый файл может генерироваться серверным приложением. Затем текстовый файл можно открыть с помощью клиентского приложения, при необходимости используя автоматизацию.
Ниже приведен сценарий, иллюстрирующий создание текстового файла с разделителями-запятыми из набора записей ADO:
‘Create a Recordset from all the records in the Orders table
Dim sNWind As String
Dim conn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim sData As String
sNWind = _
«C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb»
conn.Open «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» & _
sNWind & «;»
conn.CursorLocation = adUseClient
Set rs = conn.Execute(«Orders», , adCmdTable)
‘Save the recordset as a tab-delimited file
sData = rs.GetString(adClipString, , vbTab, vbCr, vbNullString)
Open «C:Test.txt» For Output As #1
Print #1, sData
Close #1
‘Close the connection
rs.Close
conn.Close
‘Open the new text file in Excel
Shell «C:Program FilesMicrosoft OfficeOfficeExcel.exe » & _
Chr(34) & «C:Test.txt» & Chr(34), vbMaximizedFocus
Примечание. При использовании версии базы данных «Борей» для Office 2007 необходимо заменить в примере следующую строку кода:
conn.Open «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» & _
sNWind & «;»
Замените эту строку кода следующей строкой:
conn.Open «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» & _
sNWind & «;»
Если файл имеет расширение CSV, Excel открывает его без отображения мастера импорта текста и по умолчанию принимает, что в файле используются разделители-запятые. Если же файл имеет расширение TXT, Excel автоматически разбирает его, используя в качестве разделителей знаки табуляции.
В приведенном выше примере запуск Excel осуществлялся с помощью оператора Shell, а имя файла использовалось как аргумент командной строки. А в этом примере автоматизация не использовалась. Однако при желании можно применить минимум автоматизации, чтобы открыть текстовый файл и сохранить его в формате книги Excel:
‘Create a new instance of Excel
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
Set oExcel = CreateObject(«Excel.Application»)
‘Open the text file
Set oBook = oExcel.Workbooks.Open(«C:Test.txt»)
‘Save as Excel workbook and Quit Excel
oBook.SaveAs «C:Book1.xls», xlWorkbookNormal
oExcel.Quit
Передача данных на лист Excel с помощью ADO
С помощью Microsoft Jet OLE DB Provider можно добавлять записи в таблицу существующей книги Excel. «Таблицей» в Excel считается диапазон с заданным именем. Первая строка диапазона содержит заголовки (или имена полей), а все последующие строки – записи. Ниже приведен пример пошагового создания книги с пустой таблицей
MyTable.
Excel 97, Excel 2000 и Excel 2003
Откройте новую книгу Excel.
Добавьте следующие заголовки в ячейки A1:B1 листа 1:
A1: FirstName B1: LastName
Выровняйте ячейку B1 по правому краю.
Выделите диапазон A1:B1.
В меню Вставка выберите пункт Имя, а затем выберите команду Присвоить. Введите имя MyTable и нажмите кнопку ОК.
Сохраните новую книгу как C:Book1.xls и закройте Excel.
Чтобы добавить записи в таблицу MyTable с помощью ADO, можно воспользоваться примерно следующим сценарием:
‘Create a new connection object for Book1.xls
Dim conn As New ADODB.Connection
conn.Open «Provider=Microsoft.Jet.OLEDB.4.0;» & _
«Data Source=C:Book1.xls;Extended Properties=Excel 8.0;»
conn.Execute «Insert into MyTable (FirstName, LastName)» & _
» values (‘Bill’, ‘Brown’)»
conn.Execute «Insert into MyTable (FirstName, LastName)» & _
» values (‘Joe’, ‘Thomas’)»
conn.Close
Excel 2007
В Excel 2007 создайте книгу.
Добавьте следующие заголовки в ячейки A1:B1 листа 1:
A1: FirstName B1: LastName
Выровняйте ячейку B1 по правому краю.
Выделите диапазон A1:B1.
На ленте откройте вкладку Формулы и выберите элемент Присвоить имя. Введите имя MyTable и нажмите кнопку ОК.
Сохраните новую книгу как C:Book1.xlsx и закройте Excel.
Чтобы добавить записи в таблицу MyTable с помощью ADO, используйте код, подобный приведенному ниже.
‘Create a new connection object for Book1.xls
Dim conn As New ADODB.Connection
conn.Open «Provider=Microsoft.ACE.OLEDB.12.0;» & _
«Data Source=C:Book1.xlsx;Extended Properties=Excel 12.0;»
conn.Execute «Insert into MyTable (FirstName, LastName)» & _
» values (‘Scott’, ‘Brown’)»
conn.Execute «Insert into MyTable (FirstName, LastName)» & _
» values (‘Jane’, ‘Dow’)»
conn.Close
При подобном добавлении записей в таблицу форматирование книги сохраняется. В приведенном выше примере новые поля, добавляемые в столбец B, выравниваются по правому краю. Каждая запись, добавляемая в строку, форматируется так же, как предыдущая.
Обратите внимание на то, что при добавлении в ячейку или ячейки листа запись заменяет любые данные, находившиеся в этих ячейках ранее; другими словами, строки листа не сдвигаются вниз при добавлении новых записей. Это следует иметь в виду при планировании размещения данных на листе.
Примечание. Обновление данных на листе Excel с помощью ADO или DAO невозможно в среде Visual Basic for Application в Access после установки пакета обновлений 2 (SP2) для Office 2003 или обновления для Access 2002, описанного в статье 904018 базы знаний Майкрософт. Однако этот способ можно использовать в среде Visual Basic for Application в других приложениях Office, то есть в Word, Excel и Outlook.
Для получения дополнительной информации щелкните приведенные ниже номера статей базы знаний Майкрософт:
904953 Невозможно вносить изменения, добавлять или удалять данные в таблицах, источником которых являются книги Excel в Office Access 2003 или в Access 2002
904018 Описание обновления для Access 2002: от 18 октября 2005 г.
Дополнительные сведения об использовании ADO для доступа к книгам Excel см. в следующих статьях базы знаний Майкрософт:
195951 Как создать запросы и выполнить обновление данных Excel с помощью ADO со страниц ASP
Использование DDE для передачи данных в Excel
Наряду с программированием объектов, DDE является еще одним способом связи с Excel и передачи данных. Однако, в противоположность программированию объектов и COM, DDE больше не является предпочтительным способом связи с другими приложениями и должен использоваться только при отсутствии других решений.
Для передачи данных в Excel с помощью DDE можно воспользоваться одним из следующих способов:
Используйте метод LinkPoke для вставки данных в указанный диапазон ячейки (ячеек)
-или-
Используйте метод LinkExecute для отправки команд, которые будет выполнять Excel.
В приведенном ниже примере показано, как установить связь DDE с Excel таким образом, чтобы можно было поместить данные в ячейки листа и выполнить команды. В этом примере для успешного установления связи DDE с файлом LinkTopic Excel|MyBook.xls книга с именем MyBook.xls
уже должна быть открыта в запущенном экземпляре Excel.
Примечание. При использовании Excel 2007 для сохранения книг можно использовать новый формат файла (XLSX). Обязательно обновите имя файла в приведенном ниже примере кода.
Примечание. В данном примере Text1 представляет элемент управления Text Box формы Visual Basic:
‘Initiate a DDE communication with Excel
Text1.LinkMode = 0
Text1.LinkTopic = «Excel|MyBook.xls»
Text1.LinkItem = «R1C1:R2C3»
Text1.LinkMode = 1
‘Poke the text in Text1 to the R1C1:R2C3 in MyBook.xls
Text1.Text = «one» & vbTab & «two» & vbTab & «three» & vbCr & _
«four» & vbTab & «five» & vbTab & «six»
Text1.LinkPoke
‘Execute commands to select cell A1 (same as R1C1) and change the font
‘format
Text1.LinkExecute «[SELECT(«»R1C1″»)]»
Text1.LinkExecute «[FONT.PROPERTIES(«»Times New Roman»»,»»Bold»»,10)]»
‘Terminate the DDE communication
Text1.LinkMode = 0
При использовании метода LinkPoke с Excel необходимо указать диапазон в формате строка-столбец (R1C1) для LinkItem. Если данные вставляются в несколько ячеек, можно использовать строку, в которой столбцы разделены символами табуляции, а строки – символами возврата каретки.
Если метод LinkExecute используется для выполнения команды в Excel, синтаксис команды должен соответствовать языку Excel Macro Language (XLM). Документация по XLM не входит в состав Excel 97 и более поздних версий.
DDE не является рекомендуемым способом связи с Excel. Программирование объектов предоставляет больше возможностей и обеспечивает лучший доступ к новым функциям Excel.
Ссылки
Для получения дополнительной информации щелкните приведенный ниже номер статьи базы знаний Майкрософт:
306022 Как выполнить перенос данных в книгу Excel с помощью Visual Basic .NET
Как в Excel 2010 или 2013 вставить и запустить код VBA – руководство для начинающих
Смотрите также _ «C:UsersCDesktopFOLDER» Workbooks.OpenIvanOKЮрий МХоть Жераром Депардье все твои сообщения этом. Как только файл с несовпадающимзы. кстати, везде,’ Returns collection Ned_Poriv() exl =а это читали:
по его использованиюОкно(Sheet); Basic, как показаноApplication.ScreenUpdating = FalseЭто краткое пошаговое руководство Filename:= _ «C:UsersÍDesktopFOLDERFILENew.xls»:: Кирилл, а рекордер или психом в выискивая в них Михаилу потребуется изменить именем — нужный где возможно, я files of folder
CreateObject(«excel.application») exl.Workbooks.Open(Filename:=»C:Documents and’111 это пароль (в приложении) :WatchesКод более общего характера на картинке ниже.Application.Calculation = xlCalculationManual предназначено для начинающих on error gotoIvanOK упорно пишет ChDir белой рубашке с «перлы» а ля что-то в коде,
- повторюсь: моя функция тоже предпочитаю однострочный
- ’ SettingsСемРабочий столExcel.xls») exl.Sheets(«Період2»).Select()
Вставляем код VBA в книгу Excel
на открытие файла,[ссылка заблокирована потакже очень помогает должен быть введён Имейте ввиду, чтоВ самый конец кода,
-
- пользователей и рассказывает 0 дальше код
- , На горе программист: )) пеной у рта nerv? Хочешь быть
- ему придется ковырять абстрагируется от (свой, If.’ @param {String} exl.visible = True 11 это пароль решению администрации проекта] при отладке кода в окно Excel остается перед о том, как работы с открытым
- ThisWorkbook.Windows.Application.Visible = FalseKL (в ваших глазах). нарциссом — ради всю логику, в чужой и т.п.).Vitalts Path The path
exl.Sheets(«71010000»).Select() exl.Cells.Select() exl.Selection.Delete(Shift:=xlUp) на изменеиеS_e_m
VBA, так какModule открытым и находится
End Sub
вставлять код VBA
файломно очевидно, что, UserForm1.Show: Юр, ну мало Моя точка зрения Бога. Растеряешь друзей. т.ч. логику получения
- Она просто возвращает: to folder exl.Sheets(«Період1»).Select() exl.Cells.Select() exl.Selection.Copy()Вы что тоже: Ребята, подскажите как в нём можно; позади окна редактора.: (Visual Basic for
если ошибки при
eagl69
- ли что на останется при мнеRAN имени файла из
список файлов папки.
Michael_S
’ @param {String} exl.Sheets(«71010000»).Select() exl.Cells.Select() exl.ActiveSheet.Paste() создали файл с открывается книга Excel увидеть значение, типКод для нового объектаВ процессе работы вApplication.ScreenUpdating = True Applications) в книгу обращении по 1: заборах пишут. РекордерЦитата: Саш, это, конечно папки. В моем При желании может, что значит не [Filter] The file
- Она просто возвращает: to folder exl.Sheets(«Період1»).Select() exl.Cells.Select() exl.Selection.Copy()Вы что тоже: Ребята, подскажите как в нём можно; позади окна редактора.: (Visual Basic for
- exl.Rows(«1:1»).Select() exl.Range(Selection, Selection.End(xlDown)).Select() такими паролями?? плагиат 2003 c указанного и контекст любого должен быть введён редакторе Visual BasicApplication.Calculation = xlCalculationAutomatic Excel, и как пути нет, тоinv.DS еще и Select(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты откатись чуть правильно случае это не делать это рекурсивно. хочет? Без кода
filter exl.Application.CutCopyMode = False какой-то, деньги автору места. отслеживаемого выражения, которое в в Excel могутЭти строки, как можно запускать вставленный макрос как избежать обращения, обожает назад, и взгляни
- но вся проблема требуется, т.к. вынесеноФункцию можно подключить я не могу’ @return {Collection} exl.Selection.Sort(Key1:=Range(«E1»), Order1:=xlAscending, Header:=xlGuess,
Запускаем макрос VBA в Excel
пароля??? ))Наперед СПАСИБО!!! задаст пользователь. ЧтобыClass Module быть открыты различные понять из их для выполнения различных ко второму пути?inv.DSЮрий М на свои коды. в том -
в функцию. Если и не вносить
сказать где у
FileList
_ OrderCustom:=1, MatchCase:=False,
office-guru.ru
Редактор Visual Basic в Excel
S_e_mЦипихович Эндрю открыть окно; окна. Управление окнами содержания, отключают обновление задач на этомспасибо за советы., неа ефекто тот: ))И переменные из что она одна,
Запуск редактора Visual Basic
ему потребуется проверять существенных изменений в вас ошибка, ибо’ —————————————- Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal): Так открывается с: в ВБА так:WatchesЕсли нужно создать диалоговое осуществляется в меню экрана и пересчёт листе.МатросНаЗебре же….Assassinys одной буквы, и но для всех вложенные каталоги, ему основную программу (добавляется
Окна редактора Visual Basic
код замечательно работает.Private Function GetFileList(ByVal ‘oExcel.Workbooks.Add() ‘oExcel.Sheets.Add.Name = этими паролями иSet oExcel =, нажмите окно для взаимодействия View, которое находится формул рабочей книгиБольшинство пользователей не являются:
Окно проекта (Project)
нужно сделать до: Собственно меня интересует Iif сплошь и разная! придется писать новый одна строка вызова Ни один год Path As String, ComboBox1.Text End Sub без них. Загвоздка CreateObject(«Excel.Application») ‘создать объектWatch Window с пользователем, то в верхней части перед выполнением макроса. гуру Microsoft Office.
- If Err <> 0 sub workbook_open() иначе как возможно открыть рядом, и еще
- Ты откатись чуть алгоритм (перебирать всю функции). пользуюсь подобными методами. _
End ModuleПосле запуска в том, что Microsoft Excel oExcel.Workbooks.Openв меню можно использовать окна редактора VBA. После выполнения кода Они могут не Then ефект полюбому останется…. форму в документе куча всего, что назад, и взгляни логику, вносить изменения,ЦитатаПопробуйте вывести названиеOptional ByVal Filter в конце строки
я дальше хочу «D:Рабочая папка» &ViewUserform Ниже дано описание эти параметры снова знать всех тонкостейall L
- потому что сначала эксель но так ты сейчас критикуешь! на свои коды. отлаживать и т.п.(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Я уж не файла, который пытаетесь
- As String = 27 выдаёт ошибку выделить какой-то диапазон Имя_файла, , ,редактора Visual Basic.. отдельных окон. включаются. Данный приём работы той или: Попробуем. спасибо!
открываеться ексель а что бы былав том тоИ переменные из всю программу, а говорю о размере открыть, возможно, лимит
- «*») As Collection —- ячеек и копировать , «111», «11» Также окноДвойной щелчок мышью по
- Окно приводит к ускорению иной функции, иSanja потом он выполняет видна только форма
- и дело. Я одной буквы, и не отдельную функцию). кода. исчерпан, и идет
- Static List AsObject variable or With их, а мне ‘111 это парольWatches
- любому объекту вProject выполнения макроса от не смогут ответить: :?: макрос
Окно кода (Code)
при открытии документа сам делал так Iif сплошь иЕсли вы предпочитаетеКачество кода не попытка открыть файл New Collection block variable not выдает ошибку на: на открытие файла,будет открыто автоматически, окнеоткрывается в левой 10% до 500%
на вопрос, какIf Err <>IvanOK а сам документ (писал ужасный, говеный рядом, и еще закладывать фундамент дома измеряется его размером. с пустым названием.
Окно свойств (Properties)
Static FSO As set.Range 11 это пароль если задать отслеживаемоеProject части редактора VBA (да, макрос может отличается скорость выполнения 0 Then PathName, Вы бредите! Все был скрыт или код) и не
Окно отладчика (Immediate)
куча всего, что из спичек, я Вообще, не понимаю, Не совершенство кода, Object—(«A8:C7»).Select Ощущение, что на изменеие ‘oExcel.Workbooks.Open выражение.открывает соответствующее окно (показано на картинке работать в 5 макроса VBA в = ChDir(«Y:PublicFolder1») Else работает у меня свернут? хочу, чтобы кто-нибудь ты сейчас критикуешь! не против, но почему форумчан беспокоит
написанного на скоруюStatic Deep AsТакже в 29 книга «AIC_SIP» активна «D:Рабочая папка» &Чтобы задать отслеживаемое выражение,Code выше). В этом раз быстрее, если
Окно переменных (Locals)
Excel 2010 и PathName = ChDir(«C:UsersCDesktopFOLDER») остается только 1аналитика еще наступал наМне Вася уронил сам стараюсь этого размер (не только руку :( Integer строке (потому что окрыта), Имя_файла, , , нужно:, предназначенное для ввода окне для каждой манипуляции над ячейками 2013. Многие просто End If Workbooks.Open форма активная, сам: в модуль «ЭтаКнига»:
Окно отслеживания (Watches)
эти грабли. Это молоток на голову! не делать этого) кода, еслиСудя по скрину,Dim SubFolder AsRange а Лист1 не ,111, 11 ‘111Выделить выражение в редактируемом кода VBA с открытой рабочей книги происходят без лишних используют Excel, как Filename:=PathName & «FILENew.xls» Excel прячется.sub workbook_open() application.visible=false ж очевидно )И что выЦитата код написан должным так и есть.
ObjectОшибка 1 «System.Data.Range»
- активный и не это пароль на
- коде VBA. клавиатуры. На одном создаётся проект VBA остановок). инструмент для обработки
- Kuzmichinv.DS yourform.show end sub
deathogre ему сказали?(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати и скорость образом? Подключили, забыли. Приведите кодDim Folder As в этом контексте хочет с ним
открытие файла, 11В меню
из приведённых выше
(VBA Project). Проект
Сохраняем рабочую книгу, как
office-guru.ru
Как открыть visual basic через excel в office 2007?
данных.: Используйте диалоговое окно
, ето вы простоAssassinys
: Здрасьте. Как программноТы…, Вася…, неправ!!!!!!!!! тоже от длинны
Если хотите поMichael_S Object
недоступен, так как контачить.
это пароль наDebug рисунков показано окно
VBA – это книгу Excel сПредположим, нужно изменить данные выбора файла
не замечаете не: не работает( открыть книгу эксельnerv
не всегда зависит прежнему заниматься ручной: Vitalts, Все, разобрался.
Dim File As является «Friend».Спасибо что отозвались изменеие oExcel.Visible =редактора VBA нажать
Как в excel открыть visual basic???
кода для набор всех объектов поддержкой макросов. Для на листе Excel
Set FD = Application.FileDialog(msoFileDialogFilePicker) мощном ПК, а
Assassinys и сохранить эту: об единственной опечаткезависит от алгоритма, обсфукацией, экономить на Не туда Objectdzug (ещё раз) True ‘FalseНеужели вQuick WatchModule1 и модулей VBA, этого нажмите
определённым образом. Мыall L я говорю делоВ
: книгу (объект) в я предупредил сразу. а не от
каждой букве, пожалуйста.Set wb = Workbooks.Open(ActiveWorkbook.Path
Открытие Excel и активация нужного листа
If FSO Is: Посмотрите это:Ципихович Эндрю ВБ не так??.
.
привязанных к текущейCtrl+S
немало погуглили и: Kuzmich, Sanja, спасибо продолжение темы:Assassinys глобальной переменной? Это раз. Два, кол-ва букв )Я пишу универсальные & «» & Nothing ThenОбработка активной книги: Это решено???????? и проверьте, отпишитесь, ОК??НажатьПо мере ввода кода книге. Изначально ви в окне нашли макрос VBA, за советы. НачнуPrivate Sub CommandButton8_Click()
, работает.Юрий М кто-то не знает,Цитата функции, кот. таскаю fn)Set FSO = Excel ладно …S_e_mAdd VBA в окно него входят: с предупреждением который решает эту с предложения Sanja Application.Visible = FalseКод надо поместить
: 1. Открытие нужной что от него(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Мы все тут
(использую) из проектавпихивал. CreateObject(«Scripting.FileSystemObject»)S_e_mздесь: Всё так. Только.CodeОбъектСледующие компоненты невозможно сохранить задачу. Однако, наше (для сохранения «молчаливой» End Sub Private куда и сказано книги запишите макрорекордером хочет компилятор при хотим размер покороче в проект. МнеЕще раз спасибо.End If: Ничего не помогает.Windows(«AIC_SIP.xls»).Activate ‘активация моего я, пока, чайникКроме рассмотренных, в меню, редактор Visual BasicЭтаКнига в книге без знание VBA оставляет работы процедуры), если Sub CommandButton9_Click() Application.Visible - — получите готовый
200?’200px’:»+(this.scrollHeight+5)+’px’);»>Option Expicit и даже соревнуемся это не мешаетnervIf FSO.FolderExists(Path) Then Не получается у файла Range(«A1:C3»).Select ‘выбираю и совсем недавно редактора Visual Basic следит за правильностью(ThisWorkbook), привязанный к
поддержки макросов желать лучшего. Вот
не подойдет, то = True End
в модуль «Эта книга» код.
я тут не
в этом постоянно
) Если вам: просто вы неSet Folder = меня сортировка. Уже
диапазон ячеек Selection.Copy начал изучать язык в Excel существует ввода, ищет ошибки книге Excel;
(The following features тут-то и придёт окно выбора файла SubЛист скрывается аyourform2. Dim Wb при чем ) в специально созданном нравиться каждый раз писали МНОГО кода FSO.GetFolder(Path) кучу сайтов перелазил ‘копируюв переди пробуйте программирования, а тут ещё множество параметров в коде иОбъекты cannot be saved
на помощь пошаговая уж точно поможет.
вот при открытиизаменить на свое, As Workbook Set
Цитата
для этого разделе переписывать весь код,Когда перед тобойFor Each File — не могу
добавлять oExcel. ещё по работе
и команд, используемых выделяет код, который
Лист in macro-free workbook) инструкция, с помощью
вопрос, думаю, закрыт. появляется еще какой
например, у меня Wb = ActiveWorkbook(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты упорно пытаешьсяза рекламу 5 я не против 1000+ строк в In Folder.Files разобраться.то есть как нужно было… Короче при создании, выполнении требует исправления.(Sheet), привязанные к нажмите которой мы сможем Спасибо. то лист пустойUserform1Hugo
доказать всем участникамMichael_SSerge_007 одном только модуле,If File.Name LikeMichael_S Вы здесь обращались:
получилось, но открывает
и отладке кодаВ окне каждому листу текущейНет использовать найденный код.
Александр Моторинall LAleksey1404: Set wb = темы
: У каждого свои: Точно так же нет желания разбирать Filter Then: Все, что обoExcel.Visible = True не из всех
VBA.Properties рабочей книги Excel.(No).Вставляем код VBA в: А где находится: Добрый день,: Да заработало , Workbooks.Open(filename)я отстаиваю свою понятия «правильности» как и формул. и додумывать. ХочетсяList.Add File этом файле известно ‘False папок. С некоторыхУрок подготовлен для Васперечислены свойства объекта,Самостоятельно в проект можноОткроется диалоговое окно книгу Excel сам файл?Подскажите, можно ли я просто имяdeathogre точку зренияСаш, мы уже Кстати и скорость просто читать. МаксимальноEnd If — он находитсяS_e_m
папок выдаёт ошибку, командой сайта office-guru.ru который в момент добавить объектыСохранение документаЗапускаем макрос VBA вЕсли рядом с
решить такую задачу: формы некорректное выбирал
: Мне нужно открытьЦитата
как-то говорили на тоже от длинны быстро читать понятныйNext в той же: Я уже на что нету доступа.
CyberForum.ru
Открыть файл excel. (VBA) (Задача вроде простая, но…)
Источник: http://www.excelfunctions.net/Visual-Basic-Editor.html создания (не вUserform(Save as). В Excel нужным файлом, тоРаботаю с файлом,Апострофф книгу из другой(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>и правда думаешь, эту тему; твои не всегда зависит не двусмысленный код.For Each SubFolder папке, где и
пике восторга Если знаете в
Перевел: Антон Андронов процессе выполнения программы),
выпадающем спискеВ этом примере мы ActiveWorkbook.Path поможет в котором прописана: А как обратно
книги
что кому-то интересно доводы отчасти верны,
Однако ты прав,
"С недавних пор" In Folder.SubFolders
основной, и другихПолучилось, как Вы
чем проблема, отпишитеАвтор: Антон Андронов
выделен в окне
Module
Тип файла
будем использовать VBA
all L VBA-процедура, на работе открыть файл дляЮрий М
искать все твои но не для форумчан это очень
однострочный If я
Deep = Deep файлов в этой сказали. Вот так пожалуйста. А пока,
Виталик александровский проекта. Эти свойстваи(Save as type)
макрос, который удаляет: Нет, Александр, не и дома.
редактирования (((
: И что? сообщения выискивая в
всех случаев.
беспокоит
не использую вообще + 1
папке нет. И
Set oExcel = очень благодарен за: Alt плюс F11
могут быть различнымиClass Module выбираем
переносы строк из с нужным. Спасибо.
Процедура эта в
Aleksey1404deathogre них "перлы" а
Michael_SМы все тут )
GetFileList SubFolder.Path, Mask что он -
CreateObject("Excel.Application") 'создать объект помощь!!!
Gkp090 в зависимости от
. Если Вы посмотритеКнига Excel с поддержкой
ячеек текущего листаRAN
процессе работы обращается: Разве не очевидно?
: Объявил глобальную переменную ля nerv?
: То же не хотим размер покороче
Цитата
Next
эксель. Ни имя Microsoft Excel oExcel.Workbooks.Open
В принципе разобрался: VBA
типа выделенного объекта на картинку выше,
макросов
Excel.
: Не тестировал, но
к еще одному Application.Visible = True
в модуле ЭтаКнигаесли мне говорят,
работает
и даже соревнуемся
(Michael_S)200?'200px':''+(this.scrollHeight+5)+'px');">жалуется на MaskDeep = Deep
и расширение файла,
"C:Documents and SettingsS_e_mРабочий с открытием, но
в настройках выставить (лист, книга, модуль
то увидите, что(Excel macro-enabled workbook)
Открываем рабочую книгу в на правду похоже
файлу (открывает его,
Апострофф
Public Главнейшая As
что я неnerv в этом постоянноЭто та самая
— 1 а также имя столAC_SIP222″ & xls тут проблема дальше «Показывать вкладку Разработчик и другие). в проект VBA и нажимаем кнопку
Excel.Sub Мяу() Dim производит определенные действия),: Может есть какое-то Workbookоткрыл книгу в прав, я спрашиваю: Захотелось кнопку «Ok» в специально созданном
ошибка, о кот.End If и расположение папки ‘открываю книгу 222
Private Sub Command1_Click() на ленте»Окно для книги
СохранитьНажатием wb As Workbook который на работе сочетание клавиш, позволяющее модуле АктивХ формы в чем, а нажать для этого разделе
я говорил. Замените
If Deep = не известны. oExcel.Visible = True Set oExcel =
Александр кImmediateBook1.xlsm(Save).Alt+F11 Dim pName(), fName$, лежит на диске открыть файл безChDir «\Margo123Тест» Workbooks.Open не заведомо соглашаюсьТам же написано
KuklP Mask на Filter. -1 ThenВозможно? Если возможно ‘False oExcel.Range(«B5:E13»).Select ‘выбираю CreateObject(«Excel.Application») ‘ñîçäГ*ГІГј îáúåêò: На вкладке Разработчикможно отобразить вдобавлен объект
Нажимаемвызываем окно редактора i& pName =
Y, дома на отработки макроса(shift не Filename:=»\Margo123Тест6.02.2016.xlsm» Set ЭтаКнига.ГлавнейшаяЦитата «Переменная не определена»: Еще как измеряется.Цитата
Set GetFileList =
— как? диапазон ячеек oExcel.Selection.Copy Microsoft Excel oExcel.Workbooks.Open щелкните Visual Basic. редакторе Visual BasicModuleAlt+Q Visual Basic Array(«Y:PublicFolder1», «C:UsersCDesktopFOLDER» fName диске С. Имя помогает), т.к. у = Workbooks(«\Margo123Тест6.02.2016.xlsm»)выдает ошибку(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Растеряешь друзей. и даже выделено Можно написать на
(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>В данном случае, List
nerv ‘копирую oExcel.Workbooks.Open «C:Documents «C:111AIC_SIP» & AIC_SIP,Если Вкладка Разработчик
через менюс названием, чтобы закрыть окноНа панели = «хи-хи.xls» On файла одинаковое, пути меня отображается форма,
на 3 строке,т.е. если наши какая. Что мешает
10 страниц «правильного» мне караз такиSet List =: Получить список файлов and SettingsS_e_mРабочий столAC_SIP111″
, , , не отображена:ViewModule1 редактора VBA иProject-VBAProject Error Resume Next к нему разные. но я не
Run-time error 9 мнения не совпадают, объявить? Это же кода, а можно
было удобнее воспользоваться Nothing папки & xls ‘открываю 111, 11 ‘111Нажмите кнопку Microsoft>. вернуться к книгекликаем правой кнопкой
Do While wbСейчас обращение к могу добавить код Subscript out of то я уже пример ) то же действие
однострочным if, дабыSet FSO =Vitalts другую книгу 111
ГЅГІГ® ГЇГ*ðîëü Г*Г* Office, а затемImmediate WindowВот как можно создать Excel. мыши по имени = Nothing Set
этому файлу выглядит по причине отсутствия range автоматически не друг,Цитата описать одной строкой.
не закрывать, а Nothing: Все названия Excel oExcel.Visible = True
îòêðûòèå ГґГ*éëГ*, 11 — Параметры Excel.или нажатием комбинации новый объектЧтобы запустить только что рабочей книги (в wb = Workbooks.Open(Filename:=pName(i) следующим образом: окна екселя… кодЮрий М потому, что «мнения(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>У каждого свои
Что легче можно перенос для наглядности.Deep = 0 файлов в папке ‘False oExcel.Range(«A1»).Select ‘Выделил ГЅГІГ® ГЇГ*ðîëü Г*Г*Щелкните Популярное и клавишUserform
добавленный макрос, нажмите левой верхней части & fName) i1ый путь: не большой написан,: Глобальную переменную в
друзей должны совпадать понятия «правильности» будет понять и
для наглядности многострочныйEnd If активной книги, исключая стартовую ячейку oExcel.ActiveSheet.Paste èçìåГ*ГҐГЁГҐ oExcel.Visible = затем установите флажок
Ctrl+G,Alt+F8 окна редактора) и = i +Sub MyCode () просто стало интересно) стандартный модуль - всегда»? (это следуетвообще-то нет отредактировать? Ведро картошки If. В вашемEnd Function ее: ‘ВставилЭто для примера, True ‘False Windows(«AIC_SIP.xls»).Activate Показывать вкладку «Разработчик». Это окно помогает
Module. Откроется диалоговое окно в контекстном меню
1 Loop End ChDir _ «C:UsersCDesktopFOLDER»Aleksey1404 будет доступна всюду. из твоих слов)Правильность она «одна
можно отвезти на случае это неочевидность.впрочем, уже вижу
200?’200px’:»+(this.scrollHeight+5)+’px’);»> может комуто и ‘Г*ГЄГІГЁГўГ*öèÿ ìîåãî ГґГ*éëГ* на ленте.
при отладке кода.илиМакрос выбираем Sub
Workbooks.Open Filename:= _: И модуль неЦитата на всех мы
мопеде, не нуженЦитата косякDim fn As понадобится. Range(«A1:C3»).Select ‘âûáèðГ*Гѕ äèГ*ГЇГ*çîГ*Примечание. Лента является Оно выполняет рольClass Module(Macro). В спискеInsertDoober «C:UsersÍDesktopFOLDERFILENew.xls» дальше кодAleksey1404 нужно указывать.(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>но вся проблема за ценой не для этого БелАз.(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати, проверки названийно не критичный StringНо всегда есть ГїГ·ГҐГҐГЄ Selection.Copy ‘êîïèðóþ
частью интерфейса «Пользовательский области вывода для:Имя макроса>: Проверил,работает
работы с открытым, Вы наверно неЕсли книга уже в том -
постоим», только это Но если тебе файлов на самого
)With ActiveWorkbook но… Дальше у End SubВыдаёт ошибку интерфейс Microsoft Office отладки выражений иВ окне
(Macro name) выберите
ModuleSub Гав_Гав() PathForFile$ файломДальше работа с
с того конца открыта — зачем что она одна, не все понимают так себя у вас
Vitaltsfn = Dir(.Path меня куча строк
и что хочешь Fluent». позволяет вычислять отдельныеProject нужный макрос и. = Get_Folder & открытым файлом. начали программу писать
указывать путь? но для всех )
нравитЬся нет.: & «*.xls*») с заданием (макрос делай. Подскажите пожалуйстаВ меню Справка
выражения или выполнятьвыберите рабочую книгу, нажмите кнопкуКопируем код VBA (с «FILENew.xls» End SubИ когда мнеСначала следовало забить
deathogre разная!Цитата
, я тоже нефункция, представленная мнойnervDo Until fn короче написан). Мне как активизировать тот выберите пункт Справка: строки кода по в которую нужноВыполнить
веб-страницы или из Public Function Get_Folder() надо поменять путь в форму код,: Мне нужно вНе поверишь, есть(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Саш, мы уже против возвращает список файлов, эээ, и вы = «» что, перед каждой лист и работать Microsoft Visual Basic. одной. добавить объект, и(Run). другого источника) и
As String Set к этому файлу,а потом в
открытую книгу писать нюансы, но в как-то говорили наnerv заданной папки. Понятия
утверждаете что уIf fn <> командой ставить oExcel?
в нём (яРоман царьковНапример, введите выражение « кликните по нейУрок подготовлен для Вас вставляем его в
FSO = CreateObject(«Scripting.FileSystemObject») я его просто
прятки с изменения, через глобальную
целом правильность одинаковая
эту тему; твои: чуть меньше неверно, «самого себя» здесь меня извороты? .Name Then: _Всё!!! Получилось. Строка так понимаю, нужно
: кнопка Visual Basic
?j правой кнопкой мыши.
командой сайта office-guru.ru правую область редактора If FSO.FolderExists(«C:UsersCDesktopFOLDER») Then переписываю руками:
Excel переменную хочу обращаться
Я общаюсь не доводы отчасти верны, чем полностью нет, т.к. функцииЧем вам DirDebug.Print fnoExcel.Application.Run «‘111.xls’!ГЊГ*êðîñ1″сделала свою
WorkSheets сделать активным, подсвечена серым и» и нажмитеВ появившемся меню кликнитеИсточник: https://www.ablebits.com/office-addins-blog/2013/12/06/add-run-vba-macro-excel/
VBA (окно Get_Folder = «C:UsersCDesktopFOLDER»
2 путь:`ем играть. к этой книге только (и уже но не дляЦитата все равно, откуда не угодил?
fn = Dir работу. А Вам, а не всю не работает какEnterInsert
Перевел: Антон АндроновModule1 Else ‘ Get_FolderSub MyCode ()Странно, у меняЮрий М не столько) на всех случаев(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Можно написать на она вызывается. Думаю,Похоже, изначально неLoop Ципихович Эндрю, очень книгу) . Или быть?– в результатеи в раскрывшемсяАвтор: Антон Андронов). = «Y:PublicFolder1» End ChDir _ «Y:PublicFolder1″shift: Обращайтесь — кто форумах по эксель,для каких случаев 10 страниц «правильного» несложно удалить из правильно понял вас.
End With БОЛЬШОЕ СПАСИБО за ещё попроще, может
Юрик будет выведено текущее меню выберитеВ этой главе даётсяПодсказка: If Set FSO Workbooks.Open Filename:= _
позволяет открыть файл мешает? ) Public и почему то мои доводы не
кода, а можно коллекции лишний Item. В данном случае,Ну и собственно, помощь!!! после открытия книги,
: Меню: Сервис - значение переменнойUserform очень краткий обзорКак увеличить скорость = Nothing End «Y:PublicFolder1FILENew.xls» дальше код в Wb As Workbook
excelworld.ru
Как открыть книгу Excel в VBA
везде (кроме известных верны? то же действиеKuklP мне караз таки открытие книги по
Ципихович Эндрю можно как то Макрос — Редакторj,
редактора Visual Basic выполнения макроса? Function
работы с открытымExcel Sub Макрос1() Workbooks.Open
мне форумов поKuklP описать одной строкой.: Саша, ты из
было удобнее воспользоваться названию файла и
: если обращаетесь к запустить макрос написанный Visual Basic..Module в Excel. Если
В самом начале кодаВ принципе я почти файломбез автозапуска макросов Filename:=»D:ОтчетыСостояние ТС.xlsm» Set эксель) правильность одна.: Саш, ты посмотри
опиши одной строкой пушки по воробьям однострочным if, дабы папки активной: этому обекту тогда уже в Excel,
Или просто AltЧтобы открыть окноили
Вы любознательный читатель Вашего макроса VBA во всём разобрался,Вопрос: можно лиIvanOK Wb = ActiveWorkbook
Я никому не на себя со алгоритм сортировки (без стреляешь. Миша пишет: не закрывать, аКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>Set wb = КОНЕЧНО перед каждой а там уже — F11.
LocalsClass Module
и хотите узнать должны содержаться строки: осталось только понять, каким-то образом прописать: открылось когда жал MsgBox Wb.Name End
навязывал, даже не стороны. Ты упорно выгрузки на лист)Т.е. первый же перенос для наглядности. Workbooks.Open(ActiveWorkbook.Path & «» командой ставить oExcel!!!!! на много проще?Саня, нажмите
. еще больше информацииApplication.ScreenUpdating = False как не стирать
оба пути, чтобы шифт в самом Sub обсуждал этот вопрос пытаешься доказать всемЦитата
файл с несовпадающимКстати, проверки названий
planetaexcel.ru
Как открыть форму, а Excel скрыть или вовсе не открывать
& fn)S_e_mS_e_m: Хм… Вообще, еслиLocals WindowДля каждого из описанных о редакторе, тоApplication.Calculation = xlCalculationManual содержимое файла, при при обращении по экселе Файл-открыть, а
KL (с совершенно посторонними
участникам темы, что(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Что легче можно
именем — нужный. файлов на самого
—: С ВБ 6.0: Я очень прошу, я не ошибаюсь,
в меню выше объектов предусмотрено при желании безЕсли таких строк нет,
повторном запуске программы. первому пути (через не щелкая по: Или даже так:
людьми), но исходя твой громоздкий, глючный будет понять и Вариант Vitalts гораздо
себя у васPS: что-то код закончил. Перекинулся на помогите с задачкой:
то в MSView специальное окно, в
проблем найдете ресурсы то обязательно добавьте Практически уверен, что диск С), если самому файлу)))Public Wb As из их сообщений, в таком виде отредактировать? лучше подходит для нет. при каждом релоаде ВБ .Нет 2010
1) та что Office есть такаяредактора Visual Basic. котором будет создаваться с более подробным следующие строки в
всё дело вот файл найден, продолжалась
IvanOK Workbook Sub Макрос1() очевидно, что правильность код лучше, чем
подозреваю, что эту этого случая иMichael_S по разному кажет, (по работе надо). нужно, книга открылась.
фишка — макросы. В этом окне и храниться новый описанием. свой макрос, чтобы в этой строке:
работа, а, если: при етом коде Set Wb = одна. Это видно пятистрочный код Vitalts. длинную строку будет не привлекает внешних: Vitalts, в вашем пофиксил форматирование Никак не получается 2) Нужно скопировать
Вот эти макросы отображаются все переменные, код VBA. ПорядокПростейший способ запустить редактор
он работал быстрееoExcel = CreateObject(«Excel.Application») не найден, обращение появляется ексель, потом
Workbooks.Open (Filename:=»D:ОтчетыСостояние ТС.xlsm») по коду, по
Я понимаю, если сложнее понять и библиотек. Я уж варианте не хочет
nerv с таким кодом-> с этой книги
пишутся на VB. объявленные в текущей при этом такой: Visual Basic в (см. рисунок выше):Ведь тут явно происходило по второму
исчезает, потом появляется MsgBox Wb.Name End его стилю. Т.е. бы ты девушке, отредактировать, чем много не говорю о открывать файл (error): Зачем же такиеDim exl As диапазон ячеек 3) Но что бы процедуре. Окно делится
Код, который относится к Excel – нажатьВ самое начало кода создаётся новый файл. пути и далее, сама форма, а Sub все хорошие прогеры далекой от Экса,
CyberForum.ru
2 возможных пути открытия файла в VBA
правильных/правильно_отформатированных строк размере кода.
nerv, Саш, в извороты? не проще
Object Dim xlUp вставить в другой Exel’ем открыть проект… на столбцы, в
рабочей книге, должен комбинацию клавиш после всех строк, На что её опять же, продолжалась есель исчезает какKL видя код говорят, это доказывал. ИлиЦитатаnerv
вашем варианте жалуется воспользоватся многострочным If? As Object Dim
файл ексель этот
ну тока если которых содержатся имя, быть введён вAlt+F11 начинающихся с нужно заменить, чтобы работа.
ето избежать тоесть: Кстати, ChDir для «что такое хорошо, ты всех нас(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ведро картошки можно
: Я ни в
намой велосипед. Особо Selection As Object диапазон. скопировать исходник, создать значение и тип
соответствующий объект(то есть нажатьDim вместо этого открыватьДумалось сделать через нужно что бы открытия книги таким а что такое дураками считаешь? отвезти на мопеде, кого не стреляю,Mask не тестировал, но
Dim xlDown AsНу честно, очень макрос и туда
каждой переменной, иЭтаКнига клавишу(если строк, начинающихся существующий? on error resume просто появилась форма способом не нужен. плохо». Почему надоЦитата не нужен для я животных люблюи что он должен работать ) Object Dim xlAscending нужно!!!
код вставить)
эта информация обновляется(ThisWorkbook);Alt с
Ev next так:
в невидемом екселепоявилась Он нужен для
делать так, а(nerv)200?’200px’:»+(this.scrollHeight+5)+’px’);»>для каких случаев этого БелАзЯ привел написанный должен делать мне200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Example()
As Object DimЦипихович ЭндрюТока придётся ещё
автоматически в ходе
Код, который относится ки, удерживая её,Dim: Избыточно объявлять триSub MyCode () просто форма функции GetOpenFileName, которая, не иначе. мои доводы неего можно донести мной ранее код
не понятно. УSet Folder = xlGuess As Object
: вижу что файл и форму там выполнения программы. Окно
рабочему листу, должен нажать клавишунет, то вставляем
объектных переменных (oExcel, On error resumeесть ли у
кстати, тоже ужеЦитата верны? — и в руках, если (под свои нужды) меня задача - GetFileList(«d:Contacts») Dim xlTopToBottom Asв то же чертить новую :)Locals быть введён вF11 сразу после строки
oBook, oSheet). next ChDir _
кого каки ето не нужна, т.к.(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Хочешь быть нарциссом правда думаешь, что на то пошло.Цитата открыть файл.End Sub Object Dim xlSortNormal время вижуОлег филатовочень полезно при соответствующий объект
planetaexcel.ru
Visual Basic работа с файлами Excel (открытие на дозапись)
). После этого откроетсяSubВполне достаточно одной… «Y:PublicFolder1» Workbooks.Open Filename:= варианты решения етой уже давно есть — ради Бога кому-то интересно искать Речь не об
(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Т.е. первый же
За помощь спасибо.’ —————————————- As Object Subнестыковка: Вот Вам руководство отладке кода VBA.
Лист окно редактора Visual):.
_ «Y:PublicFolder1FILENew.xls» ChDir
проблемы
Application.FileDialog(msoFileDialogOpen)
Вывод
(передача пользователю) результатов
работы программы и других сообщений
осуществляется через диалоговое
окно сообщений.
Для
организации вывода информации используется
встроенная функция MsgBox.
Рассмотрим
варианты ее применения.
1. y
= Sqr(16)
MsgBox y
2. S
= 99
MsgBox
(“S=
” & S)
это
знак
конкатенации
– амперсанд;
применяется
для объединения нескольких строк в
одну
3. a
= 5: b = 101
MsgBox
(«a=»
& a & » » & «b=» &
b)
4. MsgBox
(«a=»
& a & Chr(13) & «b=» & b)
с
помощью этой функции вводится символ
перехода
на
новую строку (преобразует
число в символ)
Работа с объектами Excel
Объект
– это
базовая категория в объектно-ориентированном
прог-раммировании.
Объектная
модель Excel
представляет собой иерархию объектов,
подчиненных одному объекту Application,
который соответствует самому
приложению Excel. Объектами Excel
являются
рабочие книги, рабочие листы, диаграммы,
диапазоны ячеек, ячейки и т. д.
VBA
может программно управлять любым из
этих объектов.
Каждый
объект обладает
набором свойств,
методов
и событий.
Свойство
– это характеристика или параметр
объекта.
Метод
– это действие, которое может выполнять
объект.
Событие
– это действие, на которое объект
реагирует автоматически.
Управлять
объектом в VBA
можно 3 путями:
-
изменяя
свойства объекта; -
активизируя
метод, связанный с объектом; -
определяя
процедуру, запуск которой произойдет
как отклик на событие.
Вывод
информации в ячейку Excel
Ячейка
как объект Excel в VBA-программе
обозначается Cells(i,
j),
где i
–
номер строки, j–
номер столбца электронной таблицы.
Y
Значение
Y
будет
выведено
на
активный лист рабочей книги Excel в
ячейку B3
= 0.01
Cells(3,
2) = Y
С
Переменной
B
будет
присвоено значение,
которое
хранится в ячейке С5
(т.
е. содержимое ячейки С5)
читывание информации из
ячейки Excel
B = Cells(5,
3)
Средство vba для ввода информации
Ввод
информации от пользователя осуществляется
через диалоговое окно ввода. Реализуется
с помощью встроенной функции InputBox.
Dim
x As Single
x= Val (InputBox («Введите
x»))
Функция
InputBox
возвращает последовательность символов,
введенную в поле ввода (15)
как данные типа String
(строковый). Встроенная функция Val()
преобразует
строковое значение из поля ввода в
числовое.
Линейные вычислительные процессы
Линейный
алгоритм
характеризуется строгой последовательностью
реализации блоков в порядке их
расположения в схеме – сверху – вниз.
Условные блоки отсутствуют. Каждый
блок выполняется однократно.
Пример 1
Вычислить значение функции
при
k
= 33,5 x
= 17
1. Составим
алгоритм решения задачи.
2. В
окне редактора кода введем программный
код:
Option
Explicit
Sub
Линейный_процесс
()
Dim
k As
Single,
x As
Single,
y As
Single
‘объявление
переменных
k
= 3.5
x
= Val
(InputBox
(«Введите
значение x»))
y
= k
* Exp(Sin(x))
MsgBox
«y=»
& y
‘
вывод
результата в диалоговое окно
End
Sub
Команда
Option
Explicit
обязывает
объявлять все переменные в данной
программе. Может размещаться только в
разделе объявлений модуля.
Комментарии
–пояснения,
следуют за знаком «апостроф» ‘.
Игнорируются компилятором.
Соседние файлы в папке VBA
- #
- #
- #
Introduction
This is a tutorial about writing code in Excel spreadsheets using Visual Basic for Applications (VBA).
Excel is one of Microsoft’s most popular products. In 2016, the CEO of Microsoft said «Think about a world without Excel. That’s just impossible for me.” Well, maybe the world can’t think without Excel.
- In 1996, there were over 30 million users of Microsoft Excel (source).
- Today, there are an estimated 750 million users of Microsoft Excel. That’s a little more than the population of Europe and 25x more users than there were in 1996.
We’re one big happy family!
In this tutorial, you’ll learn about VBA and how to write code in an Excel spreadsheet using Visual Basic.
Prerequisites
You don’t need any prior programming experience to understand this tutorial. However, you will need:
- Basic to intermediate familiarity with Microsoft Excel
- If you want to follow along with the VBA examples in this article, you will need access to Microsoft Excel, preferably the latest version (2019) but Excel 2016 and Excel 2013 will work just fine.
- A willingness to try new things
Learning Objectives
Over the course of this article, you will learn:
- What VBA is
- Why you would use VBA
- How to get set up in Excel to write VBA
- How to solve some real-world problems with VBA
Important Concepts
Here are some important concepts that you should be familiar with to fully understand this tutorial.
Objects: Excel is object-oriented, which means everything is an object — the Excel window, the workbook, a sheet, a chart, a cell. VBA allows users to manipulate and perform actions with objects in Excel.
If you don’t have any experience with object-oriented programming and this is a brand new concept, take a second to let that sink in!
Procedures: a procedure is a chunk of VBA code, written in the Visual Basic Editor, that accomplishes a task. Sometimes, this is also referred to as a macro (more on macros below). There are two types of procedures:
- Subroutines: a group of VBA statements that performs one or more actions
- Functions: a group of VBA statements that performs one or more actions and returns one or more values
Note: you can have functions operating inside of subroutines. You’ll see later.
Macros: If you’ve spent any time learning more advanced Excel functionality, you’ve probably encountered the concept of a “macro.” Excel users can record macros, consisting of user commands/keystrokes/clicks, and play them back at lightning speed to accomplish repetitive tasks. Recorded macros generate VBA code, which you can then examine. It’s actually quite fun to record a simple macro and then look at the VBA code.
Please keep in mind that sometimes it may be easier and faster to record a macro rather than hand-code a VBA procedure.
For example, maybe you work in project management. Once a week, you have to turn a raw exported report from your project management system into a beautifully formatted, clean report for leadership. You need to format the names of the over-budget projects in bold red text. You could record the formatting changes as a macro and run that whenever you need to make the change.
What is VBA?
Visual Basic for Applications is a programming language developed by Microsoft. Each software program in the Microsoft Office suite is bundled with the VBA language at no extra cost. VBA allows Microsoft Office users to create small programs that operate within Microsoft Office software programs.
Think of VBA like a pizza oven within a restaurant. Excel is the restaurant. The kitchen comes with standard commercial appliances, like large refrigerators, stoves, and regular ole’ ovens — those are all of Excel’s standard features.
But what if you want to make wood-fired pizza? Can’t do that in a standard commercial baking oven. VBA is the pizza oven.
Yum.
Why use VBA in Excel?
Because wood-fired pizza is the best!
But seriously.
A lot of people spend a lot of time in Excel as a part of their jobs. Time in Excel moves differently, too. Depending on the circumstances, 10 minutes in Excel can feel like eternity if you’re not able to do what you need, or 10 hours can go by very quickly if everything is going great. Which is when you should ask yourself, why on earth am I spending 10 hours in Excel?
Sometimes, those days are inevitable. But if you’re spending 8-10 hours everyday in Excel doing repetitive tasks, repeating a lot of the same processes, trying to clean up after other users of the file, or even updating other files after changes are made to the Excel file, a VBA procedure just might be the solution for you.
You should consider using VBA if you need to:
- Automate repetitive tasks
- Create easy ways for users to interact with your spreadsheets
- Manipulate large amounts of data
Getting Set Up to Write VBA in Excel
Developer Tab
To write VBA, you’ll need to add the Developer tab to the ribbon, so you’ll see the ribbon like this.
To add the Developer tab to the ribbon:
- On the File tab, go to Options > Customize Ribbon.
- Under Customize the Ribbon and under Main Tabs, select the Developer check box.
After you show the tab, the Developer tab stays visible, unless you clear the check box or have to reinstall Excel. For more information, see Microsoft help documentation.
VBA Editor
Navigate to the Developer Tab, and click the Visual Basic button. A new window will pop up — this is the Visual Basic Editor. For the purposes of this tutorial, you just need to be familiar with the Project Explorer pane and the Property Properties pane.
Excel VBA Examples
First, let’s create a file for us to play around in.
- Open a new Excel file
- Save it as a macro-enabled workbook (. xlsm)
- Select the Developer tab
- Open the VBA Editor
Let’s rock and roll with some easy examples to get you writing code in a spreadsheet using Visual Basic.
Example #1: Display a Message when Users Open the Excel Workbook
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub Auto_Open()
MsgBox («Welcome to the XYZ Workbook.»)
End Sub
Save, close the workbook, and reopen the workbook. This dialog should display.
Ta da!
How is it doing that?
Depending on your familiarity with programming, you may have some guesses. It’s not particularly complex, but there’s quite a lot going on:
- Sub (short for “Subroutine): remember from the beginning, “a group of VBA statements that performs one or more actions.”
- Auto_Open: this is the specific subroutine. It automatically runs your code when the Excel file opens — this is the event that triggers the procedure. Auto_Open will only run when the workbook is opened manually; it will not run if the workbook is opened via code from another workbook (Workbook_Open will do that, learn more about the difference between the two).
- By default, a subroutine’s access is public. This means any other module can use this subroutine. All examples in this tutorial will be public subroutines. If needed, you can declare subroutines as private. This may be needed in some situations. Learn more about subroutine access modifiers.
- msgBox: this is a function — a group of VBA statements that performs one or more actions and returns a value. The returned value is the message “Welcome to the XYZ Workbook.”
In short, this is a simple subroutine that contains a function.
When could I use this?
Maybe you have a very important file that is accessed infrequently (say, once a quarter), but automatically updated daily by another VBA procedure. When it is accessed, it’s by many people in multiple departments, all across the company.
- Problem: Most of the time when users access the file, they are confused about the purpose of this file (why it exists), how it is updated so often, who maintains it, and how they should interact with it. New hires always have tons of questions, and you have to field these questions over and over and over again.
- Solution: create a user message that contains a concise answer to each of these frequently answered questions.
Real World Examples
- Use the MsgBox function to display a message when there is any event: user closes an Excel workbook, user prints, a new sheet is added to the workbook, etc.
- Use the MsgBox function to display a message when a user needs to fulfill a condition before closing an Excel workbook
- Use the InputBox function to get information from the user
Example #2: Allow User to Execute another Procedure
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub UserReportQuery()
Dim UserInput As Long
Dim Answer As Integer
UserInput = vbYesNo
Answer = MsgBox(«Process the XYZ Report?», UserInput)
If Answer = vbYes Then ProcessReport
End Sub
Sub ProcessReport()
MsgBox («Thanks for processing the XYZ Report.»)
End Sub
Save and navigate back to the Developer tab of Excel and select the “Button” option. Click on a cell and assign the UserReportQuery macro to the button.
Now click the button. This message should display:
Click “yes” or hit Enter.
Once again, tada!
Please note that the secondary subroutine, ProcessReport, could be anything. I’ll demonstrate more possibilities in example #3. But first…
How is it doing that?
This example builds on the previous example and has quite a few new elements. Let’s go over the new stuff:
- Dim UserInput As Long: Dim is short for “dimension” and allows you to declare variable names. In this case, UserInput is the variable name and Long is the data type. In plain English, this line means “Here’s a variable called “UserInput”, and it’s a Long variable type.”
- Dim Answer As Integer: declares another variable called “Answer,” with a data type of Integer. Learn more about data types here.
- UserInput = vbYesNo: assigns a value to the variable. In this case, vbYesNo, which displays Yes and No buttons. There are many button types, learn more here.
- Answer = MsgBox(“Process the XYZ Report?”, UserInput): assigns the value of the variable Answer to be a MsgBox function and the UserInput variable. Yes, a variable within a variable.
- If Answer = vbYes Then ProcessReport: this is an “If statement,” a conditional statement, which allows us to say if x is true, then do y. In this case, if the user has selected “Yes,” then execute the ProcessReport subroutine.
When could I use this?
This could be used in many, many ways. The value and versatility of this functionality is more so defined by what the secondary subroutine does.
For example, maybe you have a file that is used to generate 3 different weekly reports. These reports are formatted in dramatically different ways.
- Problem: Each time one of these reports needs to be generated, a user opens the file and changes formatting and charts; so on and so forth. This file is being edited extensively at least 3 times per week, and it takes at least 30 minutes each time it’s edited.
- Solution: create 1 button per report type, which automatically reformats the necessary components of the reports and generates the necessary charts.
Real World Examples
- Create a dialog box for user to automatically populate certain information across multiple sheets
- Use the InputBox function to get information from the user, which is then populated across multiple sheets
Example #3: Add Numbers to a Range with a For-Next Loop
For loops are very useful if you need to perform repetitive tasks on a specific range of values — arrays or cell ranges. In plain English, a loop says “for each x, do y.”
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub LoopExample()
Dim X As Integer
For X = 1 To 100
Range(«A» & X).Value = X
Next X
End Sub
Save and navigate back to the Developer tab of Excel and select the Macros button. Run the LoopExample macro.
This should happen:
Etc, until the 100th row.
How is it doing that?
- Dim X As Integer: declares the variable X as a data type of Integer.
- For X = 1 To 100: this is the start of the For loop. Simply put, it tells the loop to keep repeating until X = 100. X is the counter. The loop will keep executing until X = 100, execute one last time, and then stop.
- Range(«A» & X).Value = X: this declares the range of the loop and what to put in that range. Since X = 1 initially, the first cell will be A1, at which point the loop will put X into that cell.
- Next X: this tells the loop to run again
When could I use this?
The For-Next loop is one of the most powerful functionalities of VBA; there are numerous potential use cases. This is a more complex example that would require multiple layers of logic, but it communicates the world of possibilities in For-Next loops.
Maybe you have a list of all products sold at your bakery in Column A, the type of product in Column B (cakes, donuts, or muffins), the cost of ingredients in Column C, and the market average cost of each product type in another sheet.
You need to figure out what should be the retail price of each product. You’re thinking it should be the cost of ingredients plus 20%, but also 1.2% under market average if possible. A For-Next loop would allow you to do this type of calculation.
Real World Examples
- Use a loop with a nested if statement to add specific values to a separate array only if they meet certain conditions
- Perform mathematical calculations on each value in a range, e.g. calculate additional charges and add them to the value
- Loop through each character in a string and extract all numbers
- Randomly select a number of values from an array
Conclusion
Now that we’ve talked about pizza and muffins and oh-yeah, how to write VBA code in Excel spreadsheets, let’s do a learning check. See if you can answer these questions.
- What is VBA?
- How do I get set up to start using VBA in Excel?
- Why and when would you use VBA?
- What are some problems I could solve with VBA?
If you have a fair idea of how to you could answer these questions, then this was successful.
Whether you’re an occasional user or a power user, I hope this tutorial provided useful information about what can be accomplished with just a bit of code in your Excel spreadsheets.
Happy coding!
Learning Resources
- Excel VBA Programming for Dummies, John Walkenbach
- Get Started with VBA, Microsoft Documentation
- Learning VBA in Excel, Lynda
A bit about me
I’m Chloe Tucker, an artist and developer in Portland, Oregon. As a former educator, I’m continuously searching for the intersection of learning and teaching, or technology and art. Reach out to me on Twitter @_chloetucker and check out my website at chloe.dev.
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started