Vba excel активировать папку

  • Список файлов
  • Работа с файлами

Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и тип/расширение выбираемого файла)

Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.

Функция GetFolderPath работает также, только служит для вывода диалогового окна выбора папки.

Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
                       Optional ByVal InitialPath As String = "c:") As String
    ' функция выводит диалоговое окно выбора папки с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
    Dim PS As String: PS = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        If .Show <> -1 Then Exit Function
        GetFolderPath = .SelectedItems(1)
        If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
    End With
End Function
 
Sub ПримерИспользования_GetFolderPath()
    ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path)   ' запрашиваем имя папки
    If ПутьКПапке = "" Then Exit Sub    ' выход, если пользователь отказался от выбора папки
    MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:", _
                     Optional ByVal FilterDescription As String = "Книги Excel", _
                     Optional ByVal FilterExtention As String = "*.xls*") As String
    ' функция выводит диалоговое окно выбора файла с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора
    ' для фильтра можно указать описание и расширение выбираемых файлов
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1): PS = Application.PathSeparator
    End With
End Function
 
Sub ПримерИспользования_GetFilePath()
    ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла
    If ИмяФайла = "" Then Exit Sub    ' выход, если пользователь отказался от выбора файла
    MsgBox "Выбран файл: " & ИмяФайла, vbInformation
End Sub

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

Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и типрасширение выбираемого файла)

Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.

Функция GetFolderPath работает аналогично, только служит для вывода диалогового окна выбора папки.

Function GetFileName(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath, _
                     Optional ByVal MyFilter As String = "Книги Excel (*.xls*),") As String
    ' функция выводит диалоговое окно выбора папки с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
    If Not IsMissing(InitialPath) Then
        On Error Resume Next: ChDrive Left(InitialPath, 1)
        ChDir InitialPath    ' выбираем стартовую папку
    End If
    res = Application.GetOpenFilename(MyFilter, , Title, "Открыть")  ' вывод диалогового окна
    GetFileName = IIf(VarType(res) = vbBoolean, "", res)    ' пустая строка при отказе от выбора
End Function
 
Sub ПримерИспользования_GetFileName()
    ИмяФайла = GetFileName("Заголовок окна", ThisWorkbook.Path)   ' запрашиваем имя файла
    ' ===================== другие варианты вызова функции =====================
    ' текстовые файлы, стартовая папка не указана
    '       ИмяФайла = GetFileName("Выберите текстовый файл", , "Текстовые файлы (*.txt),")
    ' файлы любого типа из папки "C:Windows"
    '       ИмяФайла = GetFileName(, "C:Windows", "")
    ' ==========================================================================

    If ИмяФайла = "" Then Exit Sub    ' выход, если пользователь отказался от выбора файла
    MsgBox "Выбран файл: " & ИмяФайла, vbInformation
End Sub
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
                       Optional ByVal InitialPath As String = "c:") As String
    ' функция выводит диалоговое окно выбора папки с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
    Dim PS As String: PS = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        If .Show <> -1 Then Exit Function
        GetFolderPath = .SelectedItems(1)
        If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
    End With
End Function
 
Sub ПримерИспользования_GetFolderPath()
    ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path)   ' запрашиваем имя папки
    ' ===================== другие варианты вызова функции =====================
    ' стартовая папка не указана, заголовок окна по умолчанию
    '       ПутьКПапке = GetFolderPath
    ' обзор папок начинается с папки "Рабочий стол"
    '       СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    '       ПутьКПапке = GetFolderPath("Выберите папку на рабочем столе", СтартоваяПапка)
    ' ==========================================================================

    If ПутьКПапке = "" Then Exit Sub    ' выход, если пользователь отказался от выбора папки
    MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:", _
                     Optional ByVal FilterDescription As String = "Книги Excel", _
                     Optional ByVal FilterExtention As String = "*.xls*") As String
    ' функция выводит диалоговое окно выбора файла с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора
    ' для фильтра можно указать описание и расширение выбираемых файлов
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1): PS = Application.PathSeparator
    End With
End Function
 
Sub ПримерИспользования_GetFilePath()
     ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла
    ' ===================== другие варианты вызова функции =====================
    ' текстовые файлы, стартовая папка не указана
    '       ИмяФайла = GetFilePath("Выберите текстовый файл", , "Текстовые файлы", "*.txt")
    ' файлы любого типа из папки "C:Windows"
    '       ИмяФайла = GetFilePath(, "C:Windows", , "*")
    ' ==========================================================================

    If ИмяФайла = "" Then Exit Sub    ' выход, если пользователь отказался от выбора файла
    MsgBox "Выбран файл: " & ИмяФайла, vbInformation
End Sub
Function GetFilenamesCollection(Optional ByVal Title As String = "Выберите файлы для обработки", _
                             Optional ByVal InitialPath As String = "c:") As FileDialogSelectedItems
    ' функция выводит диалоговое окно выбора нескольких файлов с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает массив путей к выбранным файлам, или пустую строку в случае отказа от выбора
    With Application.FileDialog(3) ' msoFileDialogFilePicker
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        If .Show <> -1 Then Exit Function
        Set GetFilenamesCollection = .SelectedItems
    End With
End Function
 
Sub ПримерИспользования_GetFilenamesCollection()
    Dim СписокФайлов As FileDialogSelectedItems
    Set СписокФайлов = GetFilenamesCollection("Заголовок окна", ThisWorkbook.Path)   ' выводим окно выбора
    ' ===================== другие варианты вызова функции =====================
    ' стартовая папка не указана, заголовок окна по умолчанию
           Set СписокФайлов = GetFilenamesCollection
    ' обзор файлов начинается с папки "Рабочий стол"
           СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop")
           Set СписокФайлов = GetFilenamesCollection("Выберите файлы на рабочем столе", СтартоваяПапка)
    ' ==========================================================================

    If СписокФайлов Is Nothing Then Exit Sub  ' выход, если пользователь отказался от выбора файлов
    For Each File In СписокФайлов
        Debug.Print File
    Next
End Sub

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

Sub AttachFile_test()    ' пример использования
    Filename$ = GetFilePath()
    If Filename$ = "" Then Exit Sub
    MsgBox "Выбран файл: " & Filename$
End Sub
 
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:", _
                     Optional ByVal FilterDescription As String = "Файлы счетов", _
                     Optional ByVal FilterExtention As String = "*.*") As String
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1)
        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), ""))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With
End Function
  • 214421 просмотр

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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

Как сделать книгу активной, зная имя книги?

​Смотрите также​​P. S. На​ стопорится из-за того​ создать Новую книгу​

​Selection.Insert Shift:=xlToRight​​ Подскажите пжл, как​​ l&, r As​​ Dim xlsWb As​ xlsApp As Object​

​ ему имя «Новый​​ тот не сработал​

​ и т.п. При​​ взяли имя активной​ файлов, к которому​

​ момент, когда Вы​​: Обратиться к рабочей​ расширения файлов, то​PuLbKa​ ум пришло только​ что не переключается​ для помещения туда​Set nb =​ исправить.​

​ Range Set xlsApp​​ Excel.Workbook Dim xlsSh​ Dim xlsWb As​

​ лист» Dim oRange​​ правильно…​ этом ввод пользователя​
​ книги и продолжайте​ после этого будет​ точно знаете, что​​ книге можно по​​ так​
​: Как сделать книгу​ создание буферной папки.​​Guest​​ результатов, переключиться на​ Workbooks.Add​Selection.Find(What:=»», After:=ActiveCell, LookAt:=xlPart).Select​ = GetObject(, «Excel.Application»)​ As Excel.Worksheet Dim​
​ Object Dim xlsSh​
​ As Range ‘Находим​Если честно я​ блокируется, а указатель​ свой макрос.​

​ применен макрос. Имена​​ нужная книга активна,​ имени или по​При открытой книге​ активной зная имя​JayBhagavan​: Это были эксперименты​ неё и заполнить​Set ws =​

​RowFind_ll = Selection.Row​ Set xlsWb =​ a&, n&, b&​ As Object Dim​
​ диапазон A1 в​ не знал эту​ мыши приобретает вид​Юрий М​ других открытых файлов​
​ прописать​
​ индексу. В чем​
​Workbooks(«Книга1.xls»).Activate​ книги?​: Octavian.vs, так сохраните​ запустить макрос :)​ в ней Шапку(действие1).​ nb.Sheets(1)​
​next RowFind_ll​
​ xlsApp.ActiveWorkbook Set xSh​
​ Set xlsApp =​
​ a&, n&, b&​

CyberForum.ru

Активировать нужную книгу без привязки к наименованию книги (Макросы/Sub)

​ Книга1 Set oRange​​ функцию, но как​
​ песочных часов.​: А как Excel​ и где хранятся​200?’200px’:»+(this.scrollHeight+5)+’px’);»>ИмяКниги=Activeworkbook.Name​ проблема, лично мне,​или​Казанский​ в корень диска​А так он​ Далее переключиться в​With ws​//​
​ = xlsWb.ActiveSheet Set​ GetObject(, «Excel.Application») For​ Set xlsApp =​ = oSheet.Range(«A1») oRange.Value​ обычно чувствуюешь и​К сожалению. А​ должен догадаться КАКУЮ​ не известно.​. По индексу,​ не понятно. Код​Workbooks(«Книга1.xlsx»).Activate​:​ или в какую-нибудь​ должно быть:​ книгу «This» и​.Select​Пробовал указывать перед​ r = xSh.ActiveCell​ Each xlsWb In​ CreateObject(«Excel.Application») ‘ xlsApp.Visible​ = «Данные» ‘вносим​ пробуешь как будто​ Application.InputBox позволяет осуществлять​ именно из открытых​В какую сторону​
​ как советовал​
​ Ваш должен выглядеть​
​Dendibar​
​PuLbKa​
​ папку, отправьте и​
​Set sh =​
​ выполнить действие2. Результаты​
​.Name = "Результат"​
​ этой строчкой sh.select​
​ txt = r.Text​
​ xlsApp.Workbooks If xlsWb.Name​
​ = True Set​
​ в него данные​

​ есть еще на​ выбор диапазона мышью​

​ книг нужно активировать?​​ смотреть?​Udik​
​ примерно так (макрорекордер​
​: Добрый день!​
​, напишите на Форуме​
​ удалите после файл.​

​ wb.Sheet(a) (наверное)​ действия 2 занести​B)​.Rows(«1:4»).Select​

​ — тоже не​​ ‘.ActiveCelltxt = GetObject(,​ = «Book.xlsx» Then​ xlsWb = ActiveWorkbook​ ‘сохраняем файл с​ природе такая функция​ только на той​jfd​iba2004​, тоже можно. Только​ пишет правильно, но​
​Вопрос может глупый,​
​ имя активной книги.​
​Octavian.vs​
​Хотел чтобы этот​
​ в новую книгу.​

​ActiveWindow.FreezePanes = True​​ переключается​
​ «Excel.Application»).ActiveCell?Созрел ещё один​ MsgBox «Нужная книга!»​
​ n = xlsWb.Sheets.Count​ новым названием в​ ActiveWorkbook.Path помимо ThisWorkbook.Path!​ книге на которой​: Спасибо.​: Мне думается, что​ за индексами придётся​ кривовато)​ но только начал​PuLbKa​: , спасибо, об​ цикл по листам​Russia​End With​Windows(«Лист1″).Activate — Можно​ вопрос по этой​ End If Next​ Set xlsSh =​ указанное место на​У Вас тоже​ он был запущен.​КАк все далеко​ нужно создать что-то​очень​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub tt()​
​ свои попытки работы​
​: workbooks("Имя").activate​
​ этом уже думал,​
​ книги прошелся, поэтому​
​: Зачем активировать листы?​
​For Each sh​
​ как-нибудь обойтись без​ "бородатой" теме:​
​ Set xlsWb =​
​ xlsWb.Sheets(1) a =​
​ диск 'методом SaveAs​
​ так иногда происходит?​
​ Причем мышью можно​
​ зашло однако. А​
​ типа ListBox (TextBox)​
​тщательно следить.​

​Application.ScreenUpdating = False​​ с макросами, подскажите​Казанский​ возможно есть более​ написал это:​ Запиши нужные листы​ In wb.Worksheets​ этой строчки, т.к.​Как из VB6​ xlsApp.ActiveWorkbook n =​ xlsSh.Cells(Rows.Count, 1).End(xlUp).Row Set​ oWbk.SaveAs «D:Книга1.xls» oWbk.Close​ Как бы чуешь?​ выбрать только если​ я думал ограничится​​ в который будут​​МВТ​Workbooks(«Книга1»).Sheets(«Лист1»).Range(«9:9»).Copy Destination:=Workbooks(«Книга2»).Sheets(«Лист1»).Range(«A9»)​​ пожалуйста. Если повторяюсь​​: Я так делаю​ изящные решения?​​For Each sh​​ в переменные -​

​Set sh =​​ надо будет вытаскивать​ записать в активную​ xlsWb.Sheets.Count Set xlsSh​ xlsSh = xlsWb.Sheets(2)​ ‘закрываем файл Книга1​Sergey112233​ не установлен запрет​ паузой (например вызовом​
​ собираться имена открытых​
​: Если Вы АБСОЛЮТНО​Application.ScreenUpdating = True​
​ - извините, много​ он ругается​
​The_Prist​ In wb.Worksheets​
​ и обращайся к​
​ wb.Sheets(a(i))​ имя книг и​
​ ячейку Книги.xls формулу.​
​ = xlsWb.Sheets(1) '​
​ b = xlsSh.Cells(Rows.Count,​ Kill "D:Книга1.xls" 'удаляем​
​: Уважаемые форумчане.​ на Application.ScreenUpdating, как​ Inputboxa) в выполнении​
​ файлов. Есть что-то​
​ уверены, что у​
​End Sub​
​ форумов сегодня облазил,​
​PuLbKa​

​: Нету. Невозможно отправить​Проверил — лист​ ним.{/post}{/quote}​lastrow = sh.Cells(8,​ т.п. Мне казалось​В VBA это​

​ а дальше -​​ 1).End(xlUp).Row End Sub​ файл Книга1 с​Есть такой код:​
​ то долго не​ макроса и открытием​ их объединяющее, например,​

excelworld.ru

VBA: В процессе выполнения макроса выбрать мышью активное окно (книгу)

​ Вас будет открыто​​Dendibar​
​ нашел близкие вопросы​: Значит, используете неправильное​ что-то, что еще​ один только берет.​
​Так и делал!​ 5).End(xlDown).Row​ что это проще​ пишется так:​ косяк :) a​dzug​ диска ‘oWbk.Quit????????? End​1. Открыта Книга113​ мог понять почему​ другой книги, но​ расширение? Но я​ ровно 2 книги​: Спасибо за ответы!​ и ответы, но​ имя. Выполните в​
​ не создано. А​Может нужно так​

​ Стопорится на том​​k = 4​ делает.​ActiveCell.FormulaR1C1 = «=R[+1]C+R[0]C[-2]»А​ = xlsWb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row​: Увы, не работает..​ Sub​2. С помощью​ не работает выбор​ не дает открыть​ с такими проблемами​ причем, название одной​Наверное непонятно сформулировал​ на свой пример​ окне Immediate for​ именно так выглядит​ написать?​ моменте что указал​ ‘заполнение под «шапкой»​
​P.S.Заранее спасибо за​

​ вот из VB6​​ Set xlsSh =​
​dzug​dzug​

​ кода создаем новую​​ мышью, когда в​ другую книгу​ не сталкивался и​

​ из них Вы​​ вопрос:​ не могу применить​ each w in​ несохраненная книга -​

​For i =​​ в теме.​For RowFind_ll =​
​ любой совет, решение.​ записать не получается​ xlsWb.Sheets(2) b =​:​: Активацию между книгами​ книгу Книга1. Здесь​

​ другом макросе все​​jfd​ это всего лишь​ знаете, то можно​В том месте​ эти ответы.​
​ workbooks:debug.? w.name:nextПолучите список​ её пока вроде​ 0 To UBound(a)​Hugo​ 8 To lastrow​

​Johny​​ . Пробовал по​ xlsSh.Cells(Rows.Count, 1).End(xlUp).Row End​dzug​ смотрите в прилагаемом​​ она еще не​ было хорошо. )​: Пауза в выполнении​​ моё предположение. Сейчас,​ так​ где мне макрорекордер​Проблема вот в​ книг. Скопируйте нужное​

​ как нет и​​ind = 0​: Так именно в​ ‘ цикл по​: Я дико извиняюсь,​

​ разному (см.мой пост​​ Sub​
​: Проверил ещё раз.​ файле.​ сохранена на диске,​Sergei_A​ макроса во время​ к сожалению, времени​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub tt()​ написал: Windows(«Книга 2.xlsx»).Activate​ чем: макрос, который​

​ имя и вставьте​​ пути до неё​For Each sh​ этой строке ссылки​ ТП​ но можно ли​ № 16)в т.ч.​Устранил​ Не работает ..​new_see​

​ а находится в​​: Я не понял​ которой мышью тыкается​ мало, попробуйте что-нибудь​Dim wb1, wb2​ , при пользовании​ я сделал будет​ в код.​

​ тоже нет. Поэтому​​ In wb.Worksheets​ на лист нет.​RowFind_l = RowFind_ll​ узнать, что вообще​ и так:​
​Sub main() Dim​dzug​: Как создать новую​
​ памяти ПК.​ о чем это​ нужная книга и​ подобное в Нете​
​ As Workbook​ макросом, файл всегда​ применятся для эксель​
​Апострофф​

​ сохранять книгу в​​Russia​
​Если бы было​n = 1​

​ этот код делает?​​xlsWb.ActiveCell.FormulaR1C1 = «=R[+1]C+R[0]C[-2]»пробовал​ xlsApp As Excel.Application​​: Я в Excel​ книгу с заданным​3. В ячейку​ Вы.​ она становится активной,​ поискать, а м.б.​Dim Rng As​ будет называться по-разному,​ файлов с различными​: Можете подсказать как​ любом случае надо.​:​ типа так:​ ‘порядковый номер​И очень непонятно​​ и с​ Dim xlsWb As​ запускал, там пашет,​ именем?​ Книги1 вносим данные.​jfd​ все действия макроса​ более знающие люди​ Range​ поэтому не подходит,​ наименованиями, но код​ это сделать?​Octavian.vs​Russia​sh.Range(sh.Cells(RowFind_l, 4), sh.Cells(lastrow,​Range(Cells(RowFind_l, 4), Cells(lastrow,​

​ вот это: Set​​xlsApp​ Excel.Workbook Dim xlsSh​ сейчас посмотрю в​

​Например​​4. Сохраняем Книгу1​: Хотел малой кровью​ идут в активной​

​ помогут.​​Set wb1 =​​ чтобы название было​
​ ниже строго привязан​Catstail​

planetaexcel.ru

Запомнить директорию активной книги. VBA

​: Спасибо! Просто были​​: хотел написать​
​ 4)).Select​ 4)).Select ‘ —>​ wb = ThisWorkbook.​, и с​ As Excel.Worksheet Dim​ VB6​Sub CreateWorkbook() Set​ на диске.​ отделаться. Спасибо за​ книге. Если так​Удачи!​ ThisWorkbook​ «Книга 2.xlsx», надо,​
​ к копированию в​
​: 1: Открыть VBA​

​ сомнения которые теперь​​Hugo​

​вот это было​​ Здесь почему то​ И где эта​xSh​ a&, n&, b&​dzug​

​ NewWorkbook = Workbooks.Add​​5. Закрываем Книгу1.​ пример.​

​ конечно возможно.​​k61​With wb1.Sheets(«Лист1»)​ чтобы название сюда​

​ определенный файл («Книга​​ — [Alt+F11]​ окончательно развеяны.​: Это уже ближе.​ бы «так и​ стопорится из-за того​ «wb» используется?​
​.Сам задал вопрос,​ Set xlsApp =​: Вылазит вот такая​ End Subсоздает книгу​6. Удаляем Книгу1​jfd​ber$erk​: Код в Книге2​
​Set Rng =​ менялось в зависимости​ 2.xlsx»), а файлы​

planetaexcel.ru

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

​2: Нажать [Ctrl+G]​​Strobery​
​Но ведь если​
​ делал».​
​ что не переключается​ikki​ сам и отвечаю.​ GetObject(, «Excel.Application») Set​ «петрушка» на восьмой​ с именем по​ с диска.​
​:​: В коде макросе​
​Sub www() Workbooks(«Книга1»).Activate​ Intersect(.UsedRange, .Range(«9:9»))​
​ от названия файла.​
​ будут называться по​ (или ищите в​
​: У меня есть​For Each sh​Но тогда селект​
​ на другую книгу.​: а вот эта​
​Методом «тыка» получилось​ xlsWb = xlsApp.ActiveWorkbook​ строке.. А на​ умолчанию,​7. Закрываем Excel,​Казанский,​ если указать ActiveWorkbook.ActiveSheet.range…​ End Sub​
​End With​ Находил на форумах​ другому. Если меняю​ меню окно​ книга1 и кнопка(Лист1)​ In wb.Worksheets​ уже не нужен,​
​ Подскажите пжл, как​ строка у вас​ сделать так:​ n = xlsWb.Sheets.Count​ седьмой строке значение​а как изменить​
​ в котором была​Спасибо, так и​ то код как​jfd​Rng.Select​ решения, но почему-то​ Windows(«Книга 2.xlsx»).Activate на​Immediate​ при нажатии которой​то в sh​ разве что как​ исправить.​ нормально срабатывает?​GetObject(, «Excel.Application»).ActiveCell.FormulaR1C1 =​ Set xlsSh =​ объектной переменной xlsWb​ имя, чтобы создалась​ создана Книга1.​ сделал.​ раз будет выполняться​: Извините, создается впечатление​For Each wb2​ не получается, ниже​ ActiveSheet.Activate, то копирование​)​ Открываетия Форма1.​ уже есть ссылка​ финальное действие -​Selection.Find(What:=»», After:=ActiveCell, LookAt:=xlPart).Select​lastrow = sh.Cells(8,​ «=R[+1]C+R[0]C[-2]»​ xlsWb.Sheets(1) a =​

​ не присваивается..​​ не ‘Книга1’,​Подскажите, пожалуйста, два​Inter_E​

CyberForum.ru

Как создать новую книгу с заданным именем?

​ в выбранной книге​​ что Вы не​ In Workbooks​ пытаюсь вытащить название​
​ происходит в «Книга​
​3: Скопировать в​В форме1 есть​ на лист, и​ показать юзеру результат.​RowFind_ll = Selection.Row​
​ 5).End(xlDown).Row​Russia​ xlsSh.Cells(xlsSh.Rows.Count, 1).End(xlUp).Row Set​
​Запускать из VB6..​а например ‘Моя​

​ вопроса.​​: Добрый день!​ (хотя вроде как​

​ удосужились прочесть вопрос.​

CyberForum.ru

Обработка активной книги Excel

​If wb2.Name <>​​ файла в ячейку​ 1.xlsx», так как​ окно​ текст бокс1 и​Set sh =​Russia​next RowFind_ll​Johny​: Добрый вечер!​
​ xlsSh = xlsWb.Sheets(2)​
​dzug​ книга’​1. В пункте​В ходе выполнений​ это по умолчанию)​Юрий М​ wb1.Name Then Exit​ А1 Книги 2,​ ее считает активной.​Immediate​ кнопка1, при нажатии​ wb.Sheets(a(i))​: Пробовал:​next sh​: lastrow = sh.Cells(8,​Задаю листы.​ b = xlsSh.Cells(xlsSh.Rows.Count,​

​: Так?​​new_see​ 2, где Книга1​ макроса, нужно запоминть​Казанский​: Это почему? Вместо​ For​ дальше пытаюсь добавить​ Можно ли как-то​код for each​ кнопки открывается​совершенно лишнее, и​Range(sh.Cells(RowFind_l, 4), sh.Cells(lastrow,​ikki​ 5).End(xlDown).Row​Set wb =​ 1).End(xlUp).RowEnd Sub​Sub main() Dim​

​: NewWorkbook.Windows(1).Caption = ‘Моя​​ еще не сохранена,​

​ директорию где находиться​​: Создайте форму со​

​ «Книга1» подставляем выбранное​​Next​ содержимое этой ячейки​

​ активировать книгу без​​ w in workbooks:debug.?​книга2 Я активирую​ даже вероятно только​ 4)).Select​

​: имхо, здесь имеем​​Что за переменная​ ThisWorkbook​Спасибо. Всё заработало.​ XL As New​ книга’​ есть ли возможность​
​ текущая книга. Затем​

​ свойством ShowModal=False, надписью​​ значение из Лист/КомбоБокса,​
​Application.ScreenUpdating = False​ туда куда надо,​ привязки к названию?​ w.name:next4: Поставить курсор​ книгу1, (делаю нужные​ мешает.​и​ довольно дикую смесь​ «sh»?​Sheets(a).Select​ Только вместо xlUp​ Excel.Application, xlsSh XL.Workbooks.Open​спасибо​ активации Книги113, затем​ я создаю макросом​

​ «Выберите книгу» и​​ как предлагалось выше.​Rng.Copy Destination:=wb2.Sheets(«Лист1»).Range(«A9»)​ но все равно​ Например, активировать книгу,​ ввода на строку​ процедуры) и теперь​Или одно, или​
​sh.Range(Cells(RowFind_l, 4), Cells(lastrow,​ результатов работы макрорекодера​Russia​
​Sheets(a(i)).Columns(«E:F»).Cut​ надо написать -4162​

​ App.Path & «Book.xlsx»​​dzug​

​ активации Книги1. Т.е.​​ новую книгу. Суть​ кнопкой. В коде​ber$erk​Application.ScreenUpdating = True​ берет не нужную​ в которой установлен​ с введенным кодом​ мне нужно активировать​ другое.​ 4)).Select​ и каких-то (не​: Извиняюсь пару строчек​Columns(«A:A»).Select​ . Понять это​ Set XL =​: Необходимо определить количество​ здесь передача активации​ в том что​ кнопки напишите​: все открытые файлы​End Sub​ ячейку, а ячейку​ курсор? Или по​5: нажать Enter​

​книгу2 но так​
​Russia​//​ очень понятных) попыток​ забыл захватить. Я​Selection.Insert Shift:=xlToRight​ помогла соседняя тема​ XL.ActiveWorkbook.Sheets.Application XL.Visible =​ заполненных строк первого​ между книгами возможна.​ я хотел сохранять​Private Sub CommandButton1_Click()​ Excel​В противном случае​ из книги 1.​ какому-то иному признаку.​Но есть подозрение,​
​ как имя книги​: Да я тоже​Пойду проверять.​ их доработки.​ писал. И вся​
​Set nb =​Работа с excel​
​ True Dim a&,​
​ и второго, по​2. Пункт7 -​ новую книгу туда​ Unload Me MainMacro​Sub ListAll() Dim​ соблаговолите ВНЯТНО объяснить,​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​ Подскажите пожалуйста.​ что сделать активной​ находится в текст​ об этом думал,​
​Hugo​много мусора -​ используется. И хотелось​
​ Workbooks.Add​ ячейками​ n&, b& n​ индексу, листов активной​
​ как закрыть Excel,​
​ же где находилась​ End Sub​ wb As Workbook​ что именно Вы​Sub Тест()​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Тест()​ Вы хотите неоткрытую​ боксе я не​ но просто макрос​: Ну значит недопробовали:)​ те же ActiveWindow.FreezePanes​ бы что бы​Set ws =​Ещё раз спасибо.​ = XL.Sheets.Count Set​ книги Excel (книга​ в котором создавалась​
​ прежняя книга. Не​, где MainMacro​ For Each wb​
​ делаете и что​’​
​’​ книгу?​ знаю как это​ не работал, вот​Только я в​ = True, .Rows(«1:4»).Select​ когда я писал​
​ nb.Sheets(1)​Не могу прочитать​​ xlsSh = XL.Sheets(1)​​ открыта). На седьмой​​ Книга1, а Книга113​​ могу придумать эту​ — макрос, который​
​ In Workbooks MsgBox​ ожидаете получить в​
​’ Тест макрос​’ Тест макрос​

CyberForum.ru

VBA Как переключать окна/книги?

​Pavel55​​ сделать.​
​ я и подумал,​
​ Вашем примере нигде​ и др.​
​ sh.select — становилась​
​With ws​
​ название подключаемой библиотеки..​
​ a = xlsSh.Cells(Rows.Count,​
​ строке переменной xlsWb​ оставалась бы открытой.​
​ идею…​ работает с активной​
​ wb.Name Next End​
​ результате​
​’​
​’​
​: Казанский совершенно прав.​
​Вот код​
​ что может нужно​ не видел, где​
​возможно, проще озвучить​ активной книга ThisWorkbook,​
​.Select​ Напишате пожалуста название​ 1).End(xlUp).Row Set xlsSh​ , значение не​
​ Здесь, видимо, тот​
​Заранее благодарен.​ книгой.​
​ Sub​Dendibar​’​’​ Но при условии,​Private Sub CommandButton1_Click()​ задать.​ эта sh определяется…​
​ саму задачу?​
​ а не получается​
​.Name = «Результат»​

​ отдельно.Microsoft Excel 12.0​
​ = XL.Sheets(2) b​ присваивает ???​ же вопрос активации.​С уважением, Inter_E​
​Форма запускается стартовым​jfd​: StoTisteg, большое спасибо!​Range (A1) =​Windows(«Книга 1.xlsx»).Activate​ что книга открыта.​ ‘Открываю Книгу2 Dim​Спасибо, Hugo!​

​Russia​Russia​

​ — не переключается​​.Rows(«1:4»).Select​ Object LibraryРазобрался с​ = xlsSh.Cells(Rows.Count, 1).End(xlUp).Row​Спасибо за ответ.​
​Как Вы понимаете,​Alex_ST​ макросом из одной​: Юрий М, потому​ Вашим способом все​

​ ActiveWorkbook.Name​​Rows(«9:9»).Select​ Если книга не​ wb As Workbook​

​Юрий М​: Сообщение от 05.05.2011,​

​: Блин. Хорошо. Как​​ на окно этой​ActiveWindow.FreezePanes = True​

​ библиотекой..Спасибо.Да простят меня​ End Sub​

​Sub main() Dim​​ действия с Книгой1​: ThisWorkbook.Path​ команды​ что этот способ​ получилось.​Windows(«Книга 1.xlsx»).Activate​Selection.Copy​ открыта — ее​ Set wb =​: Возвращаясь к переключению​ 17:28​ сделать активным этот​ книги, остается в​End With​
​ администраторы за поднятие​Апострофф​ xlsApp As Object​ должны происходить в​ответ > Alex_ST​UserForm1.Show​ очевиден и предполагает​Всем остальным тоже​Rows(«9:9»).Select​Windows(«Книга 2.xlsx»).Activate​

​ нужно сначала открыть,​ Workbooks.Open(Filename:=’C: ‘ &​
​ между книгами:​
​в середине указывается.​
​ лист? А потом​
​ новой книге и​
​lastrow = sh.Cells(8,​ темы с «двухлетней​
​: В том то​ Dim xlsWb As​
​ скрытом от пользователя​
​: Спасибо, я изменил​
​Юрий М​
​ знание названия файла​
​ большое спасибо за​
​Selection.Copy​

​Rows(«9:9»).Select​ а уж затем​
​ TextBox1 & ‘.xls’)​Windows(«Нужная_Книга.xls»).Activate​
​Hugo​ другой лист из​
​ выдает ошибку.​ 5).End(xlDown).Row​
​ бородой» , но​ и дело, что​ Object Dim xlsSh​ режиме. Постоянно открыта​
​ на «ActiveWorkbook.Path» и​
​: Попробуйте тогда .Wait​ нужной книги.​
​ помощь!​Windows(«Range (A1).Value»).Activate​ActiveSheet.Paste​ активизировать.​ ‘ Workbooks(‘Книга1.xls’).Worksheets(‘Лист1’).Activate ‘Имя​Octavian.vs​: Да, там я​ другой книги (ThisWorkbook)?​
​lastrow = sh.Cells(8,​
​k = 4​
​ вопрос стопроцентно по​
​ книга Excel открыта​

​ As Object Dim​​ только Книга113.​ кажется все будет​А Application.InputBox не​А кроме получения​jfd​Rows(«9:9»).Select​
​Range(«J5»).Select​мне кажется. тут​ последней заполненой ячейки​: Добрый день,​

​ не вникал.​Johny​

​ 5).End(xlDown).Row — это​​ ‘заполнение под «шапкой»​ этой теме.​ и название у​ a&, n&, b&​Sub Кнопка1_Щелкнуть() Dim​

​ работать положенно. Сейчас​​ пробовали?​
​ списка всех открытых​: Добрый день!​ActiveSheet.Paste​End Sub​

​ ещё важную роль​​ Const iRow2 =​На просторах интернета​Но вот это​: ikki, Согласен полностью.​ мои опыты, чтобы​

​For RowFind_ll =​​Открыта книга Эксель,​ неё может быть​ Set xlsApp =​ oExcel As New​ окончательно проверю!​jfd​ фалов и выбора​Банальная вроде вещь,​Range(«J5»).Select​Оформляйте коды тегами​ играет указано ли​

​ 65536: iClm =​​ нашел код отправки​ как понимать?​russia, попытайтесь ещё​ производил операции с​ 8 To lastrow​
​ на листе выделена​ разное. Обращаться надо​ CreateObject(«Excel.Application») ‘ xlsApp.Visible​ Excel.Application ‘Запускаем Excel​

​Inter_E​​: Нашел что Wait​ из него одного,​ а потратил кучу​
​End Sub​ (кнопка #)​
​ расширение файла.​ ‘A’ iRws =​
​ сообщения с вложением​For Each sh​ раз описать, для​
​ листом sh (книге​ ‘ цикл по​ одна ячейка.​ к АКТИВНОЙ книге..​ = True Set​

​ oExcel.Visible = True​​: Спасибо, все нормально​
​ —​ других способов нет?​
​ времени и не​
​StoTisteg​Udik​
​На Windows, где​
​ Columns(iClm).Rows(iRow2).End(xlUp).Row ??????????????????????????? ActiveWorkbook.SaveAs​

​ из Excel, но​​ In wb.Worksheets​
​ чего нужен сей​ где находиться макрос).​ ТП​Как из VB​

​В Вашем коде​​ xlsWb = xlsApp.ActiveWorkbook​ ‘Делаем его видимым​
​ пошло, с АктивВоркБук.Пазс​

​это метод позволяет приостановить​​Sergei_A​ нашел ничего.​
​: Как он будет​: по номеру типа​
​ в найстройках не​ Filename:= _ ‘C:123​
​ т. к. активная​Set sh =​

​ макрос?​​ Работает. Но если​RowFind_l = RowFind_ll​

​ 6 узнать что​​ выдаёт ошибку на​ n = xlsWb.Sheets.Count​ Dim oWbk As​ТолькоУчусь​ работу Excel на​

​: Я бы сделал​​Есть файл1 с​ называться у Вас,​
​ такого​ указано — отображать​
​ ‘ & Cells(iRws,​ книга является вновь​

​ wb.Sheets(a(i))​Johny​ задавать sh.cells(…)… -​n = 1​
​ записано в активной​ строке:​

​ Set xlsSh =​ Excel.Workbook ‘Создаем новую​
​: Лучше как Алексей​ указанное вами время,​
​ немодальную форму (похожую​ макросом (кроме макроса​
​ ведомо только Вам.​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>​ расширения файлов нужно​

​ iClm) & ‘.xls’​​ созданной и не​

​Johny​​: Зачем активировать листы?​

​ то выдает ошибку​​ ‘порядковый номер​
​ ячейке ?​
​Dim XL As​ xlsWb.Sheets(1) a =​
​ книгу Книга1 Set​ предложил, так как​ сняв нагрузку с​
​ на msgbox) с​ ничего не имеет),​
​ Если Вы знаете​Public Sub test()​ делать так​
​ End SubЗаранее благодарен​ имеет своего «реального»​

​: Здесь имеется ввиду​​ Запиши нужные листы​ на подобии вышеописанного.​Range(Cells(RowFind_l, 4), Cells(lastrow,​Пробовал так:​ New Excel.Application, xlsSh​ xlsSh.Cells(Rows.Count, 1).End(xlUp).Row Set​ oWbk = oExcel.Workbooks.Add()​
​ это «…текущая книга…».​

​ процессора. Используется для​​ текстом «​ есть также другие​
​ имя книги, то​

planetaexcel.ru

VBA отправка созданной (активной) книги через outlook

​Debug.Print Application.Workbooks(1).Name​​При открытой книге​
​ ||||||Strobery||||||​ адреса, строчка кода​ активный лист.​ в переменные -​Set wb =​ 4)).Select ‘ —>​Dim xSh As​dzug​ xlsSh = xlsWb.Sheets(2)​ Dim oSheet As​Inter_E​ демонстраций — чтобы​Выберите одну из открытых​
​ открытые файлы. После​ так и пишите​End Sub​

​Workbooks(«Книга1»).Activate​​Masalov​ ( .Attachments.Add ActiveWorkbook.FullName)​Johny​ и обращайся к​ ThisWorkbook​

​ Здесь почему то​​ Excel.Worksheet, xlsApp As​:​ b = xlsSh.Cells(Rows.Count,​ Excel.Worksheet Set oSheet​

​: Да, спасибо, но​​ пользователь успел увидеть,​ книг Excel, и​ запуска макроса из​ — Workbooks(). Ещё​только в номерах​А если вы​: например:​ не может подтянуть​: Range(Cells(RowFind_l, 4), Cells(lastrow,​ ним.​Sheets(a).Select​

​ стопорится из-за того​​ Excel.Application, xlsWb As​dzug​ 1).End(xlUp).Row End Sub​

planetaexcel.ru

Активация книг с именем находящимся в текстбоксе (Excel)

​ = oWbk.Worksheets.Item(«Лист1») ‘Находим​​ у меня код​ что происходит, для​ нажмите ОК.​ файл1 надо выбрать(указать​
​ один способ —​ не запутайтесь​ в настройках Windows​Windows(Me.TextBox1.Value).Activate​
​ файл, может есть​ 4)).Select ‘ —>​Russia​Sheets(a(i)).Columns(«E:F»).Cut​
​ что не переключается​ Excel.Workbook, xlsSh As​: Sub main() Dim​dzug​ Лист1 oSheet.Name =​ макроса расположен на​
​ ожидания завершения выполнения​
​» и одной кнопкой​ мышью, сделать активным)​ завести переменную, скажем,​.​ (в свойствах папки)​то, нет?​ какие-нибудь пути решения?​ Здесь почему то​: Задача. Мне необходимо​Columns(«A:A»).Select​ на другую книгу.​ Excel.Worksheet Dim txt$,​ xlsApp As Excel.Application​: Sub main() Dim​ «Новый лист» ‘Присваиваем​ Personal.book и поэтому​ какой-либо внешней операции​

​ ОК. По кнопке​​ один из открытых​
​ ИмяКниги и в​
​МВТ​

CyberForum.ru

​ указали — отображать​

Открыть папку (каталог) в проводнике Windows для просмотра из кода VBA Excel с помощью функции Shell и ключевых слов explorer и cmd. Передача фокуса открытой папке.

Открытие папки в проводнике

Открытие папки (каталога) в проводнике Windows для просмотра с помощью функции Shell и ключевого слова explorer:

Shell «explorer C:UsersPublicТекущая папка», vbNormalFocus

vbNormalFocus означает, что окно Windows Explorer получает фокус и восстанавливает свое исходное положение и размер.

Преимущество способа: имя папки может содержать пробелы.

Недостаток способа: если открываемая папка уже открыта, открывается второй экземпляр, затем третий и т.д.

То же преимущество и тот же недостаток у следующего способа:

ThisWorkbook.FollowHyperlink «C:UsersPublicТекущая папка»

Открытие или передача фокуса

Открытие папки (каталога) в проводнике Windows для просмотра или передача папке фокуса, если она уже открыта, с помощью функции Shell и ключевого слова cmd:

Shell «cmd /C start C:UsersPublic», vbNormalFocus

При реализации этого способа происходит кратковременное отображение на экране окна командной строки (cmd.exe). Если убрать параметр vbNormalFocus, окно командной строки мелькать не будет, но и окно проводника, при повторном его вызове, не получит фокус.

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

Недостаток способа: имя папки не должно содержать пробелы.

От недостатка этого способа можно избавиться с помощью экранирующих кавычек:

Shell «cmd /C start ««»» ««C:UsersPublicТекущая папка»«», vbNormalFocus

Для себя на заметку, какие кавычки что экранируют:

«[cmd /C start ««[неиспользуемый параметр]»» ««[C:UsersPublicТекущая папка]»«]»

Смотрите как открывать из кода VBA Excel файлы других приложений и интернет-сайты.


Хитрости »

17 Июнь 2015              147416 просмотров


Диалоговое окно выбора файлов/папки

Часто при работе с файлами и написании кодов начинающие «кодить» в VBA сталкиваются с необходимостью предоставить пользователю возможность самостоятельного выбора файлов: либо всех в указанной папке, либо каких-то отдельных. Конечно, можно жестко в коде написать нечто вроде: «C:DocumentsFilesКнига1.xls», но это требует не только наличия именно диска С, но и полной структуры папок и имен файлов. Это очень неудобно в большинстве случаев и куда чаще необходимо дать пользователю возможность самому указать имя файла. Записывать в ячейку листа полный путь и имя весьма непрактично и часто для неискушенного пользователя вызывает только «отторжение» от программы. В статье Просмотреть все файлы в папке я приводил пример кода, который просматривает все файлы в указанной папке и папка при этом выбирается сами пользователем из привычного по работе с Windows диалога. Там используется диалог выбора папок. Именно на этом я и хочу сделать акцент в этой статье — рассказать про некоторые способы вызова подобных диалогов для выбора файлов или папки. Так же обращу внимание на некоторые вещи, которые следует учитывать при использовании того или иного типа диалогов.

  • Диалог выбора файлов Applicaton.GetOpenFileName
  • Диалог выбора файлов FileDialog(msoFileDialogFilePicker)
  • Диалог выбора папки FileDialog(msoFileDialogFolderPicker)
  • Диалог выбора папки через Shell
  • Диалог сохранения файла SaveAs

Если рассматривать наиболее простые варианты, то их два. Выбрать файлы можно через Applicaton.GetOpenFileName или через Application.FileDialog. Отличия в них есть, но я заострю внимание на главном: GetOpenFileName будет работать в любой версии Excel, а класс FileDialog только начиная с Excel 2002, т.к. именно в этой версии впервые был использован класс FileDialog. Это стоит учитывать при разработке.

Диалог выбора файлов Applicaton.GetOpenFileName

Параметры:

Application.GetOpenFilename([FileFilter], [FilterIndex], [Title], [ButtonText], [MultiSelect])
По сути я часто использую именно его, т.к. это универсальный метод и в нем есть все, что лично мне необходимо: выбрать определенные типы файлов позволяет, возможность запрета выбора нескольких файлов сразу есть.

FileFilter Указываются типы файлов, которые будут отображаться в диалоговом окне выбора. Например, если указать «Excel files(*.xls*),*.xls*», то возможно будет выбрать только файлы Excel(с расширением, начинающимся на .xls — .xls, .xlsx, .xlsb, .xlsm и т.д.). Если указать «Text files(*.txt),*.txt», то можно будет выбрать только текстовые файлы с расширением .txt. Так же можно указать более одного типа расширений: «Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt». По умолчанию тип файлов в диалоговом окне будет принадлежать первому указанному типу файлов(*.xls*). Но можно указать любой из перечисленных типов при помощи аргумента FilterIndex. Так же можно указать выбор любых типов файлов: «All files(*.*),*.*»
FilterIndex Если аргументом FileFilter указано более одного типа файлов(расширений), то этот аргумент указывает какой именно тип использовать. Например, следующая строка по умолчанию назначает выбор текстовых типов файлов:

avFiles = Application.GetOpenFilename _
    ("Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt", 2, _
     "Выбрать текстовые или Excel файлы", , True)

Атрибут FilterIndex

Title Текст заголовка диалогового окна. Если указать «Выбрать текстовые или Excel файлы», то именно этот текст будет в заголовке. Если не указывать, то будет текст по умолчанию(нечто вроде «Открытие документа»)
ButtonText Данный аргумент доступен только для ПК под управлением Macintosh(MAC). Назначает текст для кнопки диалогового окна Открыть. Для владельцев Windows этот текст всегда будет «Открыть»
MultiSelect Указывает, может быть выбран только один файл или несколько:

  • True — можно будет выбрать более одного файла для обработки(через Shift или Ctrl или простым выделением мышью внутри окна)
  • False — можно будет выбрать только один файл

По умолчанию принимает значение False
Выбора только одного файла:

avFiles = Application.GetOpenFilename _
    ("Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt", 2, _
     "Выбрать текстовые или Excel файлы", , False)

Выбор нескольких файлов:

avFiles = Application.GetOpenFilename _
    ("Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt", 2, _
     "Выбрать текстовые или Excel файлы", , True)

Пример применения диалога Application.GetOpenFilename

Sub ShowGetOpenDialod()
    Dim avFiles
    'по умолчанию к выбору доступны файлы Excel(xls,xlsx,xlsm,xlsb)
    avFiles = Application.GetOpenFilename _
                ("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы", , False)
    If VarType(avFiles) = vbBoolean Then
        'была нажата кнопка отмены - выход из процедуры
        Exit Sub
    End If
    'avFiles - примет тип String
    MsgBox "Выбран файл: '" & avFiles & "'", vbInformation, "www.excel-vba.ru"
End Sub

В данном случае совершенно неважно указан ли выбор только одного файла или нескольких. Может поменяться только способ обработки полученного результата. Если параметр MultiSelect установлен в False, то переменная avFiles примет тип String, т.е. это будет одна строка. Предположим, что была выбрана книга Excel. Тогда открыть её можно будет как обычно это делается при использовании переменной:

Если же параметр MultiSelect установлен в True, то переменная avFiles примет тип Array — массив строк, в котором будут записаны все пути и имена выбранных файлов. Обрабатывать в таком случае следует циклом:

'avFiles - примет тип Array
    For Each x In avFiles
        Workbooks.Open x
    Next

В приложенном к статье файле приведены две процедуры с использованием этого типа диалога и обработкой файлов с параметром MultiSelect, установленным в True и False.


 
Диалог выбора файлов FileDialog(msoFileDialogFilePicker)

У этого диалога тоже есть параметры и они очень схожи с таковыми в Application.GetOpenFilename:
Ниже в статье примера кода с применением всех описанных параметров

AllowMultiSelect Указывает, может быть выбран только один файл или несколько:

  • True — можно будет выбрать более одного файла для обработки(через Shift или Ctrl или простым выделением мышью внутри окна)
  • False — можно будет выбрать только один файл
Title Текст заголовка диалогового окна. Если указать «Выбрать текстовые или Excel файлы», то именно этот текст будет в заголовке. Если не указывать, то будет текст по умолчанию(нечто вроде «Открытие документа»)
Filters Перечисляются типы файлов, которые будут отображаться в диалоговом окне выбора. Для добавления типа файла(расширения) необходимо использовать метод Add:
.Filters.Add([Description],[Extensions],[Position])

  • Description — описание типа файлов. Произвольный текст, указывающий тип файлов. Например «Рисунки» или «Файлы Excel».
  • Extensions — расширения файлов. Непосредственно перед расширением обязательно должна стоять звездочка и точка: *.xls. Иначе диалог выдаст ошибку. Для перечисления нескольких расширений используется разделитель в виде точки-с-запятой: «*.xls*;*.xla*» или «*.xls;*.xlsx;*.xlsm». Звездочка после расширения заменяет любой набор символов или ни одного. Например, при указании «*.xls*» будет возможным выбрать любые файлы, расширение которых начинается на .xls: .xls,.xlsx,.xlsm,.xlsb и т.д., но нельзя будет выбрать файлы с расширением .xla,.xlam и тем более .doc или .txt. Если необходимо осуществить выбор любого типа файлов, то необходимо просто очистить фильтр и не добавлять никакие типы: .Filters.Clear
  • Position — указывает, каким по счету в списке будет тип файлов. На рисунке ниже первым идет тип «Excel files», а вторым «Text files»:
    Атрибут FilterIndex
  • Тип файлов, который будет показан по умолчанию при вызове диалога определяется свойством FilterIndex диалога FileDialog.
    Важный момент: диалог, вызванный в одном сеансе Excel сохраняет добавленные ранее типы файлов. Поэтому перед назначением новых типов необходимо выполнить очистку фильтра:
    .Filters.Clear

Каждый новый тип файлов добавляется новым Add:

.Filters.Add "Excel files", "*.xls*;*.xla*", 1 'добавляем возможность выбора файлов Excel
.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
FilterIndex Назначает тип файлов, который будет выбран по умолчанию из всех перечисленных в коллекции Filters при вызове диалога
InitialFileName Этим параметром можно задать начальную папку, на которой будет открыт диалог:

.InitialFileName = "С:Temp"

Если при этом еще добавить имя файла, то в поле диалога Имя файла будет так же отображено это имя:

.InitialFileName = "С:TempКнига1.xlsx"

Я лично не рекомендую указывать имя файла, т.к. после показа диалога этот файл автоматически будет выбран, что не всегда бывает правильным. Но все зависит от задач. Если пользователь не выберет самостоятельно ни одного файла, то ответом диалога будет именно файл с указанным именем(Книга1.xlsx). Если такого файла не окажется в папке, то диалог выдаст предупреждение, что такого файла нет.

InitialView Данный параметр определяет внешний вид и структуру окна диалога. Доступно 9 вариантов:

  • msoFileDialogViewDetails
  • msoFileDialogViewLargeIcons
  • msoFileDialogViewList
  • msoFileDialogViewPreview
  • msoFileDialogViewProperties
  • msoFileDialogViewSmallIcons
  • msoFileDialogViewThumbnail
  • msoFileDialogViewTiles
  • msoFileDialogViewWebView

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

SelectedItems Возвращает коллекцию выбранных файлов. В отличии от Application.GetOpenFilename всегда возвращается массив строк, поэтому можно всегда использовать цикл для открытия файлов, даже если параметр AllowMultiSelect установлен в False:

For Each x In .SelectedItems
    Workbooks.Open x
Next

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

For lf = 1 to .SelectedItems.Count
    x = .SelectedItems(lf)
    Workbooks.Open x
Next

Нумерация строк в SelectedItems всегда начинается с 1

Show Пожалуй, самый важный метод в диалоге — отвечает за показ диалога. При этом метод Show возвращает ответ в виде целого числа:

  • -1 — выбор файлов был сделан и нажата кнопка Открыть
  • 0 — была нажата кнопка отмены

Это можно(точнее нужно!) использовать, чтобы не продолжать выполнение кода, если нажата кнопка Отмены:

If .Show = 0 Then Exit Sub 'была нажата кнопка отмены

Пример вызова диалога выбора файлов:

Sub ShowFileDialog()
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Title = "Выбрать файлы отчетов" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        .Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 2 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = "С:TempКнига1.xlsx" 'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Sub 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            x = .SelectedItems(lf) 'считываем полный путь к файлу
            Workbooks.Open x 'открытие книги
            'можно также без х
            'Workbooks.Open .SelectedItems(lf)
        Next
    End With
End Sub

 
Диалог выбора папки

Диалог выбора папки необходим в случаях, когда файлов в папке много и обработать нужно все эти файлы. Пример такой обработки я уже выкладывал в статье Просмотреть все файлы в папке. Здесь проще всего использовать появившийся в 2002 Excel диалог Application.FileDialog. Его параметры практически такие же, как у Application.FileDialog(msoFileDialogFilePicker) только их меньше доступно для применения:

Title Текст заголовка диалогового окна. Если указать «Выбрать папку с отчетами», то именно этот текст будет в заголовке. Если не указывать, то будет текст по умолчанию(нечто вроде «Открыть папку»)
InitialFileName Этим параметром можно задать начальную папку, на которой будет открыт диалог:

.InitialFileName = "С:Temp"
InitialView Данный параметр определяет внешний вид и структуру окна диалога. Доступно 9 вариантов:

  • msoFileDialogViewDetails
  • msoFileDialogViewLargeIcons
  • msoFileDialogViewList
  • msoFileDialogViewPreview
  • msoFileDialogViewProperties
  • msoFileDialogViewSmallIcons
  • msoFileDialogViewThumbnail
  • msoFileDialogViewTiles
  • msoFileDialogViewWebView

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

SelectedItems Возвращает коллекцию с одним элементом, в котором содержится путь к выбранной папке. Нумерация строк в SelectedItems всегда начинается с 1, но т.к. выбор нескольких папок невозможен, то всегда указывается 1: x = .SelectedItems(1)
ButtonName Назначает текст кнопки, которой подтверждается выбор папки. Может содержать не более 51 знака(чего как правило достаточно).
Show Метод, который вызывает показ диалога с выбранными параметрами. Возвращает ответ в виде целого числа:

  • -1 — папка выбрана и нажата кнопка Открыть
  • 0 — была нажата кнопка отмены

Это можно(точнее нужно!) использовать, чтобы не продолжать выполнение кода, если нажата кнопка Отмены:

If .Show = 0 Then Exit Sub 'была нажата кнопка отмены

Пример вызова диалога выбора папки:

Sub ShowFolderDialog()
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку с отчетами" '"заголовок окна диалога
        .ButtonName = "Выбрать папку"
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .InitialFileName = "C:Temp" '"назначаем первую папку отображения
        .InitialView = msoFileDialogViewLargeIcons 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Sub 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        x = .SelectedItems(1) 'считываем путь к папке
        MsgBox "Выбрана папка: '" & x & "'", vbInformation, "www.excel-vba.ru"
    End With
End Sub

 
Диалог выбора папки через Shell

Диалог Application.FileDialog(msoFileDialogFolderPicker) всем хорош и удобен, кроме одного: как я уже упоминал, он стал доступен из VBA только начиная с 2002 Excel. Плюс, описанные выше диалоги не работают в Outlook — он просто лишен хоть какой-либо реализации выбора папок или файлов. Поэтому дополню статью еще одним вариантом показа диалога выбора папки — с помощью объекта Shell. Этот вариант выбора папки будет работать и в Outlook и в любом другом приложении.

Shell.BrowseForFolder([Hwnd], [sTitle], [iOptions], [vRootFolder])

Hwnd Дескриптор окна, к которому будет относится диалог. Как правило указывается 0
sTitle Поясняющий текст, который будет отображен в диалоге. Подобие заголовка окна. Может быть любым текстом, например «Выбрать папку с отчетами»
iOptions Дополнительные параметры для диалога. Рекомендуется использовать 0. Но можно попробовать и пару других вариантов. Например, если указать 20, то в диалоговом окне появится дополнительное текстовое поле, в котором будет отображено имя выбранной папки.
vRootFolder Аналогично InitialFileName в рассмотренных выше диалогах. Задает начальную папку, на которой диалог будет открыт после запуска.

Диалог выбора папки - Shell
Пример вызова диалога выбора папки через Shell:

Sub GetFolderDialog_Shell()
    On Error Resume Next
    Dim objShellApp As Object, objFolder As Object, ulFlags
    Dim x As String
    Set objShellApp = CreateObject("Shell.Application")
    'ulFlags - числовой код, определяющий вид отображаемого окна и некоторые параметры
    '    ulFlags = 0     - наиболее часто применяемый. Лучше использовать всегда именно 0
    '    ulFlags = 1     - не отображать Корзину
    '    ulFlags = 2     - не включать сетевые папки
    '    ulFlags = 20    - добавляется тестовое поле с отображением имени выбранной папки
    '    ulFlags = 16    - отображать EditBox для ввода полного пути с клавиатуры
    '    ulFlags = 16384 - можно так же выбирать файлы.
    'Некоторые константы можно комбинировать. Например если указать 1 + 16384 - то можно будет выбирать файлы
 
    ulFlags = 0
    Set objFolder = objShellApp.BrowseForFolder(0, "Выбрать папку с отчетами", ulFlags, "C:Temp")'"
    x = objFolder.Self.Path 'записываем в переменную путь к папке
    If Err.Number <> 0 Then
        MsgBox "Папка не выбрана!", vbInformation, "www.excel-vba.ru"
    Else
        MsgBox "Выбрана папка: '" & x & "'", vbInformation, "www.excel-vba.ru"
    End If
End Sub

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

Скачать пример:

  Tips_Macro_GetOpenFileFolder.xls (100,0 KiB, 3 740 скачиваний)


 
Диалог сохранения файла SaveAs

Еще один вид диалогового окна — запрос имени и места сохранения файла.
Параметры:

Application.GetSaveAsFilename([InitialFileName], [FileFilter], [FilterIndex], [Title], [ButtonText])
Универсальный диалог, работающий во всех версиях Excel, начиная с 2000

InitialFileName Можно указать путь и имя файла, которые будут использованы в качестве шаблона для сохранения. По умолчанию в диалоге отображается папка, которая была использована в последний раз в текущем сеансе Excel. Если диалог вызывается впервые, то будет показана для сохранения файлов по умолчанию(задается из самого Excel: Файл(File)Параметры(Options)Сохранение(Save)Расположение локальных файлов по умолчанию(Default local file location)).
Показываем диалог со стартовой папкой на той книге, в которой сам макрос, без указания имени сохраняемой книги:

sToSavePath = Application.GetSaveAsFilename(InitialFileName:=ThisWorkbook.Path)

Показываем диалог со стартовой папкой на той книге, в которой сам макрос и именем сохраняемой книги «SaveAs.xlsm»:

sToSavePath = Application.GetSaveAsFilename(InitialFileName:="SaveAs.xlsm", FileFilter:="Excel files (*.xlsm), *.xlsm")

Здесь следует обратить внимание на один важный момент: если необходимо помимо стартовой папки указать еще и имя файла, то в обязательном порядке надо указывать так же аргумент FileFilter. Если его не указывать, то InitialFileName просто откроет указанную папку, т.к. не поймет файлы какого типа надо отображать. Либо вместо «SaveAs.xlsm» надо будет указывать «SaveAs.*», что я лично настоятельно не рекомендую делать.
Несмотря на возможность указать имя файла его можно изменить прямо в диалоговом окне, что тоже порой правильнее. Например, чтобы убедиться в том, что имя файла указано пользователем.

FileFilter Указываются типы файлов, которые будут отображаться в диалоговом окне выбора. Должен совпадать с тем типом, с которым собираемся сохранять файл. Например, если указать «Excel files(*.xls*),*.xls*», то возможно будет выбрать только тип файлов Excel(с расширением, начинающимся на .xls — .xls, .xlsx, .xlsb, .xlsm и т.д.). Если указать «Text files(*.txt),*.txt», то только текстовые файлы с расширением .txt. Так же можно указать более одного типа расширений: «Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt». По умолчанию тип файлов в диалоговом окне будет принадлежать первому указанному типу файлов(*.xls*). Но можно указать любой из перечисленных типов при помощи аргумента FilterIndex. Так же можно указать выбор любых типов файлов: «All files(*.*),*.*»
FilterIndex Если аргументом FileFilter указано более одного типа файлов(расширений), то этот аргумент указывает какой именно тип использовать. Например, следующая строка по умолчанию назначает выбор и сохранение файла в текстовый:

avFiles = Application.GetSaveAsFilename _
    (InitialFileName:=ThisWorkbook.Path, FileFilter:="Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt", FilterIndex:=2)

Атрибут FilterIndex

Title Текст заголовка диалогового окна. Если указать «Выбрать текстовые или Excel файлы», то именно этот текст будет в заголовке. Если не указывать, то будет текст по умолчанию(нечто вроде «Сохранение документа»)
ButtonText Данный аргумент доступен только для ПК под управлением Macintosh(MAC). Назначает текст для кнопки диалогового окна Сохранить. Для владельцев Windows этот текст всегда будет «Сохранить»

Что еще важно знать: сам по себе вызов диалога GetSaveAsFilename ничего не сохраняет — он только создает путь для сохраняемого файла. Сохранять придется принудительно после выбора места и имени.
Пример применения диалога Application.GetSaveAsFilename

Sub ShowGetSaveAsDialod()
    Dim sToSavePath
    sToSavePath = Application.GetSaveAsFilename( _
             InitialFileName:=ThisWorkbook.Path, _
             FileFilter:="Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt", _
             FilterIndex:=2, _
             Title:="Сохранить файл")
    'если нажали Отмена - завершаем процедуру ничего не сохраняя
    If VarType(sToSavePath) = vbBoolean Then
        Exit Sub
    End If
    'непосредственно сохранение файла
    ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=ThisWorkbook.FileFormat
End Sub

Здесь тоже есть нюанс — метод SaveAs имеет два важных аргумента:
1. Filename — путь и имя сохраняемого файла. Здесь должно быть все понятно. Указываем то, что выбрали в диалоге.
2. FileFormat — формат сохраняемого файла. При этом не текстовое представление(как в диалоге «xls» или «txt»), а одна из предустановленных констант формата файла. Вот основные константы:

Константа Excel Числовая константа Расшифровка
xlOpenXMLWorkbookMacroEnabled 51 xlsm — книга Excel
xlOpenXMLWorkbookMacroEnabled 52 xlsm — книга Excel с поддержкой макросов
xlExcel12 50 xlsb — двоичная книга Excel (с поддержкой макросов)
xlOpenXMLAddIn 55 xlam — надстройка Excel
xlOpenXMLTemplate 54 xltx — шаблон Excel
xlOpenXMLTemplateMacroEnabled 53 xltm — шаблон Excel с поддержкой макросов
xlExcel8 56 xls — книга Excel(97 — 2003)
xlAddIn 18 xla — надстройка Excel(97 — 2003)
xlTemplate 17 xlt — шаблон Excel(97 — 2003)
xlCurrentPlatformText -4158 txt — текстовый файл с разделителями табуляции
xlUnicodeText 42 txt — текстовый файл в кодировке Юникод
xlCSV 6 csv — CSV(разделитель запятая)
xlCSVMSDOS 24 csv — CSV(MS — DOS)
XlFileFormat 62 csv — CSV UTF-8(разделитель запятая)
xlTypePDF 0 pdf — файл в формате PDF

Пример использования констант в диалогах Application.GetSaveAsFilename
Сохраняем файл с форматом xlsm — файл с поддержкой макросов. Для этого ищем в таблице выше расширение xlsm и берем либо константу Excel либо числовую константу:

Sub ShowGetSaveAsDialod()
    Dim sToSavePath
    sToSavePath = Application.GetSaveAsFilename( _
             InitialFileName:=ThisWorkbook.Path & "Report.xlsm", _
             FileFilter:="Excel files(*.xlsm),*.xlsm")
    'если нажали Отмена - завершаем процедуру ничего не сохраняя
    If VarType(sToSavePath) = vbBoolean Then
        Exit Sub
    End If
    'непосредственно сохранение файла
    'используем встроенную константу Excel
    ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=xlOpenXMLWorkbookMacroEnabled
    'используем числовую константу
    'ThisWorkbook.SaveAs Filename:=sToSavePath, FileFormat:=52
End Sub

Любой метод: либо числовая константа, либо встроенная работают одинаково. Вопрос лишь в том, что лично для Вас будет удобнее и нагляднее.

Так же см.:
Работа с диалогами
Как запретить сообщения?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Step-by-Step Examples to Activate Workbooks with MacrosIn this Excel VBA Tutorial, you learn how to activate workbooks with macros.

This Excel VBA Activate Workbook Tutorial is currently under development. Subscribe to the Power Spreadsheets Newsletter to get future updates to this Excel VBA Tutorial.

Use the following Table of Contents to navigate to the Section you’re interested in.

VBA Code to Activate This Workbook

To activate this workbook, use the following statement in the applicable procedure.

Process to Activate This Workbook with VBA

  1. Refer to this workbook (the workbook where the macro is stored).
  2. Activate the workbook.

Main VBA Constructs Used to Activate This Workbook

(1) Application.ThisWorkbook property.

Returns a Workbook object representing the workbook where the macro is stored (the workbook where the macro is running).

(2) Workbook object.

Represents an Excel workbook.

(3) Workbook.Activate method.

Activates the (first) window associated with a workbook.

Macro Example to Activate This Workbook

The macro below does the following:

  1. Activate this workbook (the workbook where the macro is stored).
  2. Maximize the active window.
Sub ActivateThisWorkbook()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'This procedure:
        '(1) Activates this workbook (the workbook where the macro is stored)
        '(2) Maximizes the active window
    
    'Activate this workbook
    ThisWorkbook.Activate
    
    'Maximize the active window
    ActiveWindow.WindowState = xlMaximized

End Sub

Effects of Executing Macro Example to Activate This Workbook

The image below illustrates the effects of using the macro example. In this example:

  • 2 workbooks (“Excel VBA Activate Workbook” and “Book1”) are open.
  • The “Book1” workbook is the active workbook.
  • The macro example is stored in the “Excel VBA Activate Workbook” workbook.

When the macro is executed, Excel:

  • Activates this workbook (“Excel VBA Activate Workbook”; the workbook where the macro example is stored); and
  • Maximizes the active window.
Example: Activate this workbook with VBA macros

Excel VBA Activate Workbook by Filename

VBA Code to Activate Workbook by Filename

To activate a workbook by filename, use the following structure/template in the applicable statement.

Workbooks("Filename").Activate

Process to Activate Workbook by Filename with VBA

  1. Refer to the workbook to activate by filename.
  2. Activate the applicable workbook.

Main VBA Constructs Used to Activate Workbook by Filename

(1) Application.Workbooks property.

Returns a Workbooks collection representing all open workbooks.

(2) Workbooks object.

Represents all open workbooks.

(3) Workbooks.Item property.

Returns a specific Workbook object from the applicable Workbooks collection.

(4) Workbook object.

Represents an Excel workbook.

(5) Workbook.Activate method.

Activates the (first) window associated with a workbook.

Cues to Activate Workbook by Filename with VBA

  • Consider whether you must wrap the workbook filename in double quotes and parentheses ((“Filename”)).
  • As a general rule: Include the complete filename, including file extension (for ex., “Filename.xlsm”), of a previously saved workbook.

Macro Example to Activate Workbook by Filename

The macro below does the following:

  1. Activate the workbook with filename “Excel VBA Activate Workbook.xlsm”.
  2. Maximize the active window.
Sub ActivateWorkbookByFilename()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'This procedure:
        '(1) Activates the workbook with filename "Excel VBA Activate Workbook.xlsm"
        '(2) Maximizes the active window
    
    'Activate the workbook with filename "Excel VBA Activate Workbook.xlsm"
    Workbooks("Excel VBA Activate Workbook.xlsm").Activate
    
    'Maximize the active window
    ActiveWindow.WindowState = xlMaximized

End Sub

Effects of Executing Macro Example to Activate Workbook by Filename

The image below illustrates the effects of using the macro example. In this example:

  • 2 workbooks (“Excel VBA Activate Workbook.xlsm” and “Book1”) are open.
  • The “Book1” workbook is the active workbook.

When the macro is executed, Excel:

  • Activates the workbook with filename “Excel VBA Activate Workbook.xlsm”; and
  • Maximizes the active window.
Example: Activate workbook by filename with VBA macros

Excel VBA Activate Workbook with Partial Filename (with Left, Mid, or Right Functions)

VBA Code to Activate Workbook with Partial Filename (with Left, Mid, or Right Functions)

To activate a workbook with partial filename (with the Left, Mid, or Right functions), use the following structure/template in the applicable procedure.

VariableDeclarationStatement iWorkbook As Workbook
For Each iWorkbook In Application.Workbooks
    If VbaBuiltInTextFunction(TextFunctionArgumentsIncludingWorkbookName) = "PartialWorkbookFilename" Then
        iWorkbook.Activate
    End If
Next iWorkbook

Process to Activate Workbook with Partial Filename (with Left, Mid, or Right Functions)

  1. Declare iteration object variable (usually of the Workbook object data type).
  2. Loop through all open workbooks.
  3. Test whether the applicable part (for example, the beginning or end) of the name of the workbook (the loop is currently iterating through) matches the (known) partial filename (of the workbook to activate).
  4. If the condition is met (the applicable part of the name of the applicable workbook matches the partial filename of the workbook to activate), activate the workbook (the loop is currently iterating through).

Main VBA Constructs Used to Activate Workbook with Partial Filename (with Left, Mid, or Right Functions)

(1) Variable declaration statement.

One of the following 4 statements:

  • Dim: Declares variables and allocates storage space.
  • Private:
    • Used at the module level.
    • Declares module-level variables and allocates storage space.
  • Public:
    • Used at the module level.
    • Declares global variables and allocates storage space.
  • Static: Declares static variables and allocates storage space.

(2) Workbook object.

Represents an Excel workbook.

(3) For Each… Next statement.

Repeats a set of statements for each element in an array or collection.

(4) Application.Workbooks property.

Returns a Workbooks collection representing all open workbooks.

(5) Workbooks object.

Represents all open workbooks.

(6) Object variable.

A named storage location containing data (a reference to an object) that can be modified during procedure execution.

(7) If… Then… Else statement.

Conditionally executes a set of statements, depending on the value returned by a logical expression.

(8) VBA built-in text function.

One (or more) of the following VBA built-in text functions:

  • Left: Returns a string containing a specific number of characters from the start (left side) of a string.
  • Mid: Returns a string containing a specific number of characters from the middle (starting at a specific position) of a string.
  • Right: Returns a string containing a specific number of characters from the end (right side) of a string.
  • InStr: Returns the position of the first occurrence of one string inside another string.

(9) String.

A sequence of contiguous characters.

(10) Workbook.Activate method.

Activates the (first) window associated with a workbook.

Cues to Activate Workbook with Partial Filename (with Left, Mid, or Right Functions) with VBA

  • Consider explicitly declaring:
    • The iteration object variable.
    • The data type (usually Workbook object) of the iteration object variable.
  • As a general rule, declare the iteration object variable:
    • Using the Dim statement; and
    • As of the Workbook object data type.
  • If the scope of the iteration object variable is module-level or global, follow the applicable rules for (module-level or global) variable declaration.
  • Depending on the case you deal with, you may need to work with different versions of the If… Then… Else statement. Consider the following 4 basic versions of the If… Then… Else statement:
    • If… Then. This is the version I use in the structure/template above.
    • If… Then… Else.
    • If… Then… ElseIf.
    • If… Then… ElseIf… Else.
  • The appropriate VBA built-in text function you work with depends on the case you deal with (for example, the structure and position of the known partial filename).
  • As a general rule:
    • The (main) string you use as one of the arguments of the VBA built-in text function (the string from which you extract characters) is the name of the applicable workbook (the For Each… Next statement is currently iterating through).
    • Work with the Workbook.Name property to obtain the name of the applicable workbook. The Workbook.Name property returns a workbook’s name.
  • When specifying the (known) partial filename, consider whether you must wrap this partial filename in double quotes (“PartialWorkbookFilename”).

Macro Example to Activate Workbook with Partial Filename (with Left, Mid, or Right Functions)

The macro below does the following:

  1. Declare an object variable (iWorkbook) of the Workbook object data type.
  2. Loop through all open workbooks.
  3. Test whether the first/leftmost 9 letters of the name of the workbook (the loop is currently iterating through) spell “Excel VBA”.
  4. If the condition is met (the first/leftmost 9 letters of the name of the applicable workbook spell “Excel VBA”), activate the workbook (the loop is currently iterating through).
Sub ActivateWorkbookPartialFilenameLeftMidRight()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'Declare iteration object variable
    Dim iWorkbook As Workbook
    
    'Loop through all open workbooks
    For Each iWorkbook In Application.Workbooks
        
        'Do the following:
            '(1) Test whether the first/leftmost 9 letters of the name of the workbook (the loop is currently iterating through) spell "Excel VBA"
            '(2) If the condition is met, activate the workbook (the loop is currently iterating through)
        If Left(iWorkbook.Name, 9) = "Excel VBA" Then iWorkbook.Activate
    
    Next iWorkbook
    
End Sub

Effects of Executing Macro Example to Activate Workbook with Partial Filename (with Left, Mid, or Right Functions)

The image below illustrates the effects of using the macro example. In this example:

  • 10 workbooks (“Excel VBA Activate Workbook.xlsm”, and “Book1” through “Book9”) are open.
  • The “Book1” workbook is the active workbook.

When the macro is executed, Excel activates the workbook whose filename (Excel VBA Activate Workbook.xlsm) contains the (known) partial filename (Excel VBA).

Example: Activate Workbook with Partial Filename (with Left, Mid, or Right Functions) with VBA macros

Excel VBA Activate Workbook with Partial Filename (with InStr Function)

VBA Code to Activate Workbook with Partial Filename (with InStr Function)

To activate a workbook with partial filename (with the InStr function), use the following structure/template in the applicable procedure.

VariableDeclarationStatement iWorkbook As Workbook
For Each iWorkbook In Application.Workbooks
    If InStr(1, iWorkbook.Name, "PartialWorkbookFilename", StringCompareMethodConstant) > 0 Then
        iWorkbook.Activate
    End If
Next iWorkbook

Process to Activate Workbook with Partial Filename (with InStr Function)

  1. Declare iteration object variable (usually of the Workbook object data type).
  2. Loop through all open workbooks.
  3. Test whether the name of the workbook (the loop is currently iterating through) contains the (known) partial filename (of the workbook to activate).
  4. If the condition is met (the name of the applicable workbook contains the partial filename of the workbook to activate), activate the workbook (the loop is currently iterating through).

Main VBA Constructs Used to Activate Workbook with Partial Filename (with InStr Function)

(1) Variable declaration statement.

One of the following 4 statements:

  • Dim: Declares variables and allocates storage space.
  • Private:
    • Used at the module level.
    • Declares module-level variables and allocates storage space.
  • Public:
    • Used at the module level.
    • Declares global variables and allocates storage space.
  • Static: Declares static variables and allocates storage space.

(2) Workbook object.

Represents an Excel workbook.

(3) For Each… Next statement.

Repeats a set of statements for each element in an array or collection.

(4) Application.Workbooks property.

Returns a Workbooks collection representing all open workbooks.

(5) Workbooks object.

Represents all open workbooks.

(6) Object variable.

A named storage location containing data (a reference to an object) that can be modified during procedure execution.

(7) If… Then… Else statement.

Conditionally executes a set of statements, depending on the value returned by a logical expression.

(8) InStr function.

Returns the position of the first occurrence of one string inside another string.

Accepts the following 4 arguments:

  • start:
    • Optional argument.
    • The starting position for the search.
    • If omitted, the search begins at the first character.
  • string1:
    • Required argument.
    • The string you search in.
  • string2:
    • Required argument.
    • The string you search for.
  • compare:
    • Optional argument.
    • The string comparison method.
    • If omitted, the module’s Option Compare setting applies.

(9) Workbook.Name property.

Returns a workbook’s name.

(10) String.

A sequence of contiguous characters.

(11) Greater than operator (>).

Compares 2 expressions and returns True, False, or Null as follows:

  • True: If Expression1 > Expression2.
  • False: If Expression1 <= Expression2.
  • Null: If (either) Expression1 or Expression2 are Null.

(12) Workbook.Activate method.

Activates the (first) window associated with a workbook.

Cues to Activate Workbook with Partial Filename (with InStr Function) with VBA

  • Consider explicitly declaring:
    • The iteration object variable.
    • The data type (usually Workbook object) of the iteration object variable.
  • As a general rule, declare the iteration object variable:
    • Using the Dim statement; and
    • As of the Workbook object data type.
  • If the scope of the iteration object variable is module-level or global, follow the applicable rules for (module-level or global) variable declaration.
  • Depending on the case you deal with, you may need to work with different versions of the If… Then… Else statement. Consider the following 4 basic versions of the If… Then… Else statement:
    • If… Then. This is the version I use in the structure/template above.
    • If… Then… Else.
    • If… Then… ElseIf.
    • If… Then… ElseIf… Else.
  • As a general rule, set the arguments of the InStr function as follows:
    • start: 1.
    • string1: The name of the workbook the loop is currently iterating through, as returned by the Workbook.Name property.
    • string2: The (known) partial filename.
    • compare: vbBinaryCompare. vbBinaryCompare (usually) results in a case sensitive comparison.
  • When specifying the (known) partial filename (as string2 argument of the InStr function), consider whether you must wrap this partial filename in double quotes (“PartialWorkbookFilename”).

Macro Example to Activate Workbook with Partial Filename (with InStr Function)

The macro below does the following:

  1. Declare an object variable (iWorkbook) of the Workbook object data type.
  2. Loop through all open workbooks.
  3. Test whether the name of the workbook (the loop is currently iterating through) contains “Excel VBA”.
  4. If the condition is met (the name of the applicable workbook contains “Excel VBA”), activate the workbook (the loop is currently iterating through).
Sub ActivateWorkbookPartialFilenameInStr()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'Declare iteration object variable
    Dim iWorkbook As Workbook
    
    'Loop through all open workbooks
    For Each iWorkbook In Application.Workbooks
        
        'Do the following:
            '(1) Test whether the name of the workbook (the loop is currently iterating through) contains "Excel VBA"
            '(2) If the condition is met, activate the workbook (the loop is currently iterating through)
        If InStr(1, iWorkbook.Name, "Excel VBA", vbBinaryCompare) > 0 Then iWorkbook.Activate
    
    Next iWorkbook

End Sub

Effects of Executing Macro Example to Activate Workbook with Partial Filename (with InStr Function)

The image below illustrates the effects of using the macro example. In this example:

  • 10 workbooks (“Excel VBA Activate Workbook.xlsm”, and “Book1” through “Book9”) are open.
  • The “Book1” workbook is the active workbook.

When the macro is executed, Excel activates the workbook whose filename (Excel VBA Activate Workbook.xlsm) contains the (known) partial filename (Excel VBA).

Example: Activate Workbook with Partial Filename (with InStr Function) with VBA macros

Excel VBA Activate Workbook Using Wildcard

VBA Code to Activate Workbook Using Wildcard

To activate a workbook using a wildcard, use the following structure/template in the applicable procedure.

VariableDeclarationStatement Dim iWorkbook As Workbook
For Each iWorkbook In Application.Workbooks
    If iWorkbook.Name Like "WorkbookNameUsingWildcard" Then
        iWorkbook.Activate
    End If
Next iWorkbook

Process to Activate Workbook Using Wildcard

  1. Declare iteration object variable (usually of the Workbook object data type).
  2. Loop through all open workbooks.
  3. Test whether the name of the workbook (the loop is currently iterating through) is like the (known) filename (of the workbook to activate). Use wildcards (as necessary) to specify the filename of the workbook to activate.
  4. If the condition is met (the name of the applicable workbook is like the filename -including any wildcards- of the workbook to activate), activate the workbook (the loop is currently iterating through).

Main VBA Constructs Used to Activate Workbook Using Wildcard

(1) Variable declaration statement.

One of the following 4 statements:

  • Dim: Declares variables and allocates storage space.
  • Private:
    • Used at the module level.
    • Declares module-level variables and allocates storage space.
  • Public:
    • Used at the module level.
    • Declares global variables and allocates storage space.
  • Static: Declares static variables and allocates storage space.

(2) Workbook object.

Represents an Excel workbook.

(3) For Each… Next statement.

Repeats a set of statements for each element in an array or collection.

(4) Application.Workbooks property.

Returns a Workbooks collection representing all open workbooks.

(5) Workbooks object.

Represents all open workbooks.

(6) Object variable.

A named storage location containing data (a reference to an object) that can be modified during procedure execution.

(7) If… Then… Else statement.

Conditionally executes a set of statements, depending on the value returned by a logical expression.

(8) Workbook.Name property.

Returns a workbook’s name.

(9) Like operator.

Compares a string against a pattern and returns True, False, or Null as follows:

  • True: If the string matches the pattern.
  • False: If the string doesn’t match the pattern.
  • Null: If (either) the string or the pattern are Null.

You can combine the following elements when specifying the pattern:

  • Wildcard characters.
  • Character lists.
  • Character ranges.

(10) String.

A sequence of contiguous characters.

(11) Workbook.Activate method.

Activates the (first) window associated with a workbook.

Cues to Activate Workbook Using Wildcard with VBA

  • Consider explicitly declaring:
    • The iteration object variable.
    • The data type (usually Workbook object) of the iteration object variable.
  • As a general rule, declare the iteration object variable:
    • Using the Dim statement; and
    • As of the Workbook object data type.
  • If the scope of the iteration object variable is module-level or global, follow the applicable rules for (module-level or global) variable declaration.
  • Depending on the case you deal with, you may need to work with different versions of the If… Then… Else statement. Consider the following 4 basic versions of the If… Then… Else statement:
    • If… Then. This is the version I use in the structure/template above.
    • If… Then… Else.
    • If… Then… ElseIf.
    • If… Then… ElseIf… Else.
  • Use the Like operator to compare the string returned by the Workbook.Name property (the name of the workbook the loop is currently iterating through) against a string with the filename (including any wildcards) of the workbook to activate.
  • Use the following wildcards when specifying the pattern the Like operator works with:
    • ?: Represents any single character.
    • *: Represents any sequence of 0 or more characters.
  • When specifying the pattern the Like operator works with (the filename -including any wildcards- of the workbook to activate), consider whether you must wrap this partial filename in double quotes (“WorkbookNameUsingWildcard”).

Macro Example to Activate Workbook Using Wildcard

The macro below does the following:

  1. Declare an object variable (iWorkbook) of the Workbook object data type.
  2. Loop through all open workbooks.
  3. Test whether the name of the workbook (the loop is currently iterating through) has the following structure:
    1. Starts with “Excel VBA”;
    2. Followed by any sequence of characters; and
    3. Ends with the “.xlsm” file extension.
  4. If the condition is met (the name of the applicable workbook is like the specified filename, including the * wildcard), activate the workbook (the loop is currently iterating through).
Sub ActivateWorkbookUsingWildcard()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'Declare iteration object variable
    Dim iWorkbook As Workbook
    
    'Loop through all open workbooks
    For Each iWorkbook In Application.Workbooks
        
        'Do the following:
            '(1) Test whether the name of the workbook (the loop is currently iterating through) has the following structure:
                '(1) Starts with "Excel VBA"
                '(2) Followed by any sequence of characters
                '(3) Ends with the ".xlsm" file extension
            '(2) If the condition is met, activate the workbook (the loop is currently iterating through)
        If iWorkbook.Name Like "Excel VBA*.xlsm" Then iWorkbook.Activate
    
    Next iWorkbook
    
End Sub

Effects of Executing Macro Example to Activate Workbook Using Wildcard

The image below illustrates the effects of using the macro example. In this example:

  • 10 workbooks (“Excel VBA Activate Workbook.xlsm”, and “Book1” through “Book9”) are open.
  • The “Book1” workbook is the active workbook.

When the macro is executed, Excel activates the workbook whose filename (Excel VBA Activate Workbook.xlsm) has the following structure:

  1. Starts with “Excel VBA”;
  2. Followed by any sequence of characters; and
  3. Ends with the “.xlsm” file extension.

Example: Activate workbook using wildcard with VBA macros

Excel VBA Activate Workbook and Worksheet

VBA Code to Activate Workbook and Worksheet

To activate a workbook and a worksheet, use the following structure/template in the applicable statement.

WorkbookObjectReference.WorksheetObjectReference.Activate

Process to Activate Workbook and Worksheet with VBA

  1. Refer to the workbook and worksheet to activate.
  2. Activate the applicable worksheet.

Main VBA Constructs Used to Activate Workbook and Worksheet

(1) Workbook object.

Represents an Excel workbook.

(2) Workbook.Worksheets property.

Returns a Sheets collection representing all worksheets in the applicable workbook.

(3) Worksheets object.

Represents all worksheets in the applicable workbook.

(4) Worksheets.Item property.

Returns a specific Worksheet object from the applicable Worksheets collection.

(5) Worksheet object.

Represents a worksheet.

(6) Worksheet.Activate method.

Activates the applicable worksheet.

Cues to Activate Workbook and Worksheet with VBA

  • Work with (among others) one of the following VBA constructs (or groups of constructs) to return a Workbook object:
    • Application.Workbooks property, Workbooks object, and Workbooks.Item property.
    • Application.ThisWorkbook property.
  • As a general rule, identify the applicable Worksheet object (inside the Worksheets collection) using one of the following:
    • An index number. The index number:
      • Represents the position of the Worksheet object in the Worksheets collection.
      • Is:
        • Wrapped in parentheses ((IndexNumber)).
        • Included after the reference to the Worksheets collection (Worksheets(IndexNumber)).
    • The Worksheet object’s name (Worksheet.Name property). The name is:
      • Wrapped in:
        • Double quotes (“WorksheetName”); and
        • Parentheses ((“WorksheetName”)).
      • Included after the reference to the Worksheets collection (Worksheets(“WorksheetName”)).
  • You can (also) use a Worksheet object’s CodeName property (Worksheet.CodeName property) to refer to the applicable worksheet.

Macro Example to Activate Workbook and Worksheet

The macro below does the following:

  1. Activate:
    1. The “Excel VBA Activate Workbook.xlsm” workbook; and
    2. The “Activate Workbook and Worksheet” worksheet.
  2. Maximize the active window.
Sub ActivateWorkbookAndWorksheet()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'This procedure:
        '(1) Activates the "Activate Workbook and Worksheet" worksheet in the "Excel VBA Activate Workbook.xlsm" workbook
        '(2) Maximizes the active window
    
    'Activate the "Activate Workbook and Worksheet" worksheet in the "Excel VBA Activate Workbook.xlsm" workbook
    Workbooks("Excel VBA Activate Workbook.xlsm").Worksheets("Activate Workbook and Worksheet").Activate
    
    'Maximize the active window
    ActiveWindow.WindowState = xlMaximized

End Sub

Effects of Executing Macro Example to Activate Workbook and Worksheet

The image below illustrates the effects of using the macro example. In this example:

  • 2 workbooks (“Excel VBA Activate Workbook.xlsm” and “Book1”) are open.
  • The “Book1” workbook is the active workbook.
  • The “Sheet1” worksheet is the active worksheet in both (“Excel VBA Activate Workbook.xlsm” and “Book1”) workbooks.

When the macro is executed, Excel:

  • Activates:
    • The “Excel VBA Activate Workbook.xlsm” workbook; and
    • The “Activate Workbook and Worksheet” worksheet.
  • Maximizes the active window.
Example: Activate workbook and worksheet with VBA macros

Excel VBA Activate Workbook and Chart Sheet

VBA Code to Activate Workbook and Chart Sheet

To activate a workbook and a chart sheet, use the following structure/template in the applicable statement.

WorkbookObjectReference.ChartObjectReference.Activate

Process to Activate Workbook and Chart Sheet with VBA

  1. Refer to the workbook and chart sheet to activate.
  2. Activate the applicable chart sheet.

Main VBA Constructs Used to Activate Workbook and Chart Sheet

(1) Workbook object.

Represents an Excel workbook.

(2) Workbook.Charts property.

Returns a Sheets collection representing all chart sheets in the applicable workbook.

(3) Charts object.

Represents all chart sheets in the applicable workbook.

(4) Charts.Item property.

Returns a specific Chart object from the applicable Charts collection.

(5) Chart object.

Represents a chart in a workbook. The chart can be either of the following:

  • A chart sheet.
  • An embedded chart (not the subject of this Section).

(6) Chart.Activate method.

Activates the applicable chart.

Cues to Activate Workbook and Chart Sheet with VBA

  • Work with (among others) one of the following VBA constructs (or groups of constructs) to return a Workbook object:
    • Application.Workbooks property, Workbooks object, and Workbooks.Item property.
    • Application.ThisWorkbook property.
  • As a general rule, identify the applicable Chart object (inside the Charts collection) using one of the following:
    • An index number. The index number:
      • Represents the position of the Chart object in the Charts collection.
      • Is:
        • Wrapped in parentheses ((IndexNumber)).
        • Included after the reference to the Charts collection (Charts(IndexNumber)).
    • The Chart object’s name (Chart.Name property). The name is:
      • Wrapped in:
        • Double quotes (“ChartSheetName”); and
        • Parentheses ((“ChartSheetName”)).
      • Included after the reference to the Charts collection (Charts(“ChartSheetName”)).
  • You can (also) use a Chart object’s CodeName property (Chart.CodeName property) to refer to the applicable chart sheet.

Macro Example to Activate Workbook and Chart Sheet

The macro below does the following:

  1. Activate:
    1. The “Excel VBA Activate Workbook.xlsm” workbook; and
    2. The “Activate Workbook Chart Sheet” chart sheet.
  2. Maximize the active window.
Sub ActivateWorkbookAndChartSheet()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'This procedure:
        '(1) Activates the "Activate Workbook Chart Sheet" chart sheet in the "Excel VBA Activate Workbook.xlsm" workbook
        '(2) Maximizes the active window
    
    'Activate the "Activate Workbook Chart Sheet" chart sheet in the "Excel VBA Activate Workbook.xlsm" workbook
    Workbooks("Excel VBA Activate Workbook.xlsm").Charts("Activate Workbook Chart Sheet").Activate
    
    'Maximize the active window
    ActiveWindow.WindowState = xlMaximized
    
End Sub

Effects of Executing Macro Example to Activate Workbook and Chart Sheet

The image below illustrates the effects of using the macro example. In this example:

  • 2 workbooks (“Excel VBA Activate Workbook.xlsm” and “Book1”) are open.
  • The “Book1” workbook is the active workbook.
  • The “Sheet1” worksheet is the active sheet in both (“Excel VBA Activate Workbook.xlsm” and “Book1”) workbooks.

When the macro is executed, Excel:

  • Activates:
    • The “Excel VBA Activate Workbook.xlsm” workbook; and
    • The “Activate Workbook Chart Sheet” chart sheet.
  • Maximizes the active window.

Example: Activate workbook and chart sheet with VBA macros

Excel VBA Activate Workbook with Variable Name

VBA Code to Activate Workbook with Variable Name

To activate a workbook with variable name (where the workbook filename is held by a variable), use the following structure/template in the applicable procedure.

VariableDeclarationStatement WorkbookFilenameVariable As String
WorkbookFilenameVariable = WorkbookFilenameString
Workbooks(WorkbookFilenameVariable).Activate

Process to Activate Workbook with Variable Name

  1. Declare variable (usually of the String data type) to represent workbook filename.
  2. Assign workbook filename to variable.
  3. Refer to the workbook to activate by using the applicable variable name (representing the workbook filename).
  4. Activate the applicable workbook.

Main VBA Constructs Used to Activate Workbook with Variable Name

(1) Variable declaration statement.

One of the following 4 statements:

  • Dim: Declares variables and allocates storage space.
  • Private:
    • Used at the module level.
    • Declares module-level variables and allocates storage space.
  • Public:
    • Used at the module level.
    • Declares global variables and allocates storage space.
  • Static: Declares static variables and allocates storage space.

(2) String data type.

Holds textual data (a sequence of characters representing the characters themselves).

(3) Assignment operator (=).

Assigns a value to a variable or property.

(4) Application.Workbooks property.

Returns a Workbooks collection representing all open workbooks.

(5) Workbooks object.

Represents all open workbooks.

(6) Workbooks.Item property.

Returns a specific Workbook object from the applicable Workbooks collection.

(7) Workbook object.

Represents an Excel workbook.

(8) Variable.

A named storage location containing data that can be modified during procedure execution.

(9) Workbook.Activate method.

Activates the (first) window associated with a workbook.

Cues to Activate Workbook with Variable Name with VBA

  • Consider explicitly declaring:
    • The variable representing the workbook filename.
    • The data type (usually String) of the variable representing the workbook filename.
  • As a general rule, declare the variable representing the workbook filename:
    • Using the Dim statement; and
    • As of the String data type.
  • If the scope of the variable representing the workbook filename is module-level or global, follow the applicable rules for (module-level or global) variable declaration.
  • When assigning the workbook filename to the variable representing the workbook filename:
    • Consider whether you must wrap the workbook filename in double quotes and parentheses ((“Filename”)).
    • As a general rule:
      • Include the complete filename, including file extension (for ex., “Filename.xlsm”), of a previously saved workbook.
      • Do not include the file path.

Macro Example to Activate Workbook with Variable Name

The macro below does the following:

  1. Declare a variable (WorkbookFilename) of the String data type.
  2. Assign a string (Excel VBA Activate Workbook.xlsm) to the WorkbookFilename variable.
  3. Activate the workbook whose filename is represented by the WorkbookFilename variable.
  4. Maximize the active window.
Sub ActivateWorkbookWithVariableName()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'This procedure:
        '(1) Declares a variable (WorkbookFilename) of the String data type
        '(2) Assigns a string (Excel VBA Activate Workbook.xlsm) to the WorkbookFilename variable
        '(3) Activates the workbook whose filename is represented by the WorkbookFilename variable
        '(4) Maximizes the active window
    
    'Declare variable to represent workbook filename
    Dim WorkbookFilename As String
    
    'Assign workbook filename to variable
    WorkbookFilename = "Excel VBA Activate Workbook.xlsm"
    
    'Activate the workbook whose filename is represented by the WorkbookFilename variable
    Workbooks(WorkbookFilename).Activate
    
    'Maximize the active window
    ActiveWindow.WindowState = xlMaximized

End Sub

Effects of Executing Macro Example to Activate Workbook with Variable Name

The image below illustrates the effects of using the macro example. In this example:

  • 2 workbooks (“Excel VBA Activate Workbook.xlsm” and “Book1”) are open.
  • The “Book1” workbook is the active workbook.

When the macro is executed, Excel:

  • Activates the workbook whose filename (Excel VBA Activate Workbook.xlsm) is held by a variable (WorkbookFilename); and
  • Maximizes the active window.
Example: Activate Workbook with Variable Name with VBA macros

Excel VBA Activate Workbook with Object Variable Name

VBA Code to Activate Workbook with Object Variable Name

To activate a workbook with object variable name (where the Workbook object is represented by an object variable), use the following structure/template in the applicable procedure.

VariableDeclarationStatement WorkbookObjectVariable As Workbook
Set WorkbookObjectVariable = WorkbookObjectReference
WorkbookObjectVariable.Activate

Process to Activate Workbook with Object Variable Name

  1. Declare object variable (usually of the Workbook object data type) to represent workbook.
  2. Assign Workbook object reference to object variable.
  3. Refer to the workbook to activate by using the applicable object variable name (representing the workbook).
  4. Activate the applicable workbook.

Main VBA Constructs Used to Activate Workbook with Object Variable Name

(1) Variable declaration statement.

One of the following 4 statements:

  • Dim: Declares variables and allocates storage space.
  • Private:
    • Used at the module level.
    • Declares module-level variables and allocates storage space.
  • Public:
    • Used at the module level.
    • Declares global variables and allocates storage space.
  • Static: Declares static variables and allocates storage space.

(2) Workbook object.

Represents an Excel workbook.

(3) Set statement.

Assigns an object reference to a variable or property.

(4) Application.Workbooks property.

Returns a Workbooks collection representing all open workbooks.

(5) Workbooks object.

Represents all open workbooks.

(6) Workbooks.Item property.

Returns a specific Workbook object from the applicable Workbooks collection.

(7) Object Variable.

A named storage location containing data (a reference to an object) that can be modified during procedure execution.

(8) Workbook.Activate method.

Activates the (first) window associated with a workbook.

Cues to Activate Workbook with Object Variable Name with VBA

  • Consider explicitly declaring:
    • The object variable representing the workbook.
    • The data type (usually Workbook object) of the object variable representing the workbook.
  • As a general rule, declare the object variable representing the workbook:
    • Using the Dim statement; and
    • As of the Workbook object data type.
  • If the scope of the object variable representing the workbook is module-level or global, follow the applicable rules for (module-level or global) variable declaration.

Macro Example to Activate Workbook with Object Variable Name

The macro below does the following:

  1. Declare an object variable (WorkbookObjectVariable) of the Workbook object data type.
  2. Assign a Workbook object reference (Excel VBA Activate Workbook.xlsm) to the WorkbookObjectVariable object variable.
  3. Activate the workbook represented by the WorkbookObjectVariable object variable.
  4. Maximize the active window.
Sub ActivateWorkbookWithObjectVariableName()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'This procedure:
        '(1) Declares an object variable (WorkbookObjectVariable) of the Workbook object data type
        '(2) Assigns a Workbook object reference (to the "Excel VBA Activate Workbook.xlsm" workbook) to the WorkbookObjectVariable object variable
        '(3) Activates the workbook represented by the WorkbookObjectVariable object variable
        '(4) Maximizes the active window
    
    'Declare object variable to represent workbook
    Dim WorkbookObjectVariable As Workbook
    
    'Assign Workbook object reference to object variable
    Set WorkbookObjectVariable = Workbooks("Excel VBA Activate Workbook.xlsm")
    
    'Activate workbook represented by the WorkbookObjectVariable object variable
    WorkbookObjectVariable.Activate
    
    'Maximize the active window
    ActiveWindow.WindowState = xlMaximized

End Sub

Effects of Executing Macro Example to Activate Workbook with Object Variable Name

The image below illustrates the effects of using the macro example. In this example:

  • 2 workbooks (“Excel VBA Activate Workbook.xlsm” and “Book1”) are open.
  • The “Book1” workbook is the active workbook.

When the macro is executed, Excel:

  • Activates the workbook whose reference (Excel VBA Activate Workbook.xlsm) is held by an object variable (WorkbookObjectVariable); and
  • Maximizes the active window.
Example: Activate Workbook with Object Variable Name with VBA macros

Excel VBA Open and Activate Workbook

VBA Code to Open and Activate Workbook

To open and activate a workbook, use the following structure/template in the applicable statement.

Workbooks.Open Filename:="PathAndFilename"

Process to Open and Activate Workbook with VBA

  1. Open the workbook with the Workbooks.Open method.

Main VBA Constructs Used to Open and Activate Workbook

(1) Workbooks.Open method.

Opens a workbook.

(2) Filename parameter.

The:

  • First parameter of the Workbooks.Open method.
  • Filename of the workbook to open.

Cues to Open and Activate Workbook with VBA

  • When you open a workbook with the Workbooks.Open method, the opened workbook becomes the active workbook.
  • Consider whether you must wrap the workbook path and filename in double quotes (“PathAndFilename”).
  • As a general rule:
    • Include the full path and filename (including file extension).
    • If the workbook is stored in the default file folder (where Excel currently saves files by default), you can exclude the workbook’s path (use only the filename, including file extension).

Macro Example to Open and Activate Workbook

The macro below opens (and activates) the workbook with filename “Excel VBA Open and Activate Workbook.xlsx” stored in the Desktop folder.

Sub OpenAndActivateWorkbook()
    'Source: https://powerspreadsheets.com/
    'For further information: https://powerspreadsheets.com/excel-vba-activate-workbook/
    
    'Open the workbook with filename "Excel VBA Open and Activate Workbook.xlsx" stored in the Desktop folder. The opened workbook becomes the active workbook
    Workbooks.Open Filename:="C:UsersPowerSpreadsheetsDesktopExcel VBA Open and Activate Workbook.xlsx"
    
End Sub

Effects of Executing Macro Example to Open and Activate Workbook

The image below illustrates the effects of using the macro example.

In this example (only) 1 workbook (“Excel VBA Activate Workbook”) is open. This is (also) the active workbook.

When the macro is executed, Excel opens and activates the workbook with filename “Excel VBA Open and Activate Workbook.xlsx” stored in the Desktop folder.

Example: Open and Activate Workbook with VBA macros

Excel VBA allows you to open a workbook directly — all you need is the full path of the file, including the file name. However, locating and supplying the file path each time may can be tedious when working with multiple files. In this guide, we’re going to show you how to display File Open dialog in VBA.

Download Workbook

Opening a workbook in VBA

You can open workbooks in VBA using the Workbooks.Open method. This method accepts fifteen optional arguments, including the file name of the workbook you want to open.

Workbooks.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

Supply the file name with its full path to open the workbook.

Workbooks.Open «C:My DocumentsJuneIncome.xlsx»

Or

Workbooks.Open Filename:=»C:My DocumentsJuneIncome.xlsx»

Either line of code can open the workbook in the given path. The opened workbook becomes the active workbook.

Check out other optional arguments to determine how you want to open your workbook, such as in read-only mode, by updating external links, or with a password. Here is the documentation.

Displaying File Open dialog

File Open dialog can return the file name, which is needed for Workbooks.Open, along with its path. To display the File Open dialog, you need to call the Application.GetOpenFilename method.

Application.GetOpenFilename (FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

The Application.GetOpenFilename method can take five optional arguments using which you can select the accepted file types, title of the dialog, or allow selecting multiple files.

To open the dialog in default state (without any filtering and ability to select single file) use it without any arguments. Assign the command to a string variable to set the variable with selected file’s full path.

Dim FullFileName as String
FullFileName = Application.GetOpenFilename

File Filter

On the other hand, applying a filter can be helpful in giving the end user only the files they need. You can use FileFilter to set filters on the Open File dialog box.

The FileFilter argument accepts a special string specifying file filtering criteria. You need to supply file types as friendly name — file type pairs. Each pair, name and type is separated by a comma (,) character.

friendly name 1, file type 1, friendly name 2, file type 2,

If a friendly name covers multiple types, use semicolon characters to split file types:

friendly name 1, file type 1; file type 2; file type …, friendly name 2, file type 4; file type 5; file type …,

Here is an example for displaying the dialog that accepts Excel Files only.

FullFileName = Application.GetOpenFilename(FileFilter:=»Excel Files,*.xl*»)

The following sample demonstrates the scenario at the above screenshot which displays two items as filters:

ExternalFileName = Application.GetOpenFilename(FileFilter:=»Excel Files,*.xl*;*.xm*,Text Files,*.txt;*.csv»)

Multiple Files

Another important feature of the Open File dialog is its ability to allow selecting multiple files. If the MultiSelect argument is set to True, the Open File dialog returns each selected file name in an array. Thus, you need to assign the dialog to a Variant type of variable instead of String.

Dim ExternalFileName As Variant
ExternalFileName = Application.GetOpenFilename(FileFilter:=»Excel Files,*.xl*,Text Files,*.txt;*.csv», MultiSelect:=True)

When you click the Open button, the assigned variable will have an array of filenames with paths. A common scenario is to use a loop to access each file name.

For i = LBound(ExternalFileName) To UBound(ExternalFileName)
    Workbooks.Open ExternalFileName(i)
Next i

Before start, you need to open the VBA (Visual Basic for Applications) window and add a module. A module is where you can write code.

  1. Press Alt + F11 to open the VBA window
  2. In the VBA window, click Insert on the toolbar
  3. Click the Module option

Open a single workbook

The following code displays the Open File dialog for Excel and some text files by allowing to select a single file only. After file name and path are set to the string variable, the code can copy content from the opened file to the existing file. You can simply copy this code and paste your VBA.

How to display File Open dialog in VBA 03 - Single File

Note: GetFilenameFromPath is a custom function which parse the file name from the full path. You can find its code in the example file.

Open multiple workbooks

This time Application.GetOpenFilename method is updated for multiple file selection. You can see the MultiSelect:=True argument in the code below. This is an example where the code was modified to execute same action in a loop.

Sub SingleFile()
    'Turn off screen updates to hide window transactions
    Application.ScreenUpdating = False
    'Ignore alerts such as "large amount of data" message while copying
    Application.DisplayAlerts = False
    
    'Define and set variables
    Dim PrimaryFileName As String, ExternalFileName As String
    PrimaryFileName = ThisWorkbook.Name
    
    'Call Open File dialog
    ExternalFileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*,Text Files,*.txt;*.csv")
    'End the macro if no ile is selected
    If ExternalFileName = False Then
        MsgBox "You are not selected a file"
        Exit Sub
    End If
    
    'Open the specified file and execute your code
    Workbooks.Open ExternalFileName
    Range("A1:G20").Copy 'Copy range from external file
    Windows(PrimaryFileName).Activate 'Activate the primary file
    Sheets.Add After:=ActiveSheet 'Add a new sheet
    ActiveSheet.Paste 'Paste into new sheet
    Workbooks(GetFilenameFromPath(ExternalFileName)).Close SaveChanges:=False 'Close the external file without saving
    
    'Reactivate alerts and screen updates
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

How to display File Open dialog in VBA 04 - Multiple Files

Понравилась статья? Поделить с друзьями:
  • Vba excel userform убрать кнопку закрыть
  • Vba excel worksheet cells
  • Vba excel активация формы
  • Vba excel userform свернуть
  • Vba excel worksheet cell