Разное

Активировать книгу excel vba: Метод Workbook. Activate (Excel) | Microsoft Docs

Содержание

Метод Workbook. Activate (Excel) | Microsoft Docs



  • Чтение занимает 2 мин

В этой статье

Активизирует первое окно, связанное с книгой.Activates the first window associated with the workbook.

СинтаксисSyntax

Expression. Активацияexpression.Activate

Expression (выражение ) Переменная, представляющая объект Workbook .expression A variable that represents a Workbook object.

ПримечанияRemarks

Этот метод не выполняет никакие Auto_Activate или Auto_Deactivate макросы, которые могут быть присоединены к книге (используйте метод рунаутомакрос для запуска этих макросов).This method won’t run any Auto_Activate or Auto_Deactivate macros that might be attached to the workbook (use the RunAutoMacros method to run those macros).

ПримерExample

В этом примере активируется Book4. xls.This example activates Book4.xls. Если Book4. xls содержит несколько окон, в примере активируется первое окно, Book4. xls: 1.If Book4.xls has multiple windows, the example activates the first window, Book4.xls:1.

Workbooks("BOOK4.XLS").Activate

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.



Как сделать активной книгу excel vba?

Открытие книги 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)  

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

Рис. 1. Столбцы и строки скрыты за исключением рабочего диапазона

Скачать заметку в формате Word или pdf, примеры в архиве (политика безопасности провайдера не позволяет загружать файлы Excel с поддержкой макросов)

Сохранение всех рабочих книг

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

Public Sub SaveAllWorkbooks()
    Dim Book As Workbook
    For Each Book In Workbooks
        If Book.Path "" Then Book.Save
    Next Book
End Sub

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

Сохранение и закрытие всех рабочих книг

Следующая процедура циклически просматривает коллекцию Workbooks. Программа сохраняет и закрывает все рабочие книги.

Sub CloseAllWorkbooks()
    Dim Book As Workbook
    For Each Book In Workbooks
        If Book.Name ThisWorkbook.Name Then
            Book.Close savechanges:=True
        End If
    Next Book
    ThisWorkbook.Close savechanges:=True
End Sub

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

Частичное сокрытие элементов рабочего листа

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

Sub HideRowsAndColumns()
    Dim row1 As Long, row2 As Long
    Dim col1 As Long, col2 As Long
    If TypeName(Selection) "Range" Then Exit Sub
'   Если последняя строка либо последний столбец скрыты,
'   отобразить все и выйти
    If Rows(Rows.Count).EntireRow.Hidden Or _
        Columns(Columns.Count).EntireColumn.Hidden Then
        Cells.EntireColumn.Hidden = False
        Cells.EntireRow.Hidden = False
        Exit Sub
    End If
    row1 = Selection.Rows(1).Row
    row2 = row1 + Selection.Rows.Count — 1
    col1 = Selection.Columns(1).Column
    col2 = col1 + Selection.Columns.Count — 1
    Application.ScreenUpdating = False
    On Error Resume Next
'   Скрыть строки
    Range(Cells(1, 1), Cells(row1 — 1, 1)).EntireRow.Hidden = True
    Range(Cells(row2 + 1, 1), Cells(Rows.Count, _
        1)).EntireRow.Hidden = True
'   Скрыть столбцы
    Range(Cells(1, 1), Cells(1, col1 — 1)).EntireColumn.Hidden = True
    Range(Cells(1, col2 + 1), Cells(1, _
        Columns.Count)).EntireColumn.Hidden = True
End Sub

Чтобы показать все строки и столбцы, встаньте на перекрестие строк и столбцов (выделено красным на рис. 1), и пройдите по меню: Главная –> Ячейки –> Формат –> Скрыть или отобразить –> Отобразить строки. Повторите этот путь, чтобы отобразить столбцы (рис. 2).

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

Если выделенный диапазон включает несвязанные диапазоны, видимым останется только первый из них.

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

Если вы работаете с рабочими книгами, состоящими из нескольких листов, то, вероятно, знаете, что Excel не может «синхронизировать» листы в рабочей книге. Другими словами, не существует автоматического способа сделать так, чтобы все листы имели одинаковые выделенные диапазоны и верхние левые ячейки. Макрос VBA, показанный ниже, берет за основу активный рабочий лист и выполняет следующие действия со всеми остальными рабочими листами в книге:

  • выделяет тот же диапазон, что и в активном листе;
  • задает ту же левую верхнюю ячейку, что и на активном листе (рис. 3).

Рис. 3. Синхронизация выделенного диапазона на листах рабочей книги

Sub SynchSheets()
'   Дублирование выделенного диапазона активного листа
'   и верхней левой ячейки активного диапазона на всех листах
    If TypeName(ActiveSheet) "Worksheet" Then Exit Sub
    Dim UserSheet As Worksheet, sht As Worksheet
    Dim TopRow As Long, LeftCol As Integer
    Dim UserSel As String
    Application.ScreenUpdating = False
'   Запоминание текущего листа
    Set UserSheet = ActiveSheet
'   Сохранение сведений об активной ячейке
    TopRow = ActiveWindow.ScrollRow
    LeftCol = ActiveWindow.ScrollColumn
    UserSel = ActiveWindow.RangeSelection.Address
'   Циклический обход рабочих листов
    For Each sht In ActiveWorkbook.Worksheets
        If sht.Visible Then ' пропуск скрытых листов
            sht.Activate
            Range(UserSel).Select
            ActiveWindow.ScrollRow = TopRow
            ActiveWindow.ScrollColumn = LeftCol
        End If
    Next sht
'   Восстановление исходного положения
    UserSheet.Activate
    Application.ScreenUpdating = True
End Sub

По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 348–351.

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

Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub 

Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы

Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx"  'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate  'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste  'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub 

Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.

Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные  'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub 

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

Спасибо за внимание.

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

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

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

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

  • Создать новую книгу
  • Создание объекта для вновь созданной рабочей книги
Создать новую книгу

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

Код:

Sub AddNewWorkbook1()  'Добавление новой рабочей книги  Workbooks.Add  'Сохранение рабочей книги  ActiveWorkbook.SaveAs "C:WorkbookName.xls"  'OR  ActiveWorkbook.SaveAs Filename:="C:WorkbookName1.xls"  End Sub  

Объяснение:

  1. Метод добавления рабочей книги  добавит новую книгу
  2. Сохранить как рабочую книгу метод сохранит активную книгу в определенном месте с указанным именем файла

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

Инструкции:

  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"  End Sub  

    Вывод:

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

    Инструкции:

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

      Событие листа. Activate (Excel) | Microsoft Docs



      • Чтение занимает 2 мин

      В этой статье

      Возникает при активации книги, листа, диаграммы или встроенной диаграммы.Occurs when a workbook, worksheet, chart sheet, or embedded chart is activated.

      СинтаксисSyntax

      Expression. Активацияexpression.Activate

      Expression (выражение ) Переменная, представляющая объект листа .expression A variable that represents a Worksheet object.

      Возвращаемое значениеReturn value

      NothingNothing

      ПримечанияRemarks

      Это событие не возникает при создании нового окна.This event doesn’t occur when you create a new window.

      При переключении между двумя окнами, которые показывают одну книгу, возникает событие WindowActivate , но событие Activate для книги не происходит.When you switch between two windows showing the same workbook, the WindowActivate event occurs, but the Activate event for the workbook doesn’t occur.

      ПримерExample

      В этом примере выполняется сортировка диапазона a1: A10 при активации листа.This example sorts the range A1:A10 when the worksheet is activated.

      Private Sub Worksheet_Activate() 
       Me.Range("a1:a10").Sort Key1:=Range("a1"), Order1:=xlAscending 
      End Sub
      

      Поддержка и обратная связьSupport and feedback

      Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.



      VBA Excel. Проверка состояния книги (открыта или закрыта)

      Открыта или закрыта книга Excel? Проверяем с помощью кода VBA по краткому или полному имени файла, используя объектную переменную, цикл или оператор Open.

      Проверка по краткому имени

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

      Использование объектной переменной

      Вариант пользовательской функция VBA Excel, предназначенной для проверки, открыта или закрыта рабочая книга, путем определения результата присвоения ссылки на нее объектной переменной. Присвоение состоялось (BookOpenClosed = True) – книга открыта, произошла ошибка и присвоение не состоялось (BookOpenClosed = False) – книга закрыта.

      Function BookOpenClosed(wbName As String) As Boolean

          Dim myBook As Workbook

          On Error Resume Next

              Set myBook = Workbooks(wbName)

          BookOpenClosed = Not myBook Is Nothing

      End Function

      Аргумент функции:

      • WbName – краткое имя проверяемой рабочей книги.

      Перебор открытых книг циклом

      Этот вариант функции BookOpenClosed перебирает с помощью цикла все открытые книги Excel и проверяет их краткие имена на совпадение с кратким именем проверяемой книги. Совпадение найдено (BookOpenClosed = True) – книга открыта, совпадение не найдено (BookOpenClosed = False) – книга закрыта.

      Function BookOpenClosed(wbName As String) As Boolean

          Dim myBook As Workbook

          For Each myBook In Workbooks

              If myBook.Name = wbName Then

                  BookOpenClosed = True

                  Exit For

              End If

          Next

      End Function

      В коллекцию Workbooks входят и скрытые книги, в том числе Личная книга макросов, и книга с функцией.

      Проверка по полному имени

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

      Function BookOpenClosed(wbFullName As String) As Boolean

          Dim ff As Integer

          ff = FreeFile

              On Error Resume Next

              Open wbFullName For Random Access Read Write Lock Read Write As #ff

              Close #ff

          BookOpenClosed = (Err.Number <> 0)

      End Function

      Аргумент функции:

      • wbFullName – полное имя проверяемой рабочей книги.

      Эта функция открывает с помощью оператора Open файл проверяемой книги с разрешением чтения и записи (параметр access) и запретом чтения и записи, если этот файл уже открыт другим процессом (параметр lock).

      Если файл уже открыт другим процессом, а указанный тип доступа (параметр access) не разрешен (параметр lock), операция открытия завершится с ошибкой, а выражение (Err.Number 0) возвратит значение True.

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

      По краткому имени

      Sub Primer1()

          If BookOpenClosed(«Книга1.xlsx») Then

              MsgBox «Книга открыта»

          Else

              MsgBox «Книга закрыта»

          End If

      End Sub

      По полному имени

      Sub Primer2()

          If BookOpenClosed(«C:\Папка1\Папка2\Папка3\Книга1.xlsx») Then

              MsgBox «Книга открыта»

          Else

              MsgBox «Книга закрыта»

          End If

      End Sub

      excel-vba — Избегайте использования SELECT или ACTIVATE

      пример

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

      Если вы только начинаете изучать VBA, вам часто предлагается записать ваши действия с помощью макросъемщика, а затем взглянуть на код. Например, я записал действия, предпринятые для ввода значения в ячейке D3 на Sheet2, и макрокоманда выглядит следующим образом:

      Option Explicit
      Sub Macro1()
      '
      ' Macro1 Macro
      '
      
      '
          Sheets("Sheet2").Select
          Range("D3").Select
          ActiveCell.FormulaR1C1 = "3.1415"   '(see **note below)
          Range("D4").Select
      End Sub
      

      Помните, однако, макрорекордер создает строку кода для КАЖДОГО из ваших (пользовательских) действий. Это включает в себя щелчок на вкладке рабочего листа, чтобы выбрать Sheet2 ( Sheets("Sheet2").Select ), щелкнув по ячейке D3 перед вводом значения ( Range("D3").Select ) и с помощью клавиши Enter (которая эффективно « выбрав «ячейку ниже текущей выбранной ячейки: Range("D4").Select ).

      Существует несколько проблем с использованием. .Select здесь:

      • Рабочий лист не всегда указывается. Это происходит, если вы не меняете рабочие листы во время записи и означает, что код даст разные результаты для разных активных рабочих листов.
      • .Select() работает медленно. Даже если для параметра Application.ScreenUpdating установлено значение False , это необработанная операция, которая должна быть обработана.
      • .Select() неуправляем. Если Application.ScreenUpdating остается равным True , Excel будет фактически выбирать ячейки, рабочий лист, форму … независимо от того, с чем вы работаете. Это стрессово для глаз и действительно неприятно смотреть.
      • .Select() вызовет прослушиватели. Это уже немного продвинуто, но если не работать, будут запускаться такие функции, как Worksheet_SelectionChange() .

      Когда вы кодируете в VBA, все действия «набрав» (т. Select Команды Select ) больше не нужны. Ваш код может быть сведен к одному оператору, чтобы поместить значение в ячейку:

      '--- GOOD
      ActiveWorkbook.Sheets("Sheet2").Range("D3").Value = 3.1415
      
      '--- BETTER
      Dim myWB      As Workbook
      Dim myWS      As Worksheet
      Dim myCell    As Range
      
      Set myWB = ThisWorkbook             '*** see NOTE2
      Set myWS = myWB.Sheets("Sheet2")
      Set myCell = myWS.Range("D3")
      
      myCell.Value = 3.1415
      

      (Пример BETTER выше показывает использование промежуточных переменных для разделения разных частей ссылки на ячейку. Пример GOOD всегда будет работать очень хорошо, но может быть очень громоздким в гораздо более длинных модулях кода и более сложным для отладки, если одна из ссылок неверна. )

      ** ПРИМЕЧАНИЕ. Макросъемщик делает много предположений о типе данных, которые вы вводите, в этом случае вводите строковое значение в качестве формулы для создания значения. Ваш код не должен делать этого и может просто назначить числовое значение непосредственно ячейке, как показано выше.

      ** Примечание 2: рекомендуемая практика , чтобы установить локальную переменную рабочую книгу ThisWorkbook вместо ActiveWorkbook (если явно не нужно). Причина заключается в том, что ваш макрос обычно должен / использовать ресурсы в любой книге, из которой возникает код VBA, и НЕ будет выглядеть за пределами этой книги — опять же, если вы явно не назовете свой код работать с другой книгой. Когда вы открываете несколько книг в Excel, ActiveWorkbook — это та, которая может отличаться от рабочей книги, просматриваемой в редакторе VBA . Итак, вы думаете, что работаете в одной книге, когда вы действительно ссылаетесь на другую. ThisWorkbook относится к книге, содержащей исполняемый код.

      excel — VBA — Активировать открытую книгу

      I want to read a workbook and copy some cells in another workbook.
      The aim of the code is to copy the cells from the different sheets from one file to the other.

      For this propose, I created this code:

      Sub processCopy(file)
      
      'Abrir documento
      Workbooks.Open Filename:=file, UpdateLinks:=0
      
      
      cantn = ThisWorkbook.Sheets.Count
      cantv = Sheets.Count - 5
      cantn = cantn - 4
      
      'Recorrer los libros del documento abierto
      For i = 1 To (Sheets.Count - 5)
      
             'Obtener nombre del libro seleccionado
             nombre = Sheets(i + 2).Name
             'Filtrar los libros no necesarios
             If nombre <> "Instructions" And nombre <> "Executive Summary" And nombre <> "Process Update" And nombre <> "Template" And nombre <> "Notes" Then
      
                 If cantv >= cantn Then
                  ThisWorkbook.Sheets(3).copy after:=ThisWorkbook.Sheets(cantn + 2)
                  cantn = cantn + 1
                  ThisWorkbook.Sheets(cantn + 2).Name = nombre
                 ElseIf nombre <> ThisWorkbook.Sheets(cantn + 2).Name Then
                  ThisWorkbook.Sheets(cantn + 2).Name = nombre
                 End If
      
                 Workbooks.Open Filename:=file, UpdateLinks:=0
      
                 ActiveWorkbook.Worksheets(nombre).Activate
      
                 ActiveWorkbook.Sheets(nombre).Range("C4:O23").Select
                 Selection.copy
                 ThisWorkbook.Sheets(nombre).Range("C4:O23").PasteSpecial
      

      After finishing the process in the first sheet, I compare if in the new file there is any other sheet to start with the process. If not (always) I create a new sheet to start with the process of copying and pasting, but the functions ThisWorkbook and ActiveWorkbook are working on the same sheet (copying and pasting from the same Workbook) and not from one file to the other.

      That is why, I open the first workbook, but when the process of copying and pasting finishes, this message appears:

      Error image

      What can i do to solve it this issue?

      Thanks for all

      Excel VBA: как активировать книгу без ее полного имени? — excel

      У меня открыто несколько книг excel. Я хочу активировать книгу, которая имеет «Final» в своем имени.

      Пример: у меня есть три открытых книги под названием «Workbook1.xlsx», «worKbook2.xlsm» и «workbookFinal.xlsx», открытые одновременно.

      Мой код VBA находится в «Macro.xlsm». Используя VBA, я хочу активировать книгу, в которой есть «Final». FYI .. все книги находятся в разных направлениях.

      excel

      vba

      excel-vba

      Поделиться

      Источник


      Pratik    

      09 февраля 2017 в 09:13

      2 Ответа



      2

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

      Sub wbs()
          Dim wb As Workbook
      
          For Each wb In Workbooks
              If InStr(wb.Name, "Final") > 0 Then
                  wb.Activate
                  Exit For
              End If
          Next
      End Sub
      

      Поделиться


      user3598756    

      09 февраля 2017 в 09:16



      2

      Попробуйте код ниже, используя оператор Like с wild-картой * .

      Option Explicit
      
      Sub FindFinalWorkbook()
      
      Dim wb As Workbook
      
      ' loop through all open workbooks
      For Each wb In Application.Workbooks
          If wb.Name Like "*Final*" Then '< -- check if workbook name is Like *Final*
              wb.Activate
              Exit For
          End If
      Next wb
      
      End Sub
      

      Поделиться


      Shai Rado    

      09 февраля 2017 в 09:18


      Похожие вопросы:

      imacro для excel vba?

      Нужна консультация о том, как использовать imacro в excel vba. imacro-это перекодировщик макросов интернета, найденный в internet explorer и firefox. Кто-нибудь знает, как активировать imacro с…

      Excel/VBA: Открыть Новую Книгу В Новом Окне

      Я использую Excel 2010 и ищу сценарий VBA, который откроет новую книгу в новом окне (например, я мог бы разместить одну книгу на каждом из 2 мониторов). Затем я бы поместил этот макрос VBA/на ленту…

      Как ввести код VBA в Excel .xlsm без использования Interop?

      Моя цель-добавить macros в Книгу excel без необходимости включать Trust Access to the VBA Project Object Module в центре доверия Excel. (Включение доступа кажется угрозой безопасности). Нашел…

      Как активировать конкретную книгу и конкретный лист?

      Как активировать другую книгу из текущей книги? У меня есть текущая книга с dumb.xls и другим именем книги, как Tire.xls.I открыли Tire.xls из dumb.xls с помощью worksbooks.open filename:= name of…

      Excel VBA закрыть текущую книгу Ошибка 1004

      У меня есть код VBA в книге Excel. У меня есть ячейка, которую я хотел бы использовать, чтобы закрыть книгу без сохранения (вместо использования обычной кнопки (X) close в правом верхнем углу excel….

      Excel VBA копирование диапазона в новую рабочую книгу

      Я новичок в Excel VBA . Я пытаюсь скопировать диапазон данных из выходных данных листа в новую книгу excel и сохранить новую книгу со значением the в E3. В качестве бонуса я хотел бы также иметь…

      Excel VBA копировать книгу с поддержкой макросов XL-2007 как файл excel-2003 без macros

      Я ищу макрос vba, который сделает копию текущей книги с поддержкой макросов Excel 2007 с именем, которое я указываю как документ без макросов Excel 2003. Он также должен держать текущую книгу…

      Как активировать книгу, которая открыта с использованием имени книги в VBA

      У меня уже есть одна открытая книга, но я запускаю макрос из другой книги. Я хотел бы активировать первую книгу, используя ее имя. Код: FileName = input_path_1 & input_file_1…

      Активировать лист excel из VBA, не зная его имени?

      Можно ли активировать лист в открытой книге через VBA, не зная его имени? Я открываю книгу с помощью application.getfileopenname и читаю данные из нее, но некоторые книги имеют данные на втором…

      VBA открыть книгу excel на основе первой части имени файла?

      Я пытаюсь открыть книгу excel с помощью vba: ‘Open Planner On Error Resume Next Set WB = Workbooks((FILE NAME).xlsx) On Error GoTo 0 If WB Is Nothing Then ‘open workbook if not open Set WB =…

      Книга

      Excel не активируется при запуске макроса — Office

      • 2 минуты на чтение
      • Применимо к:
        Пакет обновления 1 для Office 2013, Excel 2013

      В этой статье

      Примечание

      Office 365 ProPlus переименовывается в Microsoft 365 Apps for Enterprise .Дополнительные сведения об этом изменении см. В этом сообщении в блоге.

      Симптомы

      При запуске макроса, который вызывает метод Workbook.Activate в книге Microsoft Excel 2013, книга не активируется, если для свойства ScreenUpdating задано значение False.

      Временное решение

      Чтобы обойти эту проблему, установите для свойства ScreenUpdating значение True перед вызовом метода Activate. При необходимости вы можете вернуть для него значение False после запуска метода Activate, как в следующем примере кода:

        Приложение.ScreenUpdating = True
      Рабочие тетради (1). Активировать
      Application.ScreenUpdating = False
        

      Примечание

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

      Дополнительная информация

      В Excel 2013 была представлена ​​функция интерфейса единого документа (SDI). Книги Excel 2013 теперь являются окнами верхнего уровня в Windows. В этой конфигурации Windows обрабатывает активацию окон, а не Excel, управляя дочерними окнами, как это было в более ранних версиях программы.

      В сценарии, описанном в разделе «Проблема», Excel запрашивает активацию книги Windows, но окно книги не соответствует требованиям активации Windows.

      .

      Объект «Рабочая книга» (Excel) | Документы Microsoft

      • 3 минуты на чтение

      В этой статье

      Представляет книгу Microsoft Excel.

      Замечания

      Объект Workbook является членом коллекции Workbooks . Коллекция Workbooks содержит все объекты Workbook , открытые в настоящее время в Microsoft Excel.

      Свойство ThisWorkbook объекта Application возвращает книгу, в которой выполняется код Visual Basic. В большинстве случаев это то же самое, что и активная книга. Однако, если код Visual Basic является частью надстройки, свойство ThisWorkbook не вернет активную книгу. В этом случае активной книгой является книга, вызывающая надстройку, тогда как свойство ThisWorkbook возвращает книгу надстройки.

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

      Пример

      Используйте Workbooks ( index ), где index — это имя книги или номер индекса, чтобы вернуть один объект Workbook . В следующем примере активируется первая книга.

        Рабочие тетради (1) .Активировать
        

      Номер индекса обозначает порядок, в котором книги были открыты или созданы. Workbooks (1) — это первая созданная рабочая книга, а Workbooks (Workbooks.Count) — последняя созданная.Активация книги не меняет ее порядковый номер. Все книги включаются в счетчик индекса, даже если они скрыты.

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

      В следующем примере активируется Sheet1 в книге с именем Cogs.xls (книга уже должна быть открыта в Microsoft Excel).

        Рабочие книги («Cogs.xls»). Рабочие листы («Лист1»). Активировать
        

      Свойство ActiveWorkbook объекта Application возвращает текущую активную книгу. В следующем примере задается имя автора для активной книги.

        ActiveWorkbook.Author = "Жан Сельва"
        

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

        Sub SendTab ()
         'Объявите и инициализируйте свои переменные и отключите обновление экрана.
         Dim wks как рабочий лист
         Application.ScreenUpdating = False
         Установить wks = ActiveSheet
         
         'Скопируйте целевой рабочий лист, указанный в ячейке C1, в буфер обмена.
         Рабочие листы (Диапазон ("C1"). Значение). Копировать
         
         'Отправить содержимое буфера обмена на адрес электронной почты, указанный в ячейке A1,
         'используя тему, указанную в ячейке B1.
         ActiveWorkbook.SendMail wks.Range ("A1"). Value, wks.Range ("B1").Ценность
         
         'Не сохранять изменения и снова включить обновление экрана.
         ActiveWorkbook.Close savechanges: = False
         Application.ScreenUpdating = True
      Конец подписки
        

      События

      Методы

      Недвижимость

      См. Также

      Поддержка и отзывы

      Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

      .

      Метод Workbook.Protect (Excel) | Документы Microsoft

      • 2 минуты на чтение

      В этой статье

      Защищает книгу, чтобы ее нельзя было изменить.

      Синтаксис

      выражение . Защитить ( Пароль , Структура , Windows )

      выражение Переменная, представляющая объект Workbook .

      Параметры

      Имя Обязательно / Дополнительно Тип данных Описание
      Пароль Дополнительно Вариант Строка, определяющая пароль с учетом регистра для рабочего листа или книги. Если этот аргумент опущен, вы можете снять защиту с листа или книги без использования пароля. В противном случае вы должны указать пароль, чтобы снять защиту с листа или книги.Если вы забудете пароль, вы не сможете снять защиту с рабочего листа или книги.

      Используйте надежные пароли, состоящие из прописных и строчных букв, цифр и символов. Слабые пароли не смешивают эти элементы. Надежный пароль: Y6dh! Et5. Слабый пароль: House27.

      Пароли должны состоять из 8 или более символов. Лучше использовать парольную фразу, состоящую из 14 или более символов.

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

      Структура Дополнительно Вариант True для защиты структуры книги (взаимного расположения листов). Значение по умолчанию — Ложь .
      Окна Дополнительно Вариант True для защиты окон книги.Если этот аргумент опущен, окна не защищены.

      Поддержка и отзывы

      Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

      .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *