Топ макросов для excel

В этом уроке я покажу Вам самые популярные макросы в 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.

Полезные макросы Excel для автоматизации рутинной работы с примерами применения для разных задач.

Примеры макросов для автоматизации работы

makrosy-filtra-svodnoy-tablicyМакросы для фильтра сводной таблицы в Excel.
Как автоматизировать фильтр в сводных таблицах с помощью макроса? Исходные коды макросов для фильтрации и скрытия столбцов в сводной таблице.

makros-svodnoy-tablicyМакрос для создания сводной таблицы в Excel.
Как автоматически сгенерировать сводную таблицу с помощью макроса? Исходный код VBA для создания и настройки сводных таблиц на основе исходных данных.

makrosy-dlya-formatirovaniya-yacheekМакросы для изменения формата ячеек в таблице Excel.
Как форматировать ячейки таблицы макросом? Изменение цвета шрифта, заливки и линий границ, выравнивание. Автоматическая настройка ширины столбцов и высоты строк по содержимому с помощью VBA-макроса.

makros-pereimenovat-listyМакрос для копирования и переименования листов Excel.
Как одновременно копировать и переименовывать большое количество листов одним кликом мышкой? Исходный код макроса, который умеет одновременно скопировать и переименовать любое количество листов.



Использование макросов Excel может ускорить работу и сэкономить много времени.

Один из способов получить код VBA — записать макрос и взять код, который он генерирует. Однако этот код макроса записи часто полон кода, который на самом деле не нужен. Также у макро-рекордера есть некоторые ограничения.

Поэтому стоит иметь коллекцию полезных макрокодов VBA, которые можно носить в заднем кармане и использовать при необходимости.

Хотя написание макрокода Excel VBA на начальном этапе может занять некоторое время, после его завершения вы можете сохранить его доступным в качестве справочника и использовать в следующий раз, когда он понадобится.

В этой обширной статье я собираюсь перечислить несколько полезных примеров макросов Excel, которые мне часто нужны и которые я храню в моем личном хранилище.

Я буду продолжать обновлять этот учебник, добавляя больше примеров макросов. Если вы считаете, что что-то должно быть в списке, просто оставьте комментарий.

Вы можете добавить эту страницу в закладки для дальнейшего использования.

Теперь, прежде чем я перейду к примеру макроса и дам вам код VBA, позвольте мне сначала показать вам, как использовать эти примеры кодов.

Вот шаги, которые необходимо выполнить, чтобы использовать код из любого из примеров:

  • Откройте книгу, в которой вы хотите использовать макрос.
  • Удерживая клавишу ALT, нажмите F11. Откроется редактор VB.
  • Щелкните правой кнопкой мыши любой из объектов в проводнике проекта.
  • Перейдите в Insert -> Module.
  • Скопируйте и вставьте код в окно кода модуля.

Если в примере говорится, что вам нужно вставить код в окно кода рабочего листа, дважды щелкните объект рабочего листа и скопируйте и вставьте код в окно кода.

После того, как вы вставили код в книгу, вам необходимо сохранить его с расширением .XLSM или .XLS.

Как запустить макрос

После того, как вы скопировали код в редакторе VB, выполните следующие действия для запуска макроса:

  • Перейдите на вкладку Разработчик.
  • Щелкните Макросы.

  • В диалоговом окне «Макрос» выберите макрос, который нужно запустить.
  • Нажмите кнопку «Выполнить».

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

Связанное руководство: различные способы запуска макроса в Excel.

Если код вставлен в окно кода рабочего листа, вам не нужно беспокоиться о его запуске. Он будет автоматически запускаться при выполнении указанного действия.

Теперь перейдем к полезным примерам макросов, которые помогут автоматизировать работу и сэкономить время.

Примечание. Вы найдете множество примеров апострофа (‘), за которым следует пара строк. Это комментарии, которые игнорируются при запуске кода и помещаются как заметки для себя / читателя.

Если вы обнаружите ошибку в статье или коде, пожалуйста, дайте мне знать.

Примеры макросов Excel

В этой статье рассматриваются следующие примеры макросов:

Показать все рабочие листы за один раз

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

Вот код, который покажет все рабочие листы в книге.

'Этот код отобразит все листы в книге Sub UnhideAllWoksheets () Dim ws As Worksheet для каждого ws в ActiveWorkbook.Worksheets ws.Visible = xlSheetVisible Next ws End Sub

В приведенном выше коде используется цикл VBA (для каждого) для просмотра всех листов в книге. Затем он изменяет видимое свойство рабочего листа на видимое.

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

Скрыть все рабочие листы, кроме активного листа

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

'Этот макрос скроет весь рабочий лист, кроме активного листа Sub HideAllExceptActiveSheet () Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

Сортировка листов по алфавиту с помощью VBA

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

'Этот код будет отсортировать листы по алфавиту Sub SortSheetsTabName () Application.ScreenUpdating = False Dim ShCount As Integer, i As Integer, j As Integer ShCount = Sheets.Count For i = 1 To ShCount - 1 For j = i + 1 To ShCount If Sheets (j) .Name <Sheets (i) .Name Then Sheets (j) .Move before: = Sheets (i) End If Next j Next i Application.ScreenUpdating = True End Sub

Защитите все рабочие листы за один раз

Если у вас много листов в книге и вы хотите защитить все листы, вы можете использовать этот код макроса.

Это позволяет вам указать пароль в коде. Этот пароль понадобится вам, чтобы снять защиту с листа.

'Этот код защитит все листы за один раз Sub ProtectAllSheets () Dim ws As Worksheet Dim password As String password = "Test123"' замените Test123 нужным паролем. Для каждого ws In Worksheets ws.Protect password: = password Далее ws Конец подписки

Снять защиту со всех листов за один раз

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

'Этот код защитит все листы за один раз. Sub ProtectAllSheets () Dim ws As Worksheet Dim password As String password = "Test123"' замените Test123 нужным паролем. For Each ws In Worksheets () ws.Unprotect password: = password Next ws Конец подписки

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

Показать все строки и столбцы

Этот код макроса покажет все скрытые строки и столбцы.

Это может быть действительно полезно, если вы получили файл от кого-то другого и хотите убедиться, что в нем нет скрытых строк / столбцов.

'Этот код отобразит все строки и столбцы в подменю рабочего листа UnhideRowsColumns () Columns.EntireColumn.Hidden = False Rows.EntireRow.Hidden = False End Sub

Разъединить все объединенные ячейки

Обычно ячейки объединяют в одну. Пока он выполняет свою работу, при объединении ячеек вы не сможете сортировать данные.

Если вы работаете с листом с объединенными ячейками, используйте приведенный ниже код, чтобы объединить все объединенные ячейки за один раз.

'Этот код объединит все объединенные ячейки Sub UnmergeAllCells () ActiveSheet.Cells.UnMerge End Sub

Обратите внимание, что вместо «Объединить и центрировать» я рекомендую использовать параметр «Центрировать по всему выделению».

Сохранить книгу с отметкой времени в ее имени

Много времени, возможно, вам понадобится создать версии своей работы. Они очень полезны в длинных проектах, когда вы работаете с файлом в течение долгого времени.

Хорошая практика — сохранить файл с отметками времени.

Использование временных меток позволит вам вернуться к определенному файлу, чтобы увидеть, какие изменения были внесены или какие данные были использованы.

Вот код, который автоматически сохранит книгу в указанной папке и добавит метку времени при каждом сохранении.

'Этот код сохранит файл с меткой времени в его имени Sub SaveWorkbookWithTimeStamp () Тусклая метка времени в виде строки timestamp = Format (Date, "dd-mm-yyyy") & "_" & Format (Time, "hh-ss") ThisWorkbook.SaveAs "C: UsersUsernameDesktopWorkbookName" и отметка времени End Sub

Вам необходимо указать расположение папки и имя файла.

В приведенном выше коде «C: UsersUsernameDesktop — это папка, которую я использовал. Вам необходимо указать папку, в которой вы хотите сохранить файл. Кроме того, я использовал общее имя «WorkbookName» в качестве префикса имени файла. Вы можете указать то, что связано с вашим проектом или компанией.

Сохраняйте каждый рабочий лист как отдельный PDF-файл

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

Хотя это может занять много времени, если выполнить его вручную, VBA действительно может его ускорить.

Вот код VBA, который сохранит каждый рабочий лист как отдельный PDF-файл.

'Этот код сохранит каждый рабочий лист как отдельный PDF-файл Sub SaveWorkshetAsPDF () Dim ws As Worksheet для каждого ws в рабочих таблицах ws.ExportAsFixedFormat xlTypePDF, "C: UsersSumitDesktopTest" & ws.Name & ".pdf" Next ws End Sub

В приведенном выше коде я указал адрес папки, в которой я хочу сохранить PDF-файлы. Кроме того, каждый PDF-файл получит то же имя, что и рабочий лист. Вам нужно будет изменить расположение этой папки (если только ваше имя не Sumit и вы не сохраняете его в тестовой папке на рабочем столе).

Обратите внимание, что этот код работает только с листами (а не с таблицами диаграмм).

Сохраняйте каждый рабочий лист как отдельный PDF-файл

Вот код, который сохранит всю вашу книгу в виде PDF-файла в указанной папке.

'Этот код сохранит всю книгу как PDF Sub SaveWorkshetAsPDF () ThisWorkbook.ExportAsFixedFormat xlTypePDF, "C: UsersSumitDesktopTest" & ThisWorkbook.Name & ".pdf" End Sub

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

Преобразование всех формул в значения

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

'Этот код преобразует все формулы в значения Sub ConvertToValues ​​() With ActiveSheet.UsedRange .Value = .Value End With End Sub

Этот код автоматически определяет используемые ячейки и преобразует их в значения.

Защита / блокировка ячеек с помощью формул

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

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

'Этот код макроса заблокирует все ячейки с формулами Sub LockCellsWithFormulas () с ActiveSheet .Unprotect .Cells.Locked = False .Cells.SpecialCells (xlCellTypeFormulas) .Locked = True .Protect AllowDeletingRows: = True End With End Sub

Связанное руководство: Как заблокировать ячейки в Excel.

Защитить все рабочие листы в книге

Используйте приведенный ниже код, чтобы защитить все рабочие листы в книге за один раз.

'Этот код будет защищать все листы в книге Sub ProtectAllSheets () Dim ws As Worksheet для каждого ws In Worksheets ws.Protect Next ws End Sub

Этот код будет просматривать все рабочие листы один за другим и защищать его.

Если вы хотите снять защиту со всех листов, используйте в коде ws.Unprotect вместо ws.Protect.

Вставлять строку после каждой другой строки в выделенном фрагменте

Используйте этот код, если вы хотите вставить пустую строку после каждой строки в выбранном диапазоне.

'Этот код вставит строку после каждой строки в выбранном Sub InsertAlternateRows () Dim rng As Range Dim CountRow As Integer Dim i As Integer Set rng = Selection CountRow = rng.EntireRow.Count For i = 1 To CountRow ActiveCell.EntireRow. Вставьте ActiveCell.Offset (2, 0). Выберите Next i End Sub

Точно так же вы можете изменить этот код, чтобы вставить пустой столбец после каждого столбца в выбранном диапазоне.

Автоматически вставлять дату и время в соседнюю ячейку

Отметка времени — это то, что вы используете, когда хотите отслеживать действия.

Например, вы можете отслеживать действия, например, когда были понесены конкретные расходы, в какое время был создан счет-фактура продажи, когда был произведен ввод данных в ячейку, когда последний раз обновлялся отчет и т. Д.

Используйте этот код для вставки отметки даты и времени в соседнюю ячейку, когда делается запись или редактируется существующее содержимое.

'Этот код вставит метку времени в соседнюю ячейку Private Sub Worksheet_Change (ByVal Target As Range) При ошибке GoTo Handler Если Target.Column = 1 And Target.Value "" Тогда Application.EnableEvents = False Target.Offset (0, 1) = Format (Now (), «дд-мм-гггг чч: мм: сс») Application.EnableEvents = True End If Handler: End Sub

Обратите внимание, что вам нужно вставить этот код в окно кода рабочего листа (а не в окно кода модуля, как мы это делали до сих пор в других примерах макросов Excel). Для этого в редакторе VB дважды щелкните имя листа, на котором вы хотите использовать эту функцию. Затем скопируйте и вставьте этот код в окно кода этого листа.

Кроме того, этот код заставляет работать, когда ввод данных выполняется в столбце A (обратите внимание, что в коде есть строка Target.Column = 1). Вы можете изменить это соответствующим образом.

Выделите альтернативные строки в выделенном фрагменте

Выделение альтернативных строк может значительно повысить удобочитаемость ваших данных. Это может быть полезно, когда вам нужно сделать распечатку и просмотреть данные.

Вот код, который мгновенно выделяет альтернативные строки в выделенном фрагменте.

'Этот код будет выделять альтернативные строки в выделении Sub HighlightAlternateRows () Dim Myrange As Range Dim Myrow As Range Set Myrange = Selection For Each Myrow In Myrange.Rows If Myrow.Row Mod 2 = 1 Then Myrow.Interior.Color = vbCyan End Если следующий Myrow End Sub

Обратите внимание, что в коде я указал цвет как vbCyan. Вы также можете указать другие цвета (например, vbRed, vbGreen, vbBlue).

Выделите ячейки с ошибками в написании слов

В Excel нет проверки орфографии, как в Word или PowerPoint. Хотя вы можете запустить проверку орфографии, нажав клавишу F7, нет визуальной подсказки, когда есть орфографическая ошибка.

Используйте этот код, чтобы мгновенно выделить все ячейки, в которых есть орфографическая ошибка.

'Этот код будет выделять ячейки, содержащие слова с ошибками Sub HighlightMisspelledCells () Dim cl As Range For Each cl In ActiveSheet.UsedRange If Not Application.CheckSpelling (word: = cl.Text) Then cl.Interior.Color = vbRed End If Next cl End Sub

Обратите внимание, что выделенные ячейки содержат текст, который Excel считает орфографической ошибкой. Во многих случаях он также выделяет названия или названия брендов, которых он не понимает.

Обновить все сводные таблицы в книге

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

'Этот код обновит всю сводную таблицу в подпрограмме Workbook Sub RefreshAllPivotTables () Dim PT As PivotTable для каждого PT в ActiveSheet.PivotTables PT.RefreshTable Next PT End Sub

Вы можете узнать больше об обновлении сводных таблиц здесь.

Измените регистр букв выбранных ячеек на верхний регистр

Хотя в Excel есть формулы для изменения регистра букв текста, он заставляет вас делать это в другом наборе ячеек.

Используйте этот код, чтобы мгновенно изменить регистр букв в выделенном тексте.

'Этот код изменит выделение на верхний регистр Sub ChangeCase () Dim Rng As Range For Each Rng In Selection.Cells If Rng.HasFormula = False Then Rng.Value = UCase (Rng.Value) End If Next Rng End Sub

Обратите внимание, что в этом случае я использовал UCase, чтобы сделать текстовый регистр Upper. Вы можете использовать LCase для нижнего регистра.

Выделите все ячейки комментариями

Используйте приведенный ниже код, чтобы выделить все ячейки, в которых есть комментарии.

'Этот код будет выделять ячейки с комментариями` Sub HighlightCellsWithComments () ActiveSheet.Cells.SpecialCells (xlCellTypeComments) .Interior.Color = vbBlue End Sub

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

Выделите пустые ячейки с помощью VBA

Хотя вы можете выделить пустую ячейку с помощью условного форматирования или с помощью диалогового окна «Перейти к специальному», если вам приходится делать это довольно часто, лучше использовать макрос.

После создания вы можете разместить этот макрос на панели быстрого доступа или сохранить его в своей личной книге макросов.

Вот код макроса VBA:

'Этот код выделит все пустые ячейки в Sub HighlightBlankCells () Dim Dataset как Range Set Dataset = Selection Dataset.SpecialCells (xlCellTypeBlanks) .Interior.Color = vbRed End Sub

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

Как отсортировать данные по одному столбцу

Вы можете использовать приведенный ниже код для сортировки данных по указанному столбцу.

Sub SortDataHeader () Range ("DataRange"). Sort Key1: = Range ("A1"), Order1: = xlAscending, Header: = xlYes End Sub

Обратите внимание, что я создал именованный диапазон с именем DataRange и использовал его вместо ссылок на ячейки.

Также здесь используются три ключевых параметра:

  • Key1 — это тот, по которому вы хотите отсортировать набор данных. В приведенном выше примере кода данные будут отсортированы на основе значений в столбце A.
  • Порядок — здесь вам нужно указать, хотите ли вы отсортировать данные в порядке возрастания или убывания.
  • Заголовок — здесь вам нужно указать, есть ли у ваших данных заголовки или нет.

Узнайте больше о том, как сортировать данные в Excel с помощью VBA.

Как отсортировать данные по нескольким столбцам

Предположим, у вас есть набор данных, как показано ниже:

Ниже приведен код, который сортирует данные по нескольким столбцам:

Sub SortMultipleColumns () с ключом ActiveSheet.Sort .SortFields.Add: = Range ("A1"), Order: = xlAscending .SortFields.Add Key: = Range ("B1"), Order: = xlAscending .SetRange Range ("A1 : C13 ") .Header = xlYes. Применить End With End Sub

Обратите внимание, что здесь я указал сначала сортировку по столбцу A, а затем по столбцу B.

Результат будет примерно таким, как показано ниже:

Как получить только числовую часть из строки в Excel

Если вы хотите извлечь только числовую часть или только текстовую часть из строки, вы можете создать пользовательскую функцию в VBA.

Затем вы можете использовать эту функцию VBA на листе (как и обычные функции Excel), и она будет извлекать из строки только числовую или текстовую часть.

Что-то вроде того, что показано ниже:

Ниже приведен код VBA, который создаст функцию для извлечения числовой части из строки:

'Этот код VBA создаст функцию для получения числовой части из строки. Функция GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1) ) Затем Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Result End Function

Вам нужно поместить код в модуль, а затем вы можете использовать функцию = GetNumeric на листе.

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

Точно так же ниже приведена функция, которая вернет вам только текстовую часть из строки в Excel:

'Этот код VBA создаст функцию для получения текстовой части из строки. Функция GetText (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If Not (IsNumeric (Mid (CellRef, i, 1))) Затем Result = Result & Mid (CellRef, i, 1) Next i GetText = Result End Function

Итак, это некоторые из полезных кодов макросов Excel, которые вы можете использовать в своей повседневной работе для автоматизации задач и повышения производительности.

Сборник готовых макросов

Приветствую на странице, которую каждый начинающий VBA-программист просто обязан добавить в закладки. Сейчас расскажу почему.

Макросы могут сэкономить массу времени. Можно автоматизировать небольшие задачи (ссылка на примеры), или создавать целые проекты автоматизации. Нажал кнопку и макрос выполнил работу целого отдела (вот я вообще не преувеличиваю).

Если Вы не знаете, что такое макрос в Excel и для чего они нужны, то рекомендую начать обучение с бесплатного самоучителя. Сборник готовых примеров, конечно, тоже поможет, но лучше начать с основ, а потом уже переходить к практике.

Моя история

Я ещё со школы начал изучать VBA. Читал книжки, пользовался макрорекордером (подсматривал код, изменял под себя).
Когда ты школьник, то верх мастерства сделать калькулятор или игру. Стал студентом — разработал инвестиционный проект строительства свиноводческого комплекса (вводишь пару основных цифр и программа говорит какая мощность комплекса нужна, сколько нужно людей и денег, плюс тонную документов с деталями цикла производства и план-график выхода на проектную мощность).

Это всё, конечно, интересно и круто, но не сравнить с написанием макросов для решения реальных бизнес-задач.

Представьте на минуту, что всю вашу рутину:

  • привести таблицу в «нормальный» вид;
  • собрать данные из нескольких файлов в один;
  • отфильтровать простыню из данных по нескольким критериям;
  • построить сводную таблицу, график и отправить боссу
  • тонна аналогичных скучных задач.

можно поручить Excel. ОДИН РАЗ прописать логику с помощью VBA и всё! Да, я знаю, что написание макроса иногда может занять неделю, а то и месяц. Но сколько вы каждый день/неделю/месяц тратите время на ерунду?

Я сам далеко не сразу узнал всё про макросы. Приходилось много читать скучных книг с примерами, которые даже не понимал куда применить, собирать по крупицам информацию в интернете. Да что там говорить — я и сейчас продолжаю изучать VBA.

Про сборник

Изначально я не хотел никому и не при каких обстоятельствах показывать сборник. Максимум ученикам и то, какую-нибудь урезанную версию (т..к постоянно добавляю новые коды). С рождением сына я пересмотрел свою позицию и захотел оставить след в истории (пафосно звучит, ну и пусть).

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

Если вы считаете, что что-то должно быть в списке, просто оставьте комментарий. Как только добавлю код — удалю комментарий, а про вас напишу в статье.

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

Вы сможете использовать эти коды, даже если до этого не использовали VBA.

Работа с Excel файлами (WorkBook)

  • Как создать файл Excel с помощью VBA
  • Как сохранить файл в Excel при изменении определенной ячейки или диапазона
  • Как сохранить файл в Excel перед закрытием
  • Как защитить лист в книге перед закрытием
  • Как снятие защиту с листа при открытии Excel файла
  • Как открыть Excel файл на нужном листе
  • Как открыть Excel файл, определенный пользователем
  • Как определить, открыт ли Excel файл
  • Как определяем, существует ли Excel файл в папке
  • Как обновить все связи в открытых Excel файлах
  • Как закрыть сразу все Excel файлы
  • Как открыть все Excel файлы в папке
  • Как распечатать все Excel файлы в папке
  • Как не дать закрыть Excel файл до тех пор, пока не заполнит ячейку
  • Как создать резервную копию текущего Excel файла с сегодняшней датой

Назад к списку тем


Работа с листами Excel файла (WorkSheets)

  • Как добавить новый лист и присвоить имя
  • Как удалить все листы, кроме активного
  • Как скрыть все, кроме активного рабочего листа
  • Как отобразить все листы книги
  • Как переместить рабочие листы книги
  • Как сортировать листы по названию
  • Как сгруппировать листы по цвету ярлычка
  • Как скопировать лист в новый Excel файл
  • Как создать новый Excel файл для каждого листа
  • Как распечатать листы
  • Как защитить все листы
  • Как снять защиту со всех листов
  • Как создать оглавление со списком листов
  • Как изменить масштаб листа с помощью двойного клика
  • Как выделить столбец активной строки на листе  

Назад к списку тем


Работа с диапазонами (Range)

Эта часть посвящена диапазонам: их выбору, изменению, скрытию и т. д.

  • Как выбрать и изменить форматирование диапазона
  • Как создать и выбрать именованный диапазон
  • Как сделать перебор диапазона ячеек
  • Как выбрать и форматировать диапазон
  • Как вставить пустые строки в диапазон
  • Как отобразить все скрытые строки и столбцы
  • Как удалить пустые строки
  • Как удалить пустые столбцы
  • Как отобрать и отформатировать все формулы на листе
  • Как найти первую пустую строку или столбец
  • Как применить дополнительный цвет заливки
  • Как отсортировать диапазоны по двойному щелчку
  • Как ограничить диапазон прокрутки в той или иной области
  • Как автоматически задать область печати листа

Назад к списку тем


Макросы для работы с данными

Эта часть посвящена управлению данными: их очистке, форматированию и т. д.

  • Как скопировать и вставить диапазон
  • Как преобразовать все формулы в диапазон с значениями
  • Как преобразовать текстовые значения в числовые
  • Как преобразовать тире в минус
  • Как удалить лишние пробелы из всех ячеек в диапазоне
  • Как отсечь слева 5 знаков в каждой ячейке диапазона
  • Как добавить в ячейку недостающие нули
  • Как заменить пустые ячейки нулём
  • Как добавить текст в начало или конец ячейки
  • Как создать макрос преобразования данных
  • Как очистить данные от непечатаемых символов
  • Как выделить дубликаты в диапазоне данных
  • Как скрыть повторяющиеся строки
  • Как выборочно скрыть стрелки автофильтра
  • Как скопировать отфильтрованные строки в новый Excel файл
  • Как создать новый лист для каждого элемента в автофильтре
  • Как показать отфильтрованные столбцы в строке состояния

Назад к списку тем


Макросы для сводных таблиц

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

Назад к списку тем


Макросы для графиков

  • Как изменить размер диаграмм на рабочем листе
  • Как привязать график к определенному диапазону
  • Как создать набора бессвязных диаграмм
  • Как распечатать всех диаграммы на рабочем листе
  • Как отметить первое и последнее значение на графике
  • Как сопоставить цвет диаграммы и исходных данных
  • Как сопоставить цвет точек графика и исходных данных

Назад к списку тем


Макросы для отправки писем из Excel

  • Как отправить Excel файл почтой (как вложение)
  • Как отправить диапазон значений в качестве вложения
  • Как отправить один листа файла в качестве вложения
  • Как отправить письмо со ссылкой на наши файлы
  • Как разослать письма с добавлением адресов в наш список контактов
  • Как сохранить все вложения в отдельной папке
  • Как сохранить определенные вложения в папку

Назад к списку тем


Макросы для работы с Access

  • Как выполнить запрос Access из Excel
  • Как запустить макрос Access из Excel
  • Как открыть отчет Access из Excel
  • Как открыть форму Access из Excel
  • Как сжать базу данных Access из Excel

Назад к списку тем


Макросы для работы с MS Word

  • Как отправить данные из Excel в Word документ
  • Как сделать слияние с Word документом

Назад к списку тем


Макросы для работы с PowerPoint

  • Как отправить данные Excel в PowerPoint
  • Как отправить график из Excel в PowerPoint
  • Как преобразовать рабочую книгу в презентацию PowerPoint

Назад к списку тем

Макрос для выделения на каждом листе в активной книге ячейки А1. При этом также происходит перемещение экрана.

Sub A1SelectionEachSheet()
 
    Dim i As Integer
   
    Application.ScreenUpdating = False
 
    For i = 1 To Sheets.Count
        Sheets(i).Select
        ActiveWindow.ScrollColumn = 1
        ActiveWindow.ScrollRow = 1
        Range("a1").Select
    Next
   
    Sheets(1).Select
 
    Application.ScreenUpdating = True
 
 
End Sub

Макрос для копирования текущего листа заданное количество раз. Полезен для тестирования каких то макросов — внесли правки, проверили на копии данных. Закончились копии — запустили макрос еще раз

Sub SimpleCopy()
 
Dim i As Integer, j As Integer
 
i = Application.InputBox("Введите число копий текущего листа")
 
Application.ScreenUpdating = False
  For j = 1 To i
    ActiveSheet.Copy after:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Копия " & j
  Next j
Application.ScreenUpdating = True
 
End Sub

Создание листов с названиями из указанного диапазона на листе

Sub CreateFromList()
 
Dim cell As Range
 
For Each cell In Selection
  Sheets.Add after:=Sheets(Sheets.Count)
  ActiveSheet.Name = cell.Value
Next cell
 
End Sub

Маркрос отправки письма с задержкой. Доработанный макрос из книги Джона Уокенбаха Профессиональное программирование на VBA

Sub ОтправкаПисьма()
 
  Dim OutApp As Object
  Dim OutMail As Object
 
  Set OutApp = CreateObject("Outlook.Application")
  OutApp.Session.Logon
  On Error GoTo cleanup
  Set OutMail = OutApp.CreateItem(0)
  On Error Resume Next
 
  With OutMail
    .To = "pupkin@vasiliy.ru"
    .Subject = "Отчет по продажам"
    .Attachments.Add "C:Test.txt"
    .Body = "Текст письма"
    .DeferredDeliveryTime = Replace(Date, ".", "/") & " 11:00:00"
    .send '.Display для формирования письма и его открытия
  End With
 
  On Error GoTo 0
  Set OutMail = Nothing
cleanup:
  Set OutApp = Nothing
 
End Sub

Немного доработанный макрос оглавления от Николая Павлова.
Если в книге уже существует лист «Оглавление» — макрос предлагает его удалить. Если нет — создает лист «Оглавление» и вставляет ссылки с названиями листов

Sub TableOfContent()
 
   Dim sheet As Worksheet
   Dim cell As Range
   Dim Answer As Integer
  
    Application.ScreenUpdating = False
  
   With ActiveWorkbook
    For Each Worksheet In ActiveWorkbook.Worksheets
        If Worksheet.Name = "Оглавление" Then
            Answer = MsgBox("В книге есть лист с именем Оглавление. Удалить его?", vbYesNo)
            If Answer = vbNo Then Exit Sub
            If Answer = vbYes Then
                Application.DisplayAlerts = False
                    Worksheet.Delete
                Application.DisplayAlerts = True
            End If
        End If
    Next
    End With
    Sheets(Array(1)).Select
    Sheets.Add
    Sheets(1).Name = "Оглавление"
   With ActiveWorkbook
      For Each sheet In ActiveWorkbook.Worksheets
        If sheet.Name <> "Оглавление" Then
          Set cell = Worksheets(1).Cells(sheet.Index, 1)
          .Worksheets(1).Hyperlinks.Add anchor:=cell, Address:="", SubAddress:="'" & sheet.Name & "'" & "!A1"
          cell.Formula = sheet.Name
         End If
      Next sheet
   End With
  
   Rows("1:1").Delete
  
    Application.ScreenUpdating = True
  
End Sub

Сортировка листов от мастеров VBA. Макрос сортирует в том числе и скрытые листы. Не сработает, если у книги защищена структура

Sub СОРТИРОВАТЬ_ВСЕ_ЛИСТЫ()

   Application.ScreenUpdating = False: Application.EnableEvents = False
   Dim iSht As Worksheet, oDict As Object, i%, j%
   Set oDict = CreateObject("Scripting.Dictionary")
   ' запомнить состояние видимости каждого из листов и сделать все видимыми
   For Each iSht In ActiveWorkbook.Sheets
      oDict.Item(iSht.Name) = iSht.Visible: iSht.Visible = True
   Next
   With ActiveWorkbook   ' сортировка видимых листов
      For i = 1 To .Sheets.Count - 1
         For j = i + 1 To .Sheets.Count
            If UCase(.Sheets(i).Name) > UCase(.Sheets(j).Name) Then .Sheets(j).Move Before:=.Sheets(i)
         Next j
      Next i
   End With
   ' восстановить исходное состояние видимости каждого из листов
   For Each iSht In ActiveWorkbook.Sheets   
      iSht.Visible = oDict.Item(iSht.Name)
   Next
   Application.EnableEvents = True: Application.ScreenUpdating = True

End Sub

Импорт столбцов «Поле1» и «Поле2» из листа «Лист1» файла Excel «C:Manager.xls» через ADODB подключение и вставка содержимого начиная с ячейки A1 текущего листа

Sub ИмпортДанных()

Dim varConn As String
Dim varSQL As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim QT1 As QueryTable
 
  varConn = "Data Source=C:Manager.xls;Extended Properties=Excel 8.0;"
  varSQL = "SELECT [Поле1], [Поле2] FROM [C:Manager.xls].[Лист1$] ORDER BY [Поле2]"
 
  Set cn = New ADODB.Connection
 
  With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = varConn
    .Open
  End With
 
  Set rs = CreateObject("ADODB.Recordset")
  rs.Open varSQL, cn
  
  Set QT1 = ActiveSheet.QueryTables.Add(rs, Range("A1"))
 
  QT1.Refresh
 
  ActiveSheet.Name = "CL"
 
  cn.Close
  Set cn = Nothing
  Set rs = Nothing
 
End Sub


Понравилась статья? Поделить с друзьями:
  • Топ красивых шрифтов в word на русском
  • Топ книг по excel
  • Топ 20 формул excel
  • Топ 10 excel формулами
  • Тонны прописью в excel