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

Открыть папку (каталог) в проводнике 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 файлы других приложений и интернет-сайты.


 

Добрый день, подскажите как с помощью макроса открыть определенную папку, например C:BUILDINGDoc, с помощью стандартного проводника Windows.

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

Shell «explorer C:tempdbf»

 

А можно выложить код полностью ?
Sub……и так далее, заранее спасибо.

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

#4

10.01.2014 15:10:57

Код
ну вы уж..

Код
sub q()
Shell "explorer C:tempdbf"
end sub

Живи и дай жить..

 

выдает ошибку
Compile error:
Syntax error

 

SkyPro

Пользователь

Сообщений: 309
Регистрация: 23.07.2013

Проверил. Не выдает ошибку.

 

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

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

если вам надо выбрать папку для дальнейшей обработки в икселе, то надо идти другим путем, а так — что просили, то и получили(только подставьте свой путь к папке)

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

 

Мне нужно чтобы просто открывалась папка, но с условием что она при открытии становится активной.
В этой папке разные документы excel, word, Access и каждый раз нужны разные.
Если можно было бы чуть изменить ваш код, для того чтобы при нажатии на кнопку сразу появлялась папка(не в фоне) был бы очень благодарен.
Надеюсь на понимание.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#10

10.01.2014 16:16:14

Как бы это…Вас на Яндексе и Google забанили? вводим волшебное сочетание: «выбор папки VBA» и смотрим ответы. Нельзя же по каждой хотелке бежать в форум и ждать решения, когда их в интернете полно и так.
Вот Вам код — хоть чуть-чуть разберитесь как подставить в код, предоставленный Слэном:

Код
Dim sFolder As String
 With Application.FileDialog(msoFileDialogFolderPicker)
 If .Show = False Then Exit Sub
 sFolder = .SelectedItems(1)
 End With

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

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

The_Prist

, вставил ваш код в код Слэна, все работает но не отражает что лежит в нутри папки(т.е. файлы excel и т.д).
Спасибо за помощь.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#12

10.01.2014 16:58:08

Ну вот, желание давать решение пропало…С чего Вы взяли, что форумы созданы для того, чтобы каждому исполнять его хотелки? Где тут помощь? Где Ваши попытки решить свою задачу? Вы в курсе, что подразумевает под собой помощь? На этом форуме по меньшей мере Вам никто ничего не должен. И то, что Вы в этом ничего не понимаете не является ни плюсом, ни причиной для поблажек. Форумы предназначены для помощи в освоении материала, а не для решения задач каждому, кто не в состоянии сделать это самостоятельно.

Конкретно Ваша задача не сложна сама по себе, но подобное отношение к форуму(он создан, чтобы сделать за меня!) никак не располагает к тому, чтобы давать решение. Тем не менее, надеясь на исправление:

Код
sub q() 
Dim sFolder As String
 With Application.FileDialog(msoFileDialogFolderPicker)
 If .Show = False Then Exit Sub
 sFolder = .SelectedItems(1)
 End With
Shell "explorer " &  sFolder 
end sub

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

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

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

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

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

#15

11.01.2014 11:27:30

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

Живи и дай жить..

Уже прогресс !
Вставил в процедуру, пока, код от petr-sev. Открывает, однако, общую папку с Книгой и папкой с документами Word. Эта общая папка не активна. Макрос должен открывать только папку с документами. Необходимо, очевидно, указать путь.

Добавлено через 1 час 18 минут
Указав путь выходим на нужную папку с документами

Visual Basic
1
Shell "explorer.exe " & ThisWorkbook.Path & "Папка с файлами Word"

Однако папка с документами свёрнута или не активна, её ярлык видно на панели уведомлений. Для выхода на файлы в папке ещё необходимо нажать ярлык папки на панели уведомлений.

Такой вопрос — какую ещё добавить команду, чтобы папка с документами появлялась активной, тоесть, чтобы были видны непосредственно ярлыки внутренних файлов Word в папке ?

Here is some more cool knowledge to go with this:

I had a situation where I needed to be able to find folders based on a bit of criteria in the record and then open the folder(s) that were found. While doing work on finding a solution I created a small database that asks for a search starting folder gives a place for 4 pieces of criteria and then allows the user to do criteria matching that opens the 4 (or more) possible folders that match the entered criteria.

Here is the whole code on the form:

Option Compare Database
Option Explicit

Private Sub cmdChooseFolder_Click()

    Dim inputFileDialog As FileDialog
    Dim folderChosenPath As Variant

    If MsgBox("Clear List?", vbYesNo, "Clear List") = vbYes Then DoCmd.RunSQL "DELETE * FROM tblFileList"
    Me.sfrmFolderList.Requery

    Set inputFileDialog = Application.FileDialog(msoFileDialogFolderPicker)

    With inputFileDialog
        .Title = "Select Folder to Start with"
        .AllowMultiSelect = False
        If .Show = False Then Exit Sub
        folderChosenPath = .SelectedItems(1)
    End With

    Me.txtStartPath = folderChosenPath

    Call subListFolders(Me.txtStartPath, 1)

End Sub
Private Sub cmdFindFolderPiece_Click()

    Dim strCriteria As String
    Dim varCriteria As Variant
    Dim varIndex As Variant
    Dim intIndex As Integer

    varCriteria = Array(Nz(Me.txtSerial, "Null"), Nz(Me.txtCustomerOrder, "Null"), Nz(Me.txtAXProject, "Null"), Nz(Me.txtWorkOrder, "Null"))
    intIndex = 0

    For Each varIndex In varCriteria
        strCriteria = varCriteria(intIndex)
        If strCriteria <> "Null" Then
            Call fnFindFoldersWithCriteria(TrailingSlash(Me.txtStartPath), strCriteria, 1)
        End If
        intIndex = intIndex + 1
    Next varIndex

    Set varIndex = Nothing
    Set varCriteria = Nothing
    strCriteria = ""

End Sub
Private Function fnFindFoldersWithCriteria(ByVal strStartPath As String, ByVal strCriteria As String, intCounter As Integer)

    Dim fso As New FileSystemObject
    Dim fldrStartFolder As Folder
    Dim subfldrInStart As Folder
    Dim subfldrInSubFolder As Folder
    Dim subfldrInSubSubFolder As String
    Dim strActionLog As String

    Set fldrStartFolder = fso.GetFolder(strStartPath)

'    Debug.Print "Criteria: " & Replace(strCriteria, " ", "", 1, , vbTextCompare) & " and Folder Name is " & Replace(fldrStartFolder.Name, " ", "", 1, , vbTextCompare) & " and Path is: " & fldrStartFolder.Path

    If fnCompareCriteriaWithFolderName(fldrStartFolder.Name, strCriteria) Then
'        Debug.Print "Found and Opening: " & fldrStartFolder.Name & "Because of: " & strCriteria
        Shell "EXPLORER.EXE" & " " & Chr(34) & fldrStartFolder.Path & Chr(34), vbNormalFocus
    Else
        For Each subfldrInStart In fldrStartFolder.SubFolders

            intCounter = intCounter + 1

            Debug.Print "Criteria: " & Replace(strCriteria, " ", "", 1, , vbTextCompare) & " and Folder Name is " & Replace(subfldrInStart.Name, " ", "", 1, , vbTextCompare) & " and Path is: " & fldrStartFolder.Path

            If fnCompareCriteriaWithFolderName(subfldrInStart.Name, strCriteria) Then
'                Debug.Print "Found and Opening: " & subfldrInStart.Name & "Because of: " & strCriteria
                Shell "EXPLORER.EXE" & " " & Chr(34) & subfldrInStart.Path & Chr(34), vbNormalFocus
            Else
                Call fnFindFoldersWithCriteria(subfldrInStart, strCriteria, intCounter)
            End If
            Me.txtProcessed = intCounter
            Me.txtProcessed.Requery
        Next
    End If

    Set fldrStartFolder = Nothing
    Set subfldrInStart = Nothing
    Set subfldrInSubFolder = Nothing
    Set fso = Nothing

End Function
Private Function fnCompareCriteriaWithFolderName(strFolderName As String, strCriteria As String) As Boolean

    fnCompareCriteriaWithFolderName = False

    fnCompareCriteriaWithFolderName = InStr(1, Replace(strFolderName, " ", "", 1, , vbTextCompare), Replace(strCriteria, " ", "", 1, , vbTextCompare), vbTextCompare) > 0

End Function

Private Sub subListFolders(ByVal strFolders As String, intCounter As Integer)
    Dim dbs As Database
    Dim fso As New FileSystemObject
    Dim fldFolders As Folder
    Dim fldr As Folder
    Dim subfldr As Folder
    Dim sfldFolders As String
    Dim strSQL As String

    Set fldFolders = fso.GetFolder(TrailingSlash(strFolders))
    Set dbs = CurrentDb

    strSQL = "INSERT INTO tblFileList (FilePath, FileName, FolderSize) VALUES (" & Chr(34) & fldFolders.Path & Chr(34) & ", " & Chr(34) & fldFolders.Name & Chr(34) & ", '" & fldFolders.Size & "')"
    dbs.Execute strSQL

    For Each fldr In fldFolders.SubFolders
        intCounter = intCounter + 1
        strSQL = "INSERT INTO tblFileList (FilePath, FileName, FolderSize) VALUES (" & Chr(34) & fldr.Path & Chr(34) & ", " & Chr(34) & fldr.Name & Chr(34) & ", '" & fldr.Size & "')"
        dbs.Execute strSQL
        For Each subfldr In fldr.SubFolders
            intCounter = intCounter + 1
            sfldFolders = subfldr.Path
            Call subListFolders(sfldFolders, intCounter)
            Me.sfrmFolderList.Requery
        Next
        Me.txtListed = intCounter
        Me.txtListed.Requery
    Next

    Set fldFolders = Nothing
    Set fldr = Nothing
    Set subfldr = Nothing
    Set dbs = Nothing

End Sub

Private Function TrailingSlash(varIn As Variant) As String
    If Len(varIn) > 0& Then
        If Right(varIn, 1&) = "" Then
            TrailingSlash = varIn
        Else
            TrailingSlash = varIn & ""
        End If
    End If
End Function

The form has a subform based on the table, the form has 4 text boxes for the criteria, 2 buttons leading to the click procedures and 1 other text box to store the string for the start folder. There are 2 text boxes that are used to show the number of folders listed and the number processed when searching them for the criteria.

If I had the Rep I would post a picture… :/

I have some other things I wanted to add to this code but haven’t had the chance yet. I want to have a way to store the ones that worked in another table or get the user to mark them as good to store.

I can not claim full credit for all the code, I cobbled some of it together from stuff I found all around, even in other posts on stackoverflow.

I really like the idea of posting questions here and then answering them yourself because as the linked article says, it makes it easy to find the answer for later reference.

When I finish the other parts I want to add I will post the code for that too. :)

Открыть папку макросом

DEAD_MaRoZ

Дата: Суббота, 09.04.2016, 18:55 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый вечер! Столкнулся с проблемой.
В конце выполнения модуля у меня стоит уведомление
[vba]

Код

MsgBox «Все созданные документы сохранены!», 64, «Отчет»

[/vba]
После нажатия ОК, нужно, чтоб открылась в проводнике папка, адрес которой забит в переменной путь
[vba]

Код

kontr = ActiveSheet.[b3]
путь = «D:ДокументыОтчеты» & kontr

[/vba]
пробую так
[vba]

Код

Set oShell = CreateObject(«Wscript.Shell»)
  oShell.Run (путь)

[/vba]
не получается, пробую уже бред вводить
[vba]

Код

CreateObject(«Wscript.Shell»).Run «cmd путь exit», 0

[/vba]
Толку 0
Помогите, пожалуйста

 

Ответить

DEAD_MaRoZ

Дата: Суббота, 09.04.2016, 19:00 |
Сообщение № 2

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

На всякий случай, только что проверил — переменная «путь» отображается корректно
D:ДокументыОтчетыИванов И.И.

 

Ответить

МВТ

Дата: Суббота, 09.04.2016, 20:23 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 476


Репутация:

137

±

Замечаний:
0% ±


Excel 2007

Как-то так[vba]

Код

    Dim oShell As Object
    Set oShell = CreateObject(«Shell.Application»)
    oShell.Explore («C:temp»)

[/vba]

 

Ответить

Karataev

Дата: Суббота, 09.04.2016, 20:24 |
Сообщение № 4

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

[vba]

Код

Sub jjj()
    Dim objShellApp As Object
    Set objShellApp = CreateObject(«Shell.Application»)
    objShellApp.Explore («D:ДокументыОтчетыИванов И.И.»)
End Sub

[/vba]


Киви-кошелек: 9166309108

 

Ответить

DEAD_MaRoZ

Дата: Суббота, 09.04.2016, 20:49 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Karataev, МВТ, спасибо. Все работает.
Удачи

Сообщение отредактировал DEAD_MaRoZСуббота, 09.04.2016, 20:50

 

Ответить

krosav4ig

Дата: Воскресенье, 10.04.2016, 22:14 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

а можно проще ;) [vba]

Код

CreateObject(«Wscript.Shell»).Run «explorer » & путь

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

KuklP

Дата: Понедельник, 11.04.2016, 02:51 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Не так уж и проще %) :D
[vba]

Код

CreateObject(«Shell.Application»).Explore «c:temp»

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

krosav4ig

Дата: Понедельник, 11.04.2016, 03:39 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

а так :p [vba]

Код

Shell «explorer » & путь, 1

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Открывать pdf с помощью word
  • Открывать excel в разных окнах 2003
  • Открывать excel в разных вкладках
  • Открытие всех документов в одном окне excel
  • Открытие вкладок в новом окне word