Создание макроса VBA, который создает новую консолидированную книгу из столбцов другого Excel-набора. Vba создать новую книгу excel


VBA Excel. Рабочая книга (открыть, создать новую, закрыть)

Открытие книги Excel из кода VBA. Создание новой книги, присвоение ей имени. Обращение к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.

  1. Открытие существующей книги
  2. Создание новой книги
  3. Обращение к открытой книге
  4. Как закрыть книгу Excel из кода VBA

Открытие существующей книги

Существующая книга открывается из кода VBA Excel с помощью метода Open:

Workbooks.Open Filename:="D:\test1.xls"

или

Workbooks.Open ("D:\test1.xls")

В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.Проверить существование файла можно с помощью функции Dir:

If Dir("D:\test1.xls") = "" Then MsgBox "Файл не существует" Else MsgBox "Файл существует" End If

Или, если файл существует, можно сразу его открыть:

If Dir("D:\test1.xls") = "" Then MsgBox "Файл не существует" Else Workbooks.Open Filename:="D:\test1.xls" End If

Создание новой книги

Новая рабочая книга Excel создается в VBA с помощью метода Add:

Workbooks.Add

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

Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:\test2.xls"

В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере - это «test2.xls».

Обращение к открытой книге

Обращение к активной книге:

ActiveWorkbook

Обращение к книге с выполняемым кодом:

ThisWorkbook

Обращение к книге по имени:

Workbooks("test1.xls") Workbooks("test2.xls")

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

Как закрыть книгу Excel из кода VBA

Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:

Workbooks("test1.xlsx").Close

Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close - SaveChanges:

Workbooks("test1.xlsx").Close SaveChanges:=False

или

Workbooks("test1.xlsx").Close (False)

Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:

Workbooks("test1.xlsx").Close SaveChanges:=True

или

Workbooks("test1.xlsx").Close (True)

vremya-ne-zhdet.ru

Создать новую книгу в Excel VBA

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

Решение(ия):

  Следующие макросы позволят открыть или создать новую книгу с помощью метода Добавить.

Создать новую книгу в Excel VBA - примеры:

Создать новую книгу

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

Код: Sub AddNewWorkbook1() 'Добавление новой рабочей книги Workbooks.Add 'Сохранение рабочей книги ActiveWorkbook.SaveAs "C:\WorkbookName.xls" 'OR ActiveWorkbook.SaveAs Filename:="C:\WorkbookName1.xls" End Sub Объяснение:
  1. Метод добавления рабочей книги  добавит новую книгу
  2. Сохранить как рабочую книгу метод сохранит активную книгу в определенном месте с указанным именем файла
Вывод:

 

Вы должны увидеть недавно открытую книгу вместе с существующей книгой.Create new WorkbookИнструкции:
  1. Откройте рабочую книгу Excel
  2. Нажмите Alt + F11, чтобы открыть редактор VBA.
  3. Вставьте новый модуль из меню «Вставка»
  4. Создайте приведенный выше код и вставьте в окно кода
  5. Нажмите F5, чтобы увидеть выход
  6. Вы должны увидеть недавно открытую книгу, как показано выше.
  7. Сохраните файл в виде макросъемки
    Создание объекта для вновь созданной книги

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

    Код: sub AddNewWorkbook2() Dim wkb as Workbook 'Добавление новой рабочей книги Set wkb = Workbooks.Add 'Сохранение рабочей книги wkb.SaveAs "C:\WorkbookName.xls" 'OR wkb.SaveAs Filename:="C:\WorkbookName1.xls"</span></code> End Sub Вывод:

      Вы должны увидеть недавно открытую книгу вместе с существующей книгой.

    Инструкции:
    1. Откройте рабочую книгу Excel
    2. Нажмите Alt + F11, чтобы открыть редактор VBA.
    3. Вставьте новый модуль из меню «Вставка»
    4. Создайте приведенный выше код и вставьте в окно кода
    5. Нажмите F5, чтобы увидеть выход
    6. Вы должны увидеть недавно открытую книгу, как показано выше.
    7. Сохраните файл в виде макросъемки

      vh10295.rdkd.ru

      Новая книга Excel из листов старой

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

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Sub ToNewFile()  pathNewBook = "C:\Temp\" 'Путь сохранения новой книги  nameNewBook = "Название книги (" & Format(Now, "MMMM YYYY") & ").xlsx"  Application.ScreenUpdating = False  Application.DisplayAlerts = False  Application.SheetsInNewWorkbook = 1 'Количество листов в новой книге  Set NewWB = Workbooks.Add  ThisWorkbook.Activate  Sheets("Лист 1").Copy Before:=NewWB.Sheets(1)  NewWB.Sheets(2).Delete  'Удаляем кнопки  NewWB.Sheets("Лист 1").Shapes.Range(Array("cbButtonName")).Delete  NewWB.SaveAs Filename:=pathNewBook & nameNewBook  NewWB.Close True 'Сохраняем  Application.CutCopyMode = False  If Dir(pathNewBook & nameNewBook) <> "" Then   MsgBox "Создан файл: " & pathNewBook & nameNewBook  Else   MsgBox "Не удалось создать файл!"  End If End Sub
      Sub ToNewFile() pathNewBook = "C:\Temp\" 'Путь сохранения новой книги nameNewBook = "Название книги (" & Format(Now, "MMMM YYYY") & ").xlsx" Application.ScreenUpdating = False Application.DisplayAlerts = False Application.SheetsInNewWorkbook = 1 'Количество листов в новой книге Set NewWB = Workbooks.Add ThisWorkbook.Activate Sheets("Лист 1").Copy Before:=NewWB.Sheets(1) NewWB.Sheets(2).Delete 'Удаляем кнопки NewWB.Sheets("Лист 1").Shapes.Range(Array("cbButtonName")).Delete NewWB.SaveAs Filename:=pathNewBook & nameNewBook NewWB.Close True 'Сохраняем Application.CutCopyMode = False If Dir(pathNewBook & nameNewBook) <> "" Then MsgBox "Создан файл: " & pathNewBook & nameNewBook Else MsgBox "Не удалось создать файл!" End If End Sub
      Полезные ссылки

      Order_macros

      opennotes.ru

      VBA Excel. Рабочий лист (создание, копирование, удаление)

      Создание, копирование, перемещение и удаление рабочих листов Excel с помощью кода VBA. Методы Sheets.Add, Worksheet.Copy, Worksheet.Move и Worksheet.Delete.

      1. Создание новых листов
      2. Копирование листов
      3. Перемещение листов
      4. Удаление листов

      Создание новых листов

      Создание новых рабочих листов осуществляется с помощью метода Sheets.Add.

      Синтаксис метода Sheets.Add

      expression.Add [Before, After, Count, Type]

      где expression - переменная, представляющая собой объект Sheet.

      Компоненты метода Sheets.Add

      • Before* - необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлен новый.
      • After* - необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлен новый.
      • Count - необязательный параметр типа данных Variant, указывающий, сколько листов будет добавлено (по умолчанию - 1).
      • Type - необязательный параметр типа данных Variant, указывающий тип листа: xlWorksheet** (рабочий лист) или xlChart (диаграмма), по умолчанию - xlWorksheet.

      *Если Before и After не указаны, новый лист, по умолчанию, будет добавлен перед активным листом.

      **Для создания рабочего листа (xlWorksheet) можно использовать метод Worksheets.Add, который для создания диаграмм уже не подойдет.

      Примеры создания листов

      'Создание рабочего листа: Sheets.Add Worksheets.Add ThisWorkbook.Sheets.Add After:=ActiveSheet, Count:=2 Workbooks("Книга1.xlsm").Sheets.Add After:=Лист1 Workbooks("Книга1.xlsm").Sheets.Add After:=Worksheets(1) Workbooks("Книга1.xlsm").Sheets.Add After:=Worksheets("Лист1") 'Создание диаграммы: Sheets.Add Type:=xlChart 'Добавление нового листа перед 'последним листом рабочей книги Sheets.Add Before:=Worksheets(Worksheets.Count) 'Добавление нового листа в конец Sheets.Add After:=Worksheets(Worksheets.Count)
      • Лист1 в After:=Лист1 - это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
      • Лист1 в After:=Worksheets(«Лист1») - это изменяемое имя листа, указанное в проводнике редактора VBA в скобках.

      Создаваемый лист можно присвоить объектной переменной:

      Dim myList As Object 'В активной книге Set myList = Worksheets.Add 'В книге «Книга1.xlsm» Set myList = Workbooks("Книга1.xlsm").Worksheets.Add 'Работаем с переменной myList.Name = "Listok1" myList.Cells(1, 1) = myList.Name 'Очищаем переменную Set myList = Nothing

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

      Копирование листов

      Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.

      Синтаксис метода Worksheet.Copy

      expression.Copy [Before, After]

      где expression - переменная, представляющая собой объект Worksheet.

      Компоненты метода Worksheet.Copy

      • Before* - необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
      • After* - необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.

      *Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.

      Примеры копирования листов

      'В пределах активной книги '(уникальные имена листов) Лист1.Copy After:=Лист2 'В пределах активной книги '(имена листов на ярлычках) Worksheets("Лист1").Copy Before:=Worksheets("Лист2") 'Вставить копию в конец: Лист1.Copy After:=Worksheets(Worksheets.Count) 'Из одной книги в другую Workbooks("Книга1.xlsm").Worksheets("Лист1").Copy _ After:=Workbooks("Книга2.xlsm").Worksheets("Лист1") 'Один лист активной книги в новую книгу Лист1.Copy 'Все листы книги с кодом в новую книгу ThisWorkbook.Worksheets.Copy

      Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

      Перемещение листов

      Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.

      Синтаксис метода Worksheet.Move

      expression.Move [Before, After]

      где expression - переменная, представляющая собой объект Worksheet.

      Компоненты метода Worksheet.Move

      • Before* - необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
      • After* - необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.

      *Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.

      Примеры перемещения листов

      'В пределах активной книги '(уникальные имена листов) Лист1.Move After:=Лист2 'В пределах активной книги '(имена листов на ярлычках) Worksheets("Лист1").Move Before:=Worksheets("Лист2") 'Размещение после последнего листа: Лист1.Move After:=Worksheets(Worksheets.Count) 'Из одной книги в другую Workbooks("Книга1.xlsm").Worksheets("Лист1").Move _ After:=Workbooks("Книга2.xlsm").Worksheets("Лист1") 'В новую книгу Лист1.Move

      Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

      Удаление листов

      Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete

      Синтаксис метода Worksheet.Delete

      expression.Delete

      где expression - переменная, представляющая собой объект Worksheet.

      Примеры удаления листов

      'По уникальному имени Лист1.Delete 'По имени на ярлычке Worksheets("Лист1").Delete 'По индексу листа Worksheets(1).Delete 'В другой книге Workbooks("Книга1.xlsm").Worksheets("Лист1").Delete

      Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

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

      vremya-ne-zhdet.ru

      vba - Создание макроса VBA, который создает новую консолидированную рабочую книгу из столбцов другого набора данных excel

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

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

      Sub CreateWBandCopy() ' Link variable to source workbook Dim wbSource As Workbook Set wbSource = Workbooks("book1") ' Copy Column L from source book wbSource.Sheets(1).Range("L:L").Copy ' Create new workbook and assign to variable Dim wb As Workbook Set wb = Workbooks.Add ' Link sheet1 to variable -can also use name like this: Sheets("Sheet1") Dim ws As Worksheet Set ws = wb.Sheets(1) ' Link Specific range to variable Dim rng As Range Set rng = ws.Columns("A:A") ' Paste source col L to new book col A rng.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub

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

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

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

      Sub Compfinder() ' ' Compfinder Macro ' ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 10 Dim wbSource As Workbook Set wbSource = ActiveWorkbook Dim wsSource As Worksheet Set wsSource = wbSource.ActiveSheet Dim rngQ As Range Set rngQ = wsSource.Columns("Q:Q") rngQ.Copy ''''''''''''''''''''''''' Dim wbNew As Workbook Set wbNew = Workbooks.Add Dim wsNew As Worksheet Set wsNew = wbNew.Sheets(1) Dim rng As Range Set rng = wsNew.Columns("A:A") rng.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ''''''''''''''''''''''''' Application.CutCopyMode = False wsNew.Range("A1").FormulaR1C1 = "Geo Location" wsSource.Columns("K:K").Copy wsNew.Columns("B:B").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False wsSource.Columns("L:L").Copy wsNew.Columns("C:C").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False wbNew.Activate ActiveWorkbook.SaveAs Filename:="C:\Users\raysharm\Documents\Compfinder columns.csv", FileFormat:=xlCSV, CreateBackup:=False End Sub

      За исключением последнего сохранения (на ваш путь), я тестировал, что код работает без ошибок.

      qaru.site

      Создание макроса VBA, который создает новую консолидированную книгу из столбцов другого Excel-набора

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

      Sub Compfinder() ' ' Compfinder Macro ' ' ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 10 Columns("Q:Q").Select Selection.Copy Workbooks.Add Columns("A:A").Select ActiveSheet.Paste Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "Geo Location" Windows("CompFinder Tool_Protected_final_11.25.13.xlsm").Activate Columns("K:K").Select Selection.Copy Windows("Book1").Activate Columns("B:B").Select Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _ , SkipBlanks:=False, transpose:=False Windows("CompFinder Tool_Protected_final_11.25.13.xlsm").Activate Windows("Book1").Activate Windows("CompFinder Tool_Protected_final_11.25.13.xlsm").Activate Columns("L:L").Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Columns("C:C").Select Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _ , SkipBlanks:=False, transpose:=False Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:= _ "C:\Users\raysharm\Documents\Compfinder columns.csv", FileFormat:=xlCSV, _ CreateBackup:=False End Sub

      При запуске макроса, я в конечном итоге получаю ошибку ошибки для Windows("Book1").Activate, и я думаю, я буду для другого покроя и паст в коде.

      Есть ли способ, чтобы каждый раз, когда выпол

      stackoverrun.com

      vba - Создание новой рабочей книги и копирование рабочих листов за

      Вы можете сделать свой код полностью переменным, а не кодировать "Orginal Workbook.xlsm" и имена Sheet1 и Sheet2

      Если вы используете две переменные рабочей книги, вы можете установить ActiveWorbook (т.е. тот, который выбран в настоящее время в Excel), как книгу, которую нужно скопировать (альтернативно вы можете установить ее в закрытую книгу, существующую открытую названная книга или книга, содержащая код).

      Со стандартным

      Application.Workbooks.Add

      вы получите новую книгу с количеством листов, установленных в соответствии с вашим вариантом по умолчанию (нормально 3 листа) Задав

      Application.Workbooks.Add(1)

      создается новая книга только с одним листом

      И обратите внимание, что я отключил макросы, установив EnableEvents в False, но было бы необычно, чтобы события приложения запускались при создании книг

      Затем при копировании листа используйте

      Sheets(Array(Wb1.Sheets(1).Name, Wb1.Sheets(2).Name)).Copy 'rather than Sheets(Array("Sheet1", "Sheet2")).Copy

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

      Наконец, удаляется исходный отдельный лист, оставляя вас с новым файлом с двумя скопированными листами внутри

      Sub NewReport() Dim Wb1 As Workbook Dim Wb2 As Workbook Dim dateStr As String Dim myDate As Date With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False End With Set Wb1 = ActiveWorkbook myDate = Date dateStr = Format(myDate, "MM-DD-YY") Set Wb2 = Application.Workbooks.Add(1) Wb1.Sheets(Array(Wb1.Sheets(1).Name, Wb1.Sheets(2).Name)).Copy Before:=Wb2.Sheets(1) Wb2.Sheets(Wb2.Sheets.Count).Delete Wb2.SaveAs Filename:="c:\test\" & "New Report Name" & " " & dateStr, FileFormat:=51 Wb2.Close With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True End With End Sub

      qaru.site