Методы передачи данных в Excel из Visual Basic
В этой статье рассматриваются различные методы передачи данных в Microsoft Excel из приложения Microsoft Visual Basic. В этой статье также представлены преимущества и недостатки каждого метода, чтобы можно было выбрать оптимальное решение.
Дополнительная информация
Для передачи данных в книгу Excel чаще всего используется автоматизация. Автоматизация обеспечивает максимальную гибкость при указании расположения данных в книге, а также возможность форматирования книги и создания различных параметров во время выполнения. С помощью службы автоматизации можно использовать несколько подходов для передачи данных:
- Передача ячейки данных по ячейкам
- Передача данных в массиве в диапазон ячеек
- Передача данных из набора записей ADO в диапазон ячеек с помощью метода CopyFromRecordset
- Создание таблицы QueryTable на листе Excel, содержащей результат запроса к источнику данных ODBC или OLEDB
- Передача данных в буфер обмена и вставка содержимого буфера обмена на лист Excel
Существуют также методы, которые можно использовать для передачи данных в Excel, которые не обязательно требуют автоматизации. Если вы работаете на стороне сервера приложений, это может быть хорошим подходом для того, чтобы отойдите от клиентов к массовой обработке данных. Для передачи данных без автоматизации можно использовать следующие методы:
- Передача данных в текстовый файл с разделителями-табуляции или запятыми, который Excel позже может проанализировать в ячейки на листе
- Передача данных на лист с помощью ADO
- Передача данных в Excel с помощью Динамического обмена данными (DDE)
В следующих разделах приведены более подробные сведения о каждом из этих решений.
Примечание При использовании Microsoft Office Excel 2007 можно использовать новый формат файла книги Excel 2007 (*.xlsx) при сохранении книг. Для этого найдите следующую строку кода в следующих примерах кода:
oBook.SaveAs "C:\Book1.xls"
Замените этот код следующей строкой кода:
oBook.SaveAs "C:\Book1.xlsx"
Кроме того, база данных Northwind по умолчанию не включена в Office 2007. Однако базу данных Northwind можно скачать из 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 см. в статье «Автоматизация Microsoft Excel из Visual Basic».
Использование автоматизации для передачи массива данных в диапазон на листе
Массив данных можно передать в диапазон из нескольких ячеек одновременно:
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 в образце базы данных Northwind с помощью метода 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 Files\Microsoft Office\Office\Samples\Northwind.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 базы данных Northwind, необходимо заменить следующую строку кода в примере кода:
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 см. в статье «Передача данных из набора записей 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 с помощью данных из образца базы данных Northwind:
'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 Files\Microsoft Office\Office\Samples\Northwind.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 также можно использовать в качестве механизма передачи данных на лист. Чтобы вставить данные в несколько ячеек на листе, можно скопировать строку, в которой столбцы разделены символами табуляции, а строки разделены символами каретки. В следующем коде показано, как 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 может открывать файлы с разделителями-табуляции или запятыми и правильно анализировать данные в ячейках. Эту функцию можно использовать, если вы хотите перенести большой объем данных на лист, используя небольшой объем (при наличии) службы автоматизации. Это может быть хорошим подходом для клиент-серверного приложения, так как текстовый файл может быть создан на стороне сервера. Затем можно открыть текстовый файл на клиенте с помощью службы автоматизации, где это необходимо.
В следующем коде показано, как создать текстовый файл с разделителями-запятыми из набора записей 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 Files\Microsoft Office\Office\Samples\Northwind.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 Files\Microsoft Office\Office\Excel.exe " & _ Chr(34) & "C:\Test.txt" & Chr(34), vbMaximizedFocus
Обратите внимание, что при использовании версии Office 2007 базы данных Northwind необходимо заменить следующую строку кода в примере кода:
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 был запущен с помощью инструкции Оболочки, а имя файла использовался в качестве аргумента командной строки. В предыдущем примере автоматизация не использовалась. Однако при необходимости можно использовать минимальный объем автоматизации, чтобы открыть текстовый файл и сохранить его в формате книги 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
Передача данных на лист с помощью ADO
С помощью поставщика Microsoft Jet OLE DB можно добавлять записи в таблицу в существующей книге Excel. «Таблица» в Excel — это просто диапазон с определенным именем. Первая строка диапазона должна содержать заголовки (или имена полей), а все последующие строки — записи. Ниже показано, как создать книгу с пустой таблицей с именем MyTable.
Excel 97, Excel 2000 и Excel 2003
- Запустите новую книгу в Excel.
- Добавьте следующие заголовки в ячейки A1:B1 листа Sheet1: 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 листа Sheet1: 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 для приложений в Access после установки Пакета обновления 2 (SP2) Office 2003 или после установки обновления для Access 2002, включенного в статью базы знаний Майкрософт 904018. Этот метод хорошо работает в среде Visual Basic для приложений из других приложений Office, таких как Word, Excel и Outlook.
Дополнительные сведения см. в следующей статье:
Дополнительные сведения об использовании ADO для доступа к книге Excel см. в статье «Как запрашивать и обновлять данные 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 команду в синтаксисе языка макросов Excel (XLM). Документация по XLM не входит в excel версий 97 и более поздних версий.
DDE не рекомендуется для взаимодействия с Excel. Автоматизация обеспечивает максимальную гибкость и предоставляет больше доступа к новым функциям, которые предлагает Excel.
Обратная связь
Были ли сведения на этой странице полезными?
Внедрение и автоматизация документов Office с помощью Visual Basic
При разработке приложения, использующего данные в документе Office, может быть полезно, чтобы эти данные были представлены непосредственно в приложении Visual Basic, чтобы пользователь могли просматривать и редактировать данные без необходимости переключения на приложение Office. Это можно сделать в Visual Basic с помощью элемента управления контейнером OLE.
В этой статье показано, как динамически создавать и автоматизировать документ Office с помощью элемента управления контейнерами OLE.
Дополнительная информация
Возможность вставки документа Office в Visual Basic предоставляется технологией компоновки и внедрения объектов (OLE) корпорации Майкрософт. OLE позволяет одному приложению разместить объект, принадлежащий другому приложению, удобным для конечного пользователя способом, но не требует, чтобы участвующие в нем приложения знали внутренние сведения другого приложения. Visual Basic предоставляет элемент управления контейнером OLE, позволяющий программистам Visual Basic добавлять объекты OLE в форму.
После внедрения объекта большинство серверов OLE поддерживают автоматизацию, чтобы позволить хост-приложению программно изменять объект или управлять им из кода. Чтобы получить ссылку на объект службы автоматизации, используйте свойство Object контейнера OLE. Это свойство возвращает объект службы автоматизации, который тесно соответствует внедренному определенному элементу.
Создание приложения Visual Basic, в котором размещается книга Excel
- Запустите Visual Basic и создайте новый стандартный проект. Form1 создается по умолчанию.
- На панели элементов управления добавьте три кнопки команд в Form1. Затем добавьте экземпляр элемента управления контейнера OLE. Когда элемент управления «Контейнер OLE» помещается в форму, он запрашивает тип объекта, который нужно вставить. В этом примере необходимо динамически добавить объект, поэтому нажмите кнопку «Отмена», чтобы закрыть диалоговое окно без добавления объекта.
- В окне кода для Form1 добавьте следующий код:
Option Explicit Dim oBook As Object Dim oSheet As Object Private Sub Command1_Click() On Error GoTo Err_Handler ' Create a new Excel worksheet. OLE1.CreateEmbed vbNullString, "Excel.Sheet" ' Now, pre-fill it with some data you ' can use. The OLE.Object property returns a ' workbook object, and you can use Sheets(1) ' to get the first sheet. Dim arrData(1 To 5, 1 To 5) As Variant Dim i As Long, j As Long Set oBook = OLE1.object Set oSheet = oBook.Sheets(1) ' It is much more efficient to use an array to ' pass data to Excel than to push data over ' cell-by-cell, so you can use an array. ' Add some column headers to the array. arrData(1, 2) = "April" arrData(1, 3) = "May" arrData(1, 4) = "June" arrData(1, 5) = "July" ' Add some row headers. arrData(2, 1) = "John" arrData(3, 1) = "Sally" arrData(4, 1) = "Charles" arrData(5, 1) = "Toni" ' Now add some data. For i = 2 To 5 For j = 2 To 5 arrData(i, j) = 350 + ((i + j) Mod 3) Next j Next i ' Assign the data to Excel. oSheet.Range("A3:E7").Value = arrData oSheet.Cells(1, 1).Value = "Test Data" oSheet.Range("B9:E9").FormulaR1C1 = "=SUM(R[-5]C:R[-2]C)" ' Do some auto formatting. oSheet.Range("A1:E9").Select oBook.Application.Selection.AutoFormat Command1.Enabled = False Command2.Enabled = False Command3.Enabled = True Exit Sub Err_Handler: MsgBox "An error occurred: " & Err.Description, vbCritical End Sub Private Sub Command2_Click() On Error GoTo Err_Handler ' Create an embedded object using the data ' stored in Test.xls. If this code is run in Microsoft Office ' Excel 2007, change the file name to Test.xlsx. OLE1.CreateEmbed "C:\Test.xls" Command1.Enabled = False Command2.Enabled = False Command3.Enabled = True Exit Sub Err_Handler: MsgBox "The file 'C:\Test.xls' does not exist" & _ " or cannot be opened.", vbCritical End Sub Private Sub Command3_Click() On Error Resume Next ' Delete the existing test file (if any). Kill "C:\Test.xls" ' Save the file as a native XLS file. oBook.SaveAs "C:\Test.xls" Set oBook = Nothing Set oSheet = Nothing ' Close the OLE object and remove it. OLE1.Close OLE1.Delete Command1.Enabled = True Command2.Enabled = True Command3.Enabled = False End Sub Private Sub Form_Load() Command1.Caption = "Create" Command2.Caption = "Open" Command3.Caption = "Save" Command3.Enabled = False End Sub
Создание приложения Visual Basic, в котором размещается документ Word
- Запустите Visual Basic и создайте новый стандартный проект. Form1 создается по умолчанию.
- На панели элементов управления добавьте три кнопки команд в Form1. Затем добавьте экземпляр элемента управления контейнера OLE. Когда элемент управления «Контейнер OLE» помещается в форму, он запрашивает тип объекта, который нужно вставить. В этом примере необходимо динамически добавить объект, поэтому нажмите кнопку «Отмена», чтобы закрыть диалоговое окно без добавления объекта.
- В окне кода для Form1 добавьте следующий код:
Option Explicit Dim oDocument As Object Private Sub Command1_Click() On Error GoTo Err_Handler ' Create a new Word Document. OLE1.CreateEmbed vbNullString, "Word.Document" ' Add some text to the document. The OLE.Object ' property returns the document object. Set oDocument = OLE1.object oDocument.Content.Select With oDocument.Application.Selection ' Add a heading at the top of the document. .Style = oDocument.Styles("Heading 1") .Font.Color = &HFF0000 .TypeText "Blue Sky Airlines" .ParagraphFormat.Alignment = 1 '[wdAlignParagraphCenter] .TypeParagraph .TypeParagraph ' Now add some text. .TypeText "Dear Mr. Smith," .TypeParagraph .TypeParagraph .TypeText "Thank you for your interest in our current fares " & _ "from Oakland to Sacramento. We guarantee to be " & _ "the lowest price for local flights, or we'll " & _ "offer to make your next flight FREE!" .TypeParagraph .TypeParagraph .TypeText "The current fare for a flight leaving Oakland " & _ "on October 4, 1999 and arriving in Sacramento " & _ "the same day is $54.00." .TypeParagraph .TypeParagraph .TypeText "We hope you will choose to fly Blue Sky Airlines." .TypeParagraph .TypeParagraph .TypeText "Sincerely," .TypeParagraph .TypeParagraph .TypeParagraph .TypeText "John Taylor" .TypeParagraph .Font.Italic = True .TypeText "Regional Sales Manager" .TypeParagraph End With ' Zoom to see entire document. OLE1.SizeMode = 3 OLE1.DoVerb -1 Command1.Enabled = False Command2.Enabled = False Command3.Enabled = True Exit Sub Err_Handler: MsgBox "An error occurred: " & Err.Description, vbCritical End Sub Private Sub Command2_Click() On Error GoTo Err_Handler ' Create an embedded object using the data ' stored in Test.doc. If this code is run in Microsoft Office ' Word 2007, change the file name to Test.docx. OLE1.CreateEmbed "C:\Test.doc" Command1.Enabled = False Command2.Enabled = False Command3.Enabled = True Exit Sub Err_Handler: MsgBox "The file 'C:\Test.doc' does not exist" & _ " or cannot be opened.", vbCritical End Sub Private Sub Command3_Click() On Error Resume Next ' Delete the existinf test file (if any). Kill "C:\Test.doc" ' Save the file as a native Word DOC file. oDocument.SaveAs "C:\Test.doc" Set oDocument = Nothing ' Close the OLE object and remove it. OLE1.Close OLE1.Delete Command1.Enabled = True Command2.Enabled = True Command3.Enabled = False End Sub Private Sub Form_Load() Command1.Caption = "Create" Command2.Caption = "Open" Command3.Caption = "Save" Command3.Enabled = False End Sub
Рекомендации по использованию контейнера OLE
- При внедрении из существующего файла данные, отображаемые в контейнере OLE, являются копией данных в файле. Любые внесенные изменения не сохраняются в одном файле автоматически. Хотя для сохранения результатов в определенный файл можно использовать метод, аналогичный приведенному выше, не все серверы OLE поддерживают эту возможность. Это не считается обычным поведением объекта OLE.
- Если выполняется связывание с файлом, то объект не может быть активирован на месте. Вместо этого, когда пользователь дважды щелкает объект, объект открывается в окне серверного приложения. На месте можно активировать только внедренные объекты.
- Элемент управления «Контейнер OLE» учитывает привязку данных. Если у вас есть база данных Access 97 или Access 2000, вы можете привязать элемент управления к полю объекта OLE в базе данных. При отображении формы данные извлекаются из базы данных и отображаются для изменения пользователем. Все изменения, внесенные пользователем, автоматически сохраняются в базе данных при закрытии объекта OLE. Чтобы сделать контейнер OLE-контейнер привязанным к данным, добавьте элемент управления данными Visual Basic и задайте для его свойства DatabaseName путь к базе данных. Затем задайте для RecordSource существующую таблицу в базе данных. Используйте свойство DataSource элемента управления OLE для привязки элемента управления к элементу управления данными Visual Basic, а затем задайте для свойства DataField значение, указывающее на определенное поле в наборе записей, содержащего объект OLE. Visual Basic выполняет все остальное.
- Размер и положение штриховки границы, которая отображается, когда контейнер активен на месте, определяется размером объекта и выбранными для элемента управления OLE. Эта граница отображается для пометки границ окна редактирования. Границы окна редактирования часто не соответствуют границам самого контейнера OLE; Это нормальное поведение для объекта OLE. Окно редактирования не может быть программно изменено из Visual Basic.
- Некоторые методы автоматизации могут не работать правильно, если объект не был активен на месте. Чтобы программно активировать объект OLE, используйте метод DoVerb и укажите vbOLEShow (-1) в качестве команды.
- Вы можете определить, отображается ли меню связанного или внедренного объекта в форме контейнера, настроив свойство NegotiateMenus формы. Если свойству NegotiateMenus дочерней формы присвоено значение True, а для контейнера определена строка меню, меню объекта помещаются в строку меню контейнера при активации объекта. Если в контейнере нет строки меню или свойству NegotiateMenus задано значение False, меню объекта не отображаются при его активации. Обратите внимание, что свойство NegotiateMenus не применяется к формам MDI, поэтому меню формы MDI невозможно объединить с меню активируемого объекта. Чтобы проиллюстрировать согласование меню, попробуйте сделать следующее с примером приложения, созданного в предыдущем разделе:
- Запустите приложение и нажмите кнопку «Создать», чтобы внедрить новый документ в контейнер OLE.
- Щелкните правой кнопкой мыши контейнер OLE и выберите команду «Изменить на месте», чтобы активировать объект. Обратите внимание, что меню для приложения объекта отображаются, так как свойство NegotiateMenus формы Form1 по умолчанию имеет значение True.
- Закройте форму, чтобы завершить приложение.
- Выбрав form1, щелкните «Редактор меню» в меню «Сервис».
- Создайте меню верхнего уровня с заголовком «Файл» и именем mnuFile. Задайте для свойства NegotiatePosition этого меню значение «1 Слева». Создайте пункт меню с заголовком «Открыть» и именем mnuOpen.
- Нажмите кнопку «ОК», чтобы закрыть редактор меню.
- Снова запустите приложение и нажмите кнопку «Создать», чтобы внедрить новый документ в контейнер OLE.
- Щелкните правой кнопкой мыши контейнер OLE и выберите команду «Изменить на месте», чтобы активировать объект. Обратите внимание, что меню для Form1 было объединено с меню для приложения объекта.
Visual Basic не позволяет управлять процессом слияния меню или вносить изменения в элементы меню сервера при добавлении. Однако вы можете изменить меню приложения Office с помощью службы автоматизации с помощью следующего кода:
' This code disables the Insert|Object item on the merged menu. Dim oMenuBar As Object Set oMenuBar = oBook.Application.CommandBars("Worksheet Menu Bar") oMenuBar.Controls("&Insert").Controls("&Object. ").Enabled = False
Обратите внимание, что перед активным размещением объекта может потребоваться внести некоторые изменения. В противном случае изменения могут не отображаться в объединенном меню.
Примечание Этот маркер не применяется к Microsoft Office Excel 2007 или Microsoft Office Word 2007.
OLE1.DoVerb -1 '[vbOLEShow] With oBook.Application.CommandBars("Standard") .Position = 4 '[msoBarFloating] .Visible = True End With
OLE1.object.SaveAs ("C:\MyNewFile.doc")
Устранение неполадок в решениях Office
Проблемы при создании, обновлении и открытии проектов
При создании или открытии проектов Office могут возникнуть следующие проблемы.
Проблема 1. Невозможно создать проект
Если при попытке создать или открыть проект Office возникает ошибка, но у Visual Studio недостаточно сведений для определения причины, попробуйте закрыть проект, выйти из Visual Studio и начать снова.
Если вы пытаетесь создать проект уровня документа, возможно, что другой документ с тем же именем, что и документ в новом проекте, уже открыт в Excel или Word. Убедитесь, что все остальные экземпляры Excel или Word закрыты.
Проблема 2. Свойства элемента управления теряются при создании проекта на основе документа из существующего проекта
Если вы создаете новый проект Office на основе документа из существующего проекта, свойства всех элементов управления, которые находятся в документе, не копируются в новый проект. Сбросьте свойства для всех существующих элементов управления вручную. Кроме того, можно сохранить свойства элемента управления, создав копию существующего проекта вместо создания нового проекта или загрузив существующий проект в новое решение (в конструкторе) и скопировав и вставив элементы управления из существующего документа в новый документ.
Проблема 3. Ошибки при создании проекта книги Excel на основе существующей книги
При создании проекта книги Excel на основе существующей книги может возникнуть сочетание следующих ошибок.
- Из Excel: «Предупреждение о конфиденциальности. Этот документ содержит макросы, элементы ActiveX, сведения о пакете расширения XML или веб-компоненты. К ним могут относиться персональные данные, которые не могут быть удалены инспектором документов».
- Из Visual Studio: «Designer не удалось загрузить правильно».
Эти ошибки могут возникнуть при попытке создать проект, основанный на книге, в которой были удалены персональные данные с помощью инспектора документов. Чтобы избежать этой проблемы, перед созданием проекта выполните следующие действия.
- Откройте книгу в Excel.
- В Excel откройте Центр управления безопасностью.
- На вкладке Параметры конфиденциальности снимите флажок Удалить персональные данные из файла при сохранении проверка.
- Сохраните книгу и закройте Excel.
Проблема 4. Не удается открыть проект после миграции
После миграции решения Office в Microsoft Office 2010 проект нельзя открыть на компьютере разработки, на котором установлена только система Microsoft Office 2007. Могут возникнуть следующие ошибки.
- «Один или несколько проектов в решении загружены неправильно. Дополнительные сведения см. в окне вывода.
- «Не удается создать проект, так как приложение, связанное с этим типом проекта, не установлено на этом компьютере. Необходимо установить приложение Microsoft Office, связанное с этим типом проекта».
Кроме того, убедитесь, что перенесенные проекты открываются только на компьютерах разработки с уже установленным Microsoft Office 2010.
Проблема 5. Ошибки в обновленных проектах уровня документов Office 2003, содержащих Windows Forms элементов управления
Если вы обновляете проект уровня документа Microsoft Office 2003 и документ содержит Windows Forms элементов управления, обновленный проект может иметь ошибки компиляции или среды выполнения. Чтобы избежать этой проблемы, установите visual Studio 2005 Tools for Office Second Edition Runtime на компьютере разработки перед обновлением проекта. Эта версия среды выполнения доступна в виде распространяемого пакета из Центра загрузки Майкрософт на странице Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime (VSTO 2005 SE) (x86).
После завершения обновления проекта можно удалить среду выполнения Visual Studio 2005 Tools for Office Second Edition с компьютера разработки, если она не используется другими решениями Office.
Проблемы при использовании конструкторов
При работе с конструктором документов, книг или листов в проектах уровня документа могут возникнуть следующие проблемы.
Проблема 1. не удалось правильно загрузить Designer
Visual Studio не может открыть конструктор в следующих случаях:
- Excel или Word уже открыты и отображает модальное диалоговое окно. Чтобы открыть конструктор, проверка, чтобы узнать, открыто ли в Excel или Word модальное диалоговое окно, и закрыть все открытые модальные диалоговые окна. Если модальные диалоговые окна не открыты, могут потребоваться другие действия, прежде чем Excel или Word ответит.
- В настоящее время выполняется отладка проекта. Чтобы открыть конструктор, остановите или завершите отладку.
- Надстройка VSTO Для Excel, установленная на компьютере разработки, отображает диалоговое окно при запуске Excel. Чтобы создать проект уровня документа Excel, необходимо сначала отключить надстройку VSTO.
Проблема 2. Элементы управления отображаются в виде черных прямоугольников на документе или листе
Если вы группируете элементы управления в документе или листе, Visual Studio больше не распознает их. Сгруппированные элементы управления недоступны в окне Свойства , и они отображаются в виде черных прямоугольников на документе или листе. Чтобы восстановить их функциональность, необходимо разгруппировать элементы управления.
Проблема 3. Элементы управления в шаблоне Word не отображаются в Visual Studio
Если открыть шаблон Word в конструкторе Visual Studio, элементы управления в шаблоне, которые не соответствуют тексту, могут не отображаться. Это связано с тем, что Visual Studio открывает Word шаблонов в обычном режиме. Чтобы просмотреть элементы управления, выберите меню Вид, наведите указатель мыши на пункт Microsoft Office Word Вид, а затем выберите Пункт Макет печати.
Проблема 4. Команда вставки картинок в конструкторе Visual Studio ничего не делает
Если excel или Word открыт в конструкторе Visual Studio, при нажатии кнопки Картинка на вкладке Иллюстрации на ленте не открывается область задач Картинка. Чтобы добавить картинку, необходимо открыть копию книги или документа, которые находятся в папке проекта main (а не в папке \bin) за пределами Visual Studio, добавить картинку, а затем сохранить книгу или документ.
Проблемы при написании кода
При написании кода в проектах Office могут возникнуть следующие проблемы.
Проблема 1. Некоторые события объектов Office недоступны при использовании C#
В некоторых случаях при попытке получить доступ к определенному событию экземпляра основной сборки взаимодействия (PIA) Office в проекте Visual C# может возникнуть ошибка компилятора, подобная приведенной ниже.
Неоднозначность между Microsoft.Office.Interop.Excel._Application.NewWorkbook и Microsoft.Office.Interop.Excel.AppEvents_Event.NewWorkbook
Эта ошибка означает, что вы пытаетесь получить доступ к событию, имя которого совпадает с именем другого свойства или метода объекта . Чтобы получить доступ к событию, необходимо привести объект к его интерфейсу события.
Типы PIA Office с событиями реализуют два интерфейса: основной интерфейс со всеми свойствами и методами и интерфейс событий, содержащий события, предоставляемые объектом . Эти интерфейсы событий используют соглашение об именовании _EventsEvent, например AppEvents_Event и ApplicationEvents2_Event. Если вам не удается получить доступ к событию, которое вы планируете найти в объекте, приведите объект к его интерфейсу событий.
Например, Application объекты имеют NewWorkbook событие и NewWorkbook свойство . Чтобы обработать NewWorkbook событие, приведите Application к интерфейсу AppEvents_Event . В следующем примере кода показано, как это сделать в проекте уровня документа для Excel.
private void ThisWorkbook_Startup(object sender, System.EventArgs e) < ((Excel.AppEvents_Event)this.Application).NewWorkbook += new Excel.AppEvents_NewWorkbookEventHandler(ThisWorkbook_NewWorkbook); >void ThisWorkbook_NewWorkbook(Excel.Workbook Wb) < // Perform some work here. >
Проблема 2. Не удается ссылаться на классы PIA Office в проектах, предназначенных для платформа .NET Framework 4 или платформа .NET Framework 4.5
В проектах, предназначенных для платформа .NET Framework 4 или платформа .NET Framework 4.5, код, ссылающийся на класс, определенный в PIA Office, не компилируется по умолчанию. Классы в ЛИЧНЫХ кодах используют класс objectname для>соглашения об именовании, например DocumentClass и WorkbookClass. Например, следующий код из проекта надстройки VSTO Word не компилируется.
Word.DocumentClass document = (Word.DocumentClass) Globals.ThisAddIn.Application.ActiveDocument;
Dim document As Word.DocumentClass = Globals.ThisAddIn.Application.ActiveDocument
Этот код приводит к следующим ошибкам компиляции:
- Visual Basic: «Ссылка на класс DocumentClass не допускается, если его сборка связана с помощью режима No-PIA».
- Visual C#: «Тип взаимодействия » Microsoft.Office.Interop. Word. Не удается внедрить DocumentClass. Вместо этого используйте применимый интерфейс».
Чтобы устранить эту ошибку, измените код для ссылки на соответствующий интерфейс. Например, вместо ссылки на DocumentClass объект, а на экземпляр Document интерфейса.
Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;
Dim document As Word.Document = Globals.ThisAddIn.Application.ActiveDocument
Проекты, предназначенные для платформа .NET Framework 4 или платформа .NET Framework 4.5, по умолчанию автоматически внедряют все типы взаимодействия из ЛИЧНЫХ сведений Office. Эта ошибка компиляции возникает из-за того, что функция внедренных типов взаимодействия работает только с интерфейсами, а не классами. Дополнительные сведения об интерфейсах и классах в основных сборках взаимодействия Office см. в статье Обзор классов и интерфейсов в основных сборках взаимодействия Office. Дополнительные сведения о функции внедренных типов взаимодействия в проектах Office см. в статье Проектирование и создание решений Office.
Проблема 3. Ссылки на классы Office не распознаны
Некоторые имена классов, например Application, находятся в нескольких пространствах имен, таких как Microsoft.Office.Interop.Word и System.Windows.Forms. По этой причине оператор Import/using в верхней части шаблонов проектов содержит сокращенную квалифицированную константу, например:
using Word = Microsoft.Office.Interop.Word;
Imports Word = Microsoft.Office.Interop.Word
Для использования инструкции Import/using необходимо различать ссылки на классы Office с помощью квалификатора Word или Excel, например:
Word.Document doc;
Dim doc As Word.Document
Если вы используете неквалифицированные объявления, например, вы получите ошибки.
Document doc; // Class is ambiguous
Dim doc As Document ' Class is ambiguous
Несмотря на то, что вы импортировали пространство имен Word или Excel и имеете доступ ко всем классам в нем, необходимо полностью определить все типы с помощью Word или Excel, чтобы удалить неоднозначность пространства имен.
Проблемы при сборке проектов
При создании проектов Office могут возникнуть следующие проблемы.
Проблема 1. Не удается создать проект уровня документа, основанный на документе с ограниченными разрешениями
Visual Studio не может создавать проекты уровня документа, если у документа есть ограниченные разрешения. Если проект содержит документ с ограниченными разрешениями, он не будет компилироваться, и вы получите следующее сообщение в окне Список ошибок .
Если вы хотите включить документ с ограниченными разрешениями, используйте документ без ограничений при разработке и сборке решения. Затем примените ограниченные разрешения к документу в расположении публикации после публикации решения.
Проблема 2. Ошибки компилятора возникают после удаления элемента управления NamedRange
При удалении NamedRange элемента управления с листа, который не является активным листом в конструкторе, автоматически созданный код может не быть удален из проекта и могут возникнуть ошибки компилятора. Чтобы убедиться, что код удален, перед удалением элемента управления всегда следует выбирать лист, содержащий NamedRange элемент управления , чтобы сделать его активным. Если автоматически созданный код не удаляется при удалении элемента управления, конструктор может удалить код, активировав лист и внося изменения, чтобы лист помечался как измененный. При перестроении проекта код удаляется.
Проблемы при отладке проектов
При отладке проектов Office могут возникнуть следующие проблемы.
Проблема 1. Запрос на удаление появляется при публикации и установке решения на компьютере разработки
При отладке решения Office может появиться следующая ошибка.
Настройка не может быть установлена, так как в настоящее время установлена другая версия и не может быть обновлена из этого расположения.
Эта ошибка указывает на то, что вы ранее опубликовали и установили решение Office на компьютере разработки. Чтобы предотвратить появление сообщения, удалите решение из списка установленных на компьютере программ перед отладкой решения. Кроме того, можно создать другую учетную запись пользователя на компьютере разработки, чтобы протестировать установку опубликованного решения.
Проблема 2. Проекты уровня документа, созданные в сетевых расположениях UNC, не выполняются из Visual Studio
Если вы создаете проект уровня документа для Excel или Word в сетевом расположении UNC, необходимо добавить расположение документа в список надежных расположений в Excel или Word. В противном случае настройка не будет загружена при попытке запуска или отладки проекта в Visual Studio. Дополнительные сведения о доверенных расположениях см. в разделе Предоставление доверия документам.
Проблема 3. Потоки не останавливаются правильно после отладки
Проекты Office в Visual Studio следуют соглашению об именовании потоков, которое позволяет отладчику правильно закрыть программу. При создании потоков в решении следует присвоить каждому потоку имя с префиксом VSTA_, чтобы обеспечить правильную обработку этих потоков при остановке отладки. Например, можно задать Name свойство потока, ожидающего VSTA_NetworkListener сетевого события.
Проблема 4. Не удается запустить или отладить решение Office на компьютере разработки
Если вы не можете запустить или разработать проект Office на компьютере разработки, может появиться следующее сообщение об ошибке.
Не удалось загрузить настройку, так как не удалось создать домен приложения.
Visual Studio использует Fusion, загрузчик сборок платформа .NET Framework, чтобы кэшировать сборки перед загрузкой решений Office. Убедитесь, что Visual Studio может выполнять запись в кэш Fusion, и повторите попытку. Дополнительные сведения см. в разделе Сборки теневого копирования.
Проблема 5. Ошибка при остановке отладчика в проекте уровня документа после использования правки и продолжения
Если вы используете команду «Изменить» и «Продолжить«, чтобы внести изменения в код в проекте уровня документа для Excel или Word во время работы проекта в режиме приостановки, при остановке отладчика может появиться диалоговое окно со следующим сообщением об ошибке.
Прекращение процесса в его текущем состоянии может привести к нежелательным результатам, включая потерю данных и нестабильность системы.
Независимо от того, выбрано ли в диалоговом окне значение Да или Нет, Visual Studio завершает процесс Excel или Word и останавливает отладчик. Чтобы остановить отладку проекта без отображения этого диалогового окна, закройте Excel или Word напрямую, а не останавливайте отладчик в Visual Studio.
Ссылки
- Устранение неполадок с решениями Office
- Устранение неполадок с безопасностью решения Office
- Устранение неполадок с развертыванием решения Office
Excel Как Открыть Редактор Vba в Excel
По умолчанию Excel будет запоминать ваш последний измененный рабочий лист при выходе из программы Excel каждый раз, и когда вы откроете книгу в следующий раз, этот лист будет отображаться первым. Предположим, у вас есть большая книга с сотнями листов. Можно ли находить конкретную часто используемую таблицу каждый раз при запуске файла Excel?
С помощью следующего простого кода VBA он автоматически перейдет на конкретный рабочий лист, который вы определили, независимо от того, какой рабочий лист использовался и сохранялся в последний раз.
Открыть конкретный лист в книге с кодом VBA
Выполните следующие шаги, чтобы завершить эту задачу:
1. Откройте книгу, которую хотите использовать.
2. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.
3. На левой панели выберите имя книги, которую вы хотите использовать (если левая панель скрыта, щелкните Вид > Обозреватель проекта чтобы показать это), затем дважды щелкните Эта рабочая тетрадь , чтобы открыть модуль, а затем скопируйте и вставьте следующий код VBA на правой панели. Смотрите скриншот:
Примечание: В приведенном выше коде «Мастер-лист«- это имя рабочего листа, необходимого для запуска при каждом открытии книги, вы можете изменить его на свое собственное.

Теперь, когда вы в следующий раз откроете книгу, нажмите Включить контент, и он сразу перейдет на ваш конкретный рабочий лист. Это предупреждение не будет отображаться в более позднем процессе открытия, и ваш конкретный рабочий лист всегда будет открываться первым каждый раз.

Автоматически открывать конкретную книгу при включении Excel с помощью Kutools for Excel
Если вам нужно использовать одну рабочую книгу каждый день, вы можете выбрать автоматическое открытие этого рабочего листа при включении Excel каждый раз, Kutools for Excel.
Если вы установили Kutools for Excel, просто нужно добавить книгу в Автоматически открывать эти листы в следующий раз list, то при каждом открытии Excel книга открывается одновременно .:
1. Откройте используемую книгу и щелкните Кутулс Плюс> Workbook > Автоматически открывать эти книги в следующий раз. см. снимок экрана:

2. В появившемся диалоговом окне проверьте книгу и щелкните Ok. Затем, пока вы включаете Excel, открывается книга.

Наконечник: Если вам не нужно открывать ее в следующий раз, снимите флажок с книги в диалоговом окне, если вам больше не нужно открывать ее автоматически, выберите ее и нажмите Очистить чтобы удалить его из списка диалога.
Автоматически открывать книги при включении Excel в следующий раз
Добавление книг в папку избранного с помощью вкладки Office
Если вы просто хотите щелкнуть, найти определенные книги и открыть их, когда вам нужно, вы можете бесплатно установить Office Tab и добавьте книги в Избранные папку.
Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!
После бесплатной установки вкладки Office выполните следующие действия:
Откройте книги, которые нужно добавить в избранное, и нажмите Office Tab > Мои Избранные > Добавить все в эту группу. Смотрите скриншот:

Теперь все книги добавлены в папку «Избранное» и нажмите Office Tab > Мои Избранные стрелкой вниз чтобы выбрать книгу для открытия, если вам нужно, и если вы хотите открыть все это, нажмите Открыть эту группу.

[expert_bq в схеме будут ошибки — они сразу будут найдены и показаны в сообщении, с указанием номера строки и столбца, в которых ошибка. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] 25. Проверьте правильность работы созданной Вами таблицы. Введите в ячейку C5 значение 100 и нажмите клавишу Enter . В ячейке C7 должен появиться результат 95,00р. , а в ячейке C5 отобразиться значение 100,00р .
Как создать свою надстройку?
Наконечник: Если вам не нужно открывать ее в следующий раз, снимите флажок с книги в диалоговом окне, если вам больше не нужно открывать ее автоматически, выберите ее и нажмите Очистить чтобы удалить его из списка диалога.
Настройка среды Visual Basic Editor

Рис. 1. Вкладка Editor диалогового окна VBE Options (Параметры)
Вкладка Editor
На рис. 1 показаны параметры, доступ к которым можно получить, щелкнув на вкладке Editor (Редактор).

Рис. 2. Автоматическая вставка объектов при ручном вводе кода
Если включен параметр Auto Quick Info (Отображать краткие сведения), VBE будет отображать информацию об аргументах функций, свойств и методов, названия которых вы вводите с клавиатуры. Рекомендуется всегда оставлять эту настройку включенной. На рис. 3 отображается синтаксис свойства Cells.

Рис. 3. Автоматическое отображение кратких сведений о синтаксисе
Если включен параметр Auto Data Tips, VBE отображает при отладке кода значение переменной, над которой находится указатель мыши. Рекомендуется всегда держать его включенным.
Когда параметр Procedure Separator (Разделение процедур) включен, в конце каждой процедуры в окне кода отображаются специальные разделители. Если вам нравятся эти визуальные подсказки окончания процедуры, выставляйте данный флажок.
Вкладка Editor Format
Параметры на этой вкладке определяют формат шрифта кода в VBE и некоторые иные свойства (рис. 4).

Рис. 4. Вкладка Editor Format в диалоговом окне Options
Параметр Code Colors (Цвета кода). Предоставляет возможность выбрать цвета кода (текста и фона) и индикатора, который используется для выделения разных элементов программы VBA. Цвета, конечно, выбираются в зависимости от личных предпочтений. Вы можете согласиться с цветами, принятыми по умолчанию. Для разнообразия можете изменить эти настройки.
Список Size (Размер). Определяет размер шрифта кода модулей VBA. Эта настройка зависит от личных предпочтений, которые, в свою очередь, определяются разрешением монитора и вашим зрением. По умолчанию размер задан равным 10.
Параметр Margin Indicator Ваг (Полоса индикатора границы). Отображает вертикальную полосу вдоль левой границы окна кода, на которой высвечиваются всевозможные индикаторы. Его необходимо выставить; в противном случае вы не увидите полезные графические извещения при отладке кода.
Вкладка General
На рис. 5 показаны параметры, доступные на вкладке General (Общие) диалогового окна Options.

Раздел Form Grid Settings (Параметры сетки формы). Находящиеся в этом разделе параметры предназначены для настройки пользовательских диалоговых окон; с их помощью определяются параметры сетки, которая облегчает позиционирование элементов управления в окне UserForm.
Флажок Show ToolTips (Показать подсказки). Определяет поведение кнопок панели инструментов. Рекомендуется всегда его устанавливать.
Раздел Edit and Continue (Редактировать и продолжать). Содержит единственный флажок, который может оказаться полезным в процессе отладки. В случае установки этого флажка VBA отображает сообщение, если переменные теряют присвоенные им значения в результате появления каких-либо проблем.
Раздел Compile (Компиляция). Находящиеся в этом разделе два параметра управляют процессом компиляции кода. Рекомендуется установить оба этих параметра. На современных компьютерах компиляция кода происходит практически мгновенно, если его размеры сравнительно невелики.
Вкладка Docking

[1] По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 177–183. [expert_bq у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Как следует из названия, в самом нижнем варианте исправно будут работать все макросы, имеющие цифровую подпись. А в двух первых вариантах они будут отключены полностью. После того, как мы сделали выбор, нажимаем кнопку «OK».
Настройка среды Visual Basic Editor
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
