В этом уроке я покажу Вам самые популярные макросы в VBA Excel, которые вы сможете использовать для оптимизации своей работы. VBA — это язык программирования, который может использоваться для расширения возможностей MS Excel и других приложений MS Office. Это чрезвычайно полезно для пользователей MS Excel, поскольку VBA может использоваться для автоматизации вашей работы и значительно увеличить Вашу эффективность. В этой статье Вы познакомитесь с VBA и я вам покажу некоторые из наиболее полезных, готовых к использованию примеров VBA. Вы сможете использовать эти примеры для создания собственных скриптов, соответствующих Вашим потребностям.
Вам не нужен опыт программирования, чтобы воспользоваться информаций из этой статьи, но вы должны иметь базовые знания Excel. Если вы еще учитесь работать с Excel, я бы рекомендовал Вам прочитать статью 20 формул Excel, которые вам нeобходимо выучить сейчас, чтобы узнать больше о функциональных возможностях Excel.
Я подготовил для вас несколько самых полезных примеров VBA Excel с большой функциональностью, которую вы сможете использовать для оптимизации своей работы. Чтобы их использовать, вам необходимо записать их в файл. Следующий параграф посвящен установке макроса Excel. Пропустите эту часть, если вы уже знакомы с этим.
Table of Contents
Как включить макросы в Excel
В Excel нажмите комбинацию клавиш alt + F11. Это приведет вас к редактору VBA в MS Excel. Затем щелкните правой кнопкой мыши папку Microsoft Excel Objects слева и выберите Insert => Module. Это место, где сохраняются макросы. Чтобы использовать макрос, вам нужно сохранить документ Excel как макрос. Из табуляции File => Save as, выберите Save as macro-enabled Workbok (расширение .xlsm) Теперь пришло время написать свой первый макрос!
1. Копирование данных из одного файла в другой.
Очень полезный макрос, поскольку он показывает, как скопировать ряд данных изнутри vba и как создать и назвать новую книгу. Вы можете изменить этот макрос в соответствии с вашими собственными требованиями:
Sub CopyFiletoAnotherWorkbook() Sheets("Example 1").Range("B4:C15").Copy Workbooks.Add ActiveSheet.Paste Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:TempMyNewBook.xlsx" Application.DisplayAlerts = True End Sub
2. Отображение скрытых строк
Иногда большие файлы Excel можно содержать скрытые строки для большей ясности И для лучшего удобства пользователей. Вот один макрос, который отобразит все строки из активной рабочей таблицы:
Sub ShowHiddenRows() Columns.EntireColumn.Hidden = False Rows.EntireRow.Hidden = False End Sub
3. Удаление пустых строк и столбов
Пустые строки в Excel — может быть проблемой для обработки данных. Вот как избавиться от них:
Sub DeleteEmptyRowsAndColumns() Dim MyRange As Range Dim iCounter As Long Set MyRange = ActiveSheet.UsedRange For iCounter = MyRange.Rows.Count To 1 Step -1 If Application.CountA(Rows(iCounter).EntireRow) = 0 Then Rows(iCounter).Delete End If Next iCounter For iCounter = MyRange.Columns.Count To 1 Step -1 If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then Columns(iCounter).Delete End If Next iCounter End Sub
4. Нахождение пустых ячеек
Sub FindEmptyCell() ActiveCell.Offset(1, 0).Select Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1, 0).Select Loop End Sub
#### 5. Заполнение пустых ячеек
Как упоминалось ранее, пустые ячейки препятствуют обработке данных и созданию сводных таблиц. Вот один примерный код, который заменяет все пустые ячейки на 0. Этот макрос имеет очень большое приложение, потому что Вы можете использовать его для поиска и замены результатов N/A, а также других символов, таких как точки, запятые или повторяющиеся значения:
Sub FindAndReplace() Dim MyRange As Range Dim MyCell As Range Select Case MsgBox("Can't Undo this action. " & _ "Save Workbook First?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select Set MyRange = Selection For Each MyCell In MyRange If Len(MyCell.Value) = 0 Then MyCell = 0 End If Next MyCell End Sub
#### 6. Сортировка данных
Следующий макрос сортирует по возрастанию все числа из столбца активной ячейки. Просто дважды нажмите любую ячейку из столбца, который вы хотите отсортировать.
NB: Здесь нам нужно поставить этот код в Sheet1 (папка Microsoft Excel Objects), а не в Module1 (папка Modules):
Private Sub Worksheet_BeforeDoubleClick (ByVal Target as Range, Cancel As Boolean) Dim LastRow As Long LastRow = Cells (Rows.Count, 1) .End (xlUp) .Row Rows ("6:" & LastRow) .Sort _ Key1: = Cells (6, ActiveCell.Column), _ Order1: = xlAscending End Sub
#### 7. Удаление пустых пространств
Иногда данные в книге содержат дополнительные пробелы (whitespace charachters), которые могут мешать анализу данных и коррумпировать формулы. Вот один макрос, который удалит все пробелы из предварительно выбранного диапазона ячеек:
Sub TrimTheSpaces() Dim MyRange As Range Dim MyCell As Range Select Case MsgBox("Can't Undo this action. " & _ "Save Workbook First?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select Set MyRange = Selection For Each MyCell In MyRange If Not IsEmpty(MyCell) Then MyCell = Trim(MyCell) End If Next MyCell End Sub
#### 8. Выделение дубликатов цветом
Иногда в нескольких столбцах, которые мы хотели бы осветить, есть повторяющиеся значения. Этот макрос делает именно это:
Sub HighlightDuplicates() Dim MyRange As Range Dim MyCell As Range Set MyRange = Selection For Each MyCell In MyRange If WorksheetFunction.CountIf(MyRange, MyCell.Value) > 1 Then MyCell.Interior.ColorIndex = 36 End If Next MyCell End Sub
#### 9. Выделение десяти самых высоких чисел
Этот код будет отображать десять самых высоких чисел из набора ячеек:
Sub TopTen() Selection.FormatConditions.AddTop10 Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .TopBottom = xlTop10Top .Rank = 10 .Percent = False End With With Selection.FormatConditions(1).Font .Color = -16752384 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13561798 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub
Вы можете легко настроить код, чтобы выделить различное количество чисел.
#### 10. Выделение данных больших чем данные число
Когда вы запустите этот код, появится окно. Вам надо написать число, которое вы хотите сравнить с выбранными ячейками.
Sub HighlightGreaterThanValues() Dim i As Integer i = InputBox("Enter Greater Than Value", "Enter Value") Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:=i Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .Font.Color = RGB(0, 0, 0) .Interior.Color = RGB(31, 218, 154) End With End Sub
Вы тоже можете настроить этот код, чтобы выделить более низкие чисел.
#### 11. Выделение ячеек комментариями
Простой макрос, который выделяет все ячейки, содержащие комментарии:
Sub HighlightCommentCells() Selection.SpecialCells(xlCellTypeComments).Select Selection.Style= "Note" End Sub
#### 12. Выделение ячеек со словами с ошибками
Это очень полезно, когда вы работаете с функциями, которые принимают строки, однако кто-то ввел строку с ошибкой, и ваши формулы не работают. Вот как решить эту проблему:
Sub ColorMispelledCells() For Each cl In ActiveSheet.UsedRange If Not Application.CheckSpelling(Word:=cl.Text) Then _ cl.Interior.ColorIndex = 28 Next cl End Sub
13. Создание сводной таблицы
Вот как создать сводную таблицу в MS Excel (версия 2007). Особенно полезно, когда вы делаете индивидуальный отчет каждый день. Вы можете оптимизировать создание сводной таблицы следующим образом:
Sub PivotTableForExcel2007() Dim SourceRange As Range Set SourceRange = Sheets("Sheet1").Range("A3:N86") ActiveWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=SourceRange, _ Version:=xlPivotTableVersion12).CreatePivotTable _ TableDestination:="", _ TableName:="", _ DefaultVersion:=xlPivotTableVersion12 End Sub
14. Отправка активного файла по электронной почте
Мой любимый код VBA. Он позволяет вам прикреплять и отправлять файл, с которым вы работаете, с предопределенным адресом электронной почты, заголовком сообщения и телом сообщения! Сначала Вам нужно сделать референцию в Excel на Microsoft Outlook (в редакторе Excel VBA, нажмите tools => references и выберите Microsoft Outlook).
Sub SendFIleAsAttachment() Dim OLApp As Outlook.Application Dim OLMail As Object Set OLApp = New Outlook.Application Set OLMail = OLApp.CreateItem(0) OLApp.Session.Logon With OLMail .To = "admin@datapigtechnologies.com; mike@datapigtechnologies.com" .CC = "" .BCC = "" .Subject = "This is the Subject line" .Body = "Hi there" .Attachments.Add ActiveWorkbook.FullName .Display End With Set OLMail = Nothing Set OLApp = Nothing End Sub
15. Вставка всех графиков Excel в презентацию PowerPoint
Очень удобный макрос, который позволяет вам добавлять все ваши графики Excel в презентацию Powerpoint одним щелчком мыши:
Sub SendExcelFiguresToPowerPoint() Dim PP As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide Dim i As Integer Sheets("Slide Data").Select If ActiveSheet.ChartObjects.Count < 1 Then MsgBox "No charts existing the active sheet" Exit Sub End If Set PP = New PowerPoint.Application Set PPPres = PP.Presentations.Add PP.Visible = True For i = 1 To ActiveSheet.ChartObjects.Count ActiveSheet.ChartObjects(i).Chart.CopyPicture _ Size:=xlScreen, Format:=xlPicture Application.Wait (Now + TimeValue("0:00:1")) ppSlideCount = PPPres.Slides.Count Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutBlank) PPSlide.Select PPSlide.Shapes.Paste.Select PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True Next i Set PPSlide = Nothing Set PPPres = Nothing Set PP = Nothing End Sub
16. Вставка таблицы Excel в MS Word
Таблицы Excel обычно помещаются внутри текстовых документов. Вот один автоматический способ экспорта таблицы Excel в MS Word:
Sub ExcelTableInWord() Dim MyRange As Excel.Range Dim wd As Word.Application Dim wdDoc As Word.Document Dim WdRange As Word.Range Sheets("Revenue Table").Range("B4:F10").Cop Set wd = New Word.Application Set wdDoc = wd.Documents.Open _ (ThisWorkbook.Path & "" & "PasteTable.docx") wd.Visible = True Set WdRange = wdDoc.Bookmarks("DataTableHere").Rangе On Error Resume Next WdRange.Tables(1).Delete WdRange.Paste WdRange.Tables(1).Columns.SetWidth _ (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth wdDoc.Bookmarks.Add "DataTableHere", WdRange Set wd = Nothing Set wdDoc = Nothing Set WdRange = Nothing End Sub
17. Извлечение слов из текста
Мы можем использовать формулы, если хотим извлечь определенное количество символов. Но что, если мы хотим извлечь только одно слово из предложения или диапазон слов в ячейке? Для этого мы можем сами создать функцию Excel с помощью VBA. Это одна из самых удобных функций VBA, поскольку она позволяет создавать собственные формулы, которые отсутствуют в MS Excel. Давайте продолжим и создадим две функции: findword() и findwordrev():
Function FindWord(Source As String, Position As Integer) As String On Error Resume Next FindWord = Split(WorksheetFunction.Trim(Source), " ")(Position - 1) On Error GoTo 0 End Function Function FindWordRev(Source As String, Position As Integer) As String Dim Arr() As String Arr = VBA.Split(WorksheetFunction.Trim(Source), " ") On Error Resume Next FindWordRev = Arr(UBound(Arr) - Position + 1) On Error GoTo 0 End Function
Отлично, мы уже создали две новые функции в Excel! Теперь попробуйте использовать их в Excel. Функция = FindWordRev (A1,1) берет последнее слово из ячейки A1. Функция = FindWord (A1,3) берет третье слово из ячейки A1 и т. Д.
18. Защита данных в MS Excel
Иногда мы хотим защитить данных нашего файла, чтобы только мы могли его изменять. Вот как это сделать с VBA:
Sub ProtectSheets() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Protect Password:="1234" Next ws End Sub
Поздравления! Поскольку вы все еще читаете это, вы действительно заинтересованы в изучении VBA. Как вы уже сами видели, язык программирования VBA чрезвычайно полезен и может сэкономить нам много времени. Надеюсь, вы нашли эту информацию полезной и использовали ее, чтобы стать мастером MS Excel, VBA и компьютерных наук в целом.
© 2018 Атанас Йонков
Литература:
1. ExcelChamps.com: Top 100 Useful Excel Macro [VBA] Codes Examples.
2. Michael Alexander, John Walkenbach (2012). 101 Ready-To-Use Excel Macros.
3. BG Excel.info: 14 ready-to-use Macros for Excel.
versus1982 Пользователь Сообщений: 23 |
Добрый день! Помогите пожалуйста «допилить» макрос, который копировал бы таблицу в диапазоне А33:Y63 (файл приложен — Лист «TM1-D» ) и вставлял бы ее внизу. Сейчас макрос написан так, что таблица вставляется постоянно в Range («A64» ) — между таблицами STRAKE: A и STRAKE: F. Я знаю что надо заменить «закрепленную» область Range («A64» ) переменной, однако у меня не получается. Я пробовал использовать циклы Do…Loop и переменный оператор Dim, но, видимо, не до конца все понимаю. Очень важно, чтобы с моего макроса осталось выполнение условия защищенности документа. Заранее премного благодарен. ЗЫ. Я честно искал похожую проблему в других темах, но поиск ничего не дал(. |
vikttur Пользователь Сообщений: 47199 |
#2 11.07.2014 15:59:28 Поиск первой пустой строки в столбце (в данном случае 4 — «D»)
|
||
versus1982 Пользователь Сообщений: 23 |
vikttur, Спасибо за ответ большое и за помощь…но что то не получается у меня. Вместо своей строки Range(«N64» ).Select вставляю Ваш код, нажимаю F5 для проверки и получаю ошибку «Compile Error». При этом выделяется .Cells в коде. Я не совсем понимаю синтаксис этих 2-х строк, поэтому не знаю где исправлять у себя код. |
vikttur Пользователь Сообщений: 47199 |
Переменная lRws. Первая пустая строка. Номер строки — в переменную. Файл 74 кБ с пустыми таблицами. Достаточно одной с десятком строк. |
versus1982 Пользователь Сообщений: 23 |
#5 11.07.2014 18:30:47
Не получается у меня. Не знаю как соединить нужные коды. Прошу помощи. Вот код с уже вставленными строками. Ошибку теперь выдает в строке «Dim lRws As Long»
Изменено: versus1982 — 11.07.2014 19:50:39 |
||||
vikttur Пользователь Сообщений: 47199 |
versus1982
, чрезмерное цитирование — об этом в правилах. Кнопка не для того, чтобы бездумно жать на нее. Dim lRws два раза, переменная обозначается один раз, после названия процедуры. |
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#7 11.07.2014 18:42:07 Если я не ошибаюсь, то переменную сначала объявляют, а потом используют.
Поменяйте строки местами. <#0> |
||
vikttur Пользователь Сообщений: 47199 |
#8 11.07.2014 18:52:59
Сначала это, потом и то. |
||
versus1982 Пользователь Сообщений: 23 |
Извините, исправил по требованию, не понял просто как показать ошибку. Спасибо за помощь большое уже завтра попробую ее применить к своему коду. И отпишусь. |
versus1982 Пользователь Сообщений: 23 |
#10 14.07.2014 12:33:14 Добрый всем утро! vikttur, с ошибкой в коде разобрался, однако, если я его введу по вышеуказанным рекомендациям —>,
то таблицы вставляются не друг за другом как необходимо, а как и раньше у меня происходило, с той лишь разницей что первая вставленная таблица действительно вставляется в конце (то есть на A70). Последующие же таблицы вставляются так же в А70, подвигая вниз предыдущую. Надеюсь понятно написал) Еще для меня загадкой оказалось, что «А7» в команде Range применяет (выделяет) ячейку А70, а как тогда получить ячейку А64, например? |
||
vikttur Пользователь Сообщений: 47199 |
#11 14.07.2014 12:40:49 Вы будете сыты в обед, если кушать нечего, а приготовление борща — вечером? Сначала найти величину переменной, потом ее применять.
Именно поэтому. Например, lRws=25: |
||
versus1982 Пользователь Сообщений: 23 |
#12 15.07.2014 16:11:12 Всем привет! Спасибо огромное за помощь — благодаря Вам нашел такой способ вставки таблицы в конце:
т.е. убрал лишние «Select», и код на вставку таблицы в конце вместился в одну строку. Но у меня другая теперь проблема — мне необходимо перед вставкой таблицы, первую пустую строку сделать высотой 40 экселевских единиц. Я уже знаю (благодаря Вам), что эту строку могу найти процедурой:
т.е., как я понимаю, он находит последнюю заполненную ячейку в столбце «А» и переходит на следующую (которая пустая), но происходит все не так. При первом выполнении макроса он выполняет высоту строки 40 абсолютно любую заполненную ячейку в пределах 2-й таблицы, при каждом выполнении макроса (обновленный файл прилагаю). При этом таблицы — все нормально вставляются себе как надо друг за дружкой. Обидно, что не понимаю почему так происходит. На данный момент код имеет такой вид :
Прикрепленные файлы
|
||||||
Sanja Пользователь Сообщений: 14838 |
замените строку Selection….. на Rows(lRws)…. Согласие есть продукт при полном непротивлении сторон. |
versus1982 Пользователь Сообщений: 23 |
Ой спасибо огромное — все сработало. Супер! |
versus1982 Пользователь Сообщений: 23 |
Всем привет! Решил пойти еще дальше (затягивает зараза). Теперь вместо фиксированного Range («A33:Y63» ) необходимо, чтобы макрос определял последнюю таблицу затем копировал ее и вставлял в конце. Т.е. Range попадает в переменную. Таблица имеет фиксированно 30 строк (см.вложенный файл). В соседних темах были близкие ответы, по выбору диапазонов, но у меня не получается применить их решение. |
versus1982 Пользователь Сообщений: 23 |
#16 16.07.2014 17:35:39 Можно было бы использовать вот это, наверное:
но как описать чтобы этот заголовок «Strake» макрос находил в последней таблице (этот заголовок есть в каждой таблице) и выделял последующие 30 строк? Изменено: versus1982 — 16.07.2014 17:36:19 |
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#17 16.07.2014 20:32:56 У метода Find есть аргумент, который определяет направление поиска. Вам нужно найти последнее значение? — тогда «снизу — вверх»
Посмотрите справку по Find |
||
versus1982 Пользователь Сообщений: 23 |
#18 17.07.2014 12:37:05 Справку то я прочитал, но ! Я могу найти поиск по первой строке (например где есть текст «STRAKE» ) , после этого необходимо, чтобы макрос выполнил выделение таблицы в низ (на 30 строк). Я ввожу:
Но, во первых, «STRAKE» повторяется в каждой таблице, а во вторых как обозначить саму область в 30 строк после «STRAKE»? И честно говоря не совсем понимаю для чего применить LookAt и LookIn в моем случае? Помогите плз! |
||
0 / 0 / 0 Регистрация: 28.02.2013 Сообщений: 6 |
|
1 |
|
Добавление новой таблицы кнопкой и макросом28.02.2013, 17:46. Показов 2606. Ответов 9
Всем привет, я новичок в области макросов. Идея сделать небольшую прогу для учета водяных счетчиков, проблема возникла в написании макроса для добавление новой таблицы с помощью кнопки, помогите кто чем может? Заранее приемного благодарен.
0 |
200 / 98 / 2 Регистрация: 24.09.2011 Сообщений: 261 |
|
01.03.2013, 09:38 |
2 |
чтобы добавить новую таблицу достаточно создать новый лист — кнопкой внизу экрана Excel или Shift+F11
1 |
0 / 0 / 0 Регистрация: 28.02.2013 Сообщений: 6 |
|
01.03.2013, 10:00 [ТС] |
3 |
чтобы добавить новую таблицу достаточно создать новый лист — кнопкой внизу экрана Excel или Shift+F11 это не решит мою проблему но все равно спасибо, мне необходимо что бы все работало на одном листе
0 |
0 / 0 / 0 Регистрация: 28.02.2013 Сообщений: 6 |
|
01.03.2013, 12:40 [ТС] |
4 |
Идея сделать небольшую прогу для учета абонентов но водоснабжению, проблема возникла в написании макроса для добавление в последующим порядке новой таблицы и графика с помощью кнопки, помогите кто чем может? Заранее приемного благодарен. Например: в ячейках R7C3:R47C18 находится таблица, она сгруппирована 10Rx46R и в этой же таблице есть график он строится на =Лист1!R12C4:R22C16, вопрос возможно ли написать макрос для добавление в последующим ниже порядке (R48C3:R88C18) новой таблицы и графика с помощью кнопки при этом данные графика строились уже на =Лист1!R53C4:R63C16 и так после каждого нажатия кнопки?
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||
01.03.2013, 14:06 |
5 |
|||
Запиши макрос копирования и вставки блока и у тебя будет половина решения. Добавлено через 10 минут
1 |
MaximuZ 0 / 0 / 0 Регистрация: 28.02.2013 Сообщений: 6 |
||||
01.03.2013, 15:38 [ТС] |
6 |
|||
Запиши макрос копирования и вставки блока и у тебя будет половина решения. Добавлено через 10 минут
кнопка получится одноразовой а постоянен изменение адресов рядов вручную теряет смысл кнопки но все равно спасибо
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
01.03.2013, 15:41 |
7 |
кнопка получится одноразовой Одноразавая в туалете бумага
0 |
0 / 0 / 0 Регистрация: 28.02.2013 Сообщений: 6 |
|
01.03.2013, 16:27 [ТС] |
8 |
Одноразавая в туалете бумага Если идет выкачка из базы то можно воспользоваться надстройкой PowerPivot и напрямую все тянуть с помощью Екселя….возможные объемы более 10 мильенов строк…скорость фантастика….для многомерного анализа данных — просто сказка. А вот как сделать чтоб постоянно не менять адреса строк в макросе это вопрос?????
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
01.03.2013, 17:50 |
9 |
Лучше, как говорится, мухи отдельно — котлеты отдельно. Был вопрос один проблема возникла в написании макроса для добавление новой таблицы с помощью кнопки Посмотрев на файл первое что у меня возникло: Наверное там не больше дисятка клиентов, раз выбран такой формат: на каждого клиента своя диаграмма и пр. Если клиентов будет до 1000, то и книга будет весить много, да и наверняка начнутся тормоза. А теперь оказывается, что записей 10 мильонов строк.
0 |
0 / 0 / 0 Регистрация: 28.02.2013 Сообщений: 6 |
|
01.03.2013, 18:17 [ТС] |
10 |
Если данные тянутся из базы, то зачем делать на каждого пользователя таблицу и график? выбрали из списка нужного клиента и в единственной таблице отображайте данные Идея про базу у меня возникла в процессе переписки на форуме, так что прости если что ни так)))) как говорится одна голова хорошо а две еще лучше)))))
0 |
Вставка таблицы Excel в документ Word с помощью кода VBA Excel. Метод Selection.PasteExcelTable: синтаксис, параметры, пример использования.
Работа с Word из кода VBA Excel
Часть 6. Вставка таблицы Excel в документ Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Метод Selection.PasteExcelTable
Метод Range.Paste, использующийся в VBA Word для вставки в документ таблиц, скопированных в буфер обмена из другого документа Word, не применим для вставки в документ таблиц, скопированных из книги Excel. Для этих целей используется метод Selection.PasteExcelTable.
Selection.PasteExcelTable — это метод, предназначенный для вставки Excel-таблицы из буфера обмена в документ Word и ее форматирования в соответствии с заданными параметрами.
Синтаксис
Expression.PasteExcelTable(LinkedToExcel, WordFormatting, RTF) |
Expression — переменная, представляющая объект Selection. В том числе, это может быть курсор или закладка.
Параметры
Все параметры метода Selection.PasteExcelTable логического типа и являются обязательными.
Параметр | Описание |
---|---|
LinkedToExcel | True — вставленная таблица связывается с исходным файлом Excel, чтобы изменения, внесенные в файл Excel, отображались в Microsoft Word. False — связь между вставленной таблицей и таблицей в исходном файле не устанавливается. |
WordFormatting | True — вставленная таблица будет отформатирована как таблица документа Word. False — вставленная таблица будет отформатирована в соответствии с исходным файлом Excel. |
RTF | True — Excel-таблица будет вставлена в расширенном текстовом формате (RTF). False — Excel-таблица будет вставлена в формате HTML-таблицы. |
Допустим, у нас есть таблица Excel, начинающаяся с ячейки A1 (или с любой другой), и нам необходимо скопировать эту таблицу в существующий документ Word, вставив ее на место закладки «Закладка1».
Решение:
Sub Primer() Dim myWord As New Word.Application, myDoc As Word.Document ‘Открываем существующий документ Word Set myDoc = myWord.Documents.Open(«C:ТестоваяДокумент1.docx») ‘Копируем таблицу на активном листе в буфер обмена ‘Вместо ячейки Range(«A1») можно указать любую другую, расположенную внутри таблицы Range(«A1»).CurrentRegion.Copy ‘Вставляем таблицу из буфера обмена на место закладки myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False ‘Отображаем программу Word myWord.Visible = True ‘Очищаем переменные Set myWord = Nothing Set myDoc = Nothing End Sub |
Если необходимо таблицу вставить в конец документа, строку
myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False |
следует заменить на
With myDoc ‘Переводим курсор в конец документа .Range(.Range.Characters.Count — 1, .Range.Characters.Count — 1).Select ‘Добавляем перенос строки, если необходимо .ActiveWindow.Selection.InsertAfter vbCr ‘Переводим курсор в конец документа .Range(.Range.Characters.Count — 1, .Range.Characters.Count — 1).Select ‘Вставляем таблицу из буфера обмена .ActiveWindow.Selection.PasteExcelTable False, False, False End With |
Автоматическая вставка таблиц |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |