Страницы: 1 2 След.
RSS
Показать в папке (открыть папку с выделенным файлом)
 
Мяв.
Для "открыть расположение файла" нашел 3 способа
Код
Sub Макрос1()
    Set oShell = CreateObject("Wscript.Shell")
    oShell.Run ("""" & ThisWorkbook.Path & """")
    Set objShellApp = CreateObject("Shell.Application")
    objShellApp.Explore ("" & ThisWorkbook.Path & "")
    objShellApp.Open ("" & ThisWorkbook.Path & "")
End Sub

А как выполнить "показать в папке"? Т.е. открыть папку с выделенным файлом?

PS И, ежели можно, чем отличается "Wscript.Shell" и "Shell.Application" (в пределах данной задачи), и что предпочтительней?
Изменено: RAN - 17.07.2018 23:04:20
 
папку, обычно, открывают с какой-то целью:
- выбрать папку
- выбрать файл
- сохранить как...
так вот, если понимать что нужно, то открываем соотв. диалог предварительно указан путь по умолчанию
вроде, как-то так...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Брысь :-)
Что-то вроде этого
Код
Sub Макрос1()
    strPath = Mid(ThisWorkbook.Path, 1, InStrRev(ThisWorkbook.Path, "\")) ну и прочие варианты
    Set oShell = CreateObject("Wscript.Shell")
    oShell.Run ("""" & strPath & """")
    
    Set objShellApp = CreateObject("Shell.Application")
    objShellApp.Explore ("" & strPath & "")
    objShellApp.Open ("" & strPath & "")
'+
    objShellApp.ShellExecute strPath
End Sub


по отличию - мне кажется для данного случая отличий мало, но то что есть особенности - точно
Wscript.Shell
Shell.Application
Изменено: БМВ - 18.07.2018 00:19:48
По вопросам из тем форума, личку не читаю.
 
Игорь, самоцель - выполнить указанное действие. По аналогии кнопки в Скайпе, или менеджере закачек браузера.
ThisWorkbook.Path - просто для примера.
Но это может быть любой файл. И дальнейшие действия тоже.
А как открыть файл Excel, используя соответствующий диалог, я знаю.
 
Похоже, в примере не совсем удачно.
Имеем файл
fileJpg = ThisWorkbook.Path & "\1.jpg"
Нужно открыть папку, и выделить этот файл

ShellExecute(<File>,<Arguments>,<Directory>,<Operation>,<Show>)
<Operation> - строка (необязательный). Действие ("глагол"), которое необходимо выполнить. Если не указан, используется действие по умолчанию.

Но никакого действия с файлом кодом выполнять не нужно.
 
Привет!
в командной строке:
explorer /select, "z:\01.txt"
Сравнение прайсов, таблиц - без настроек
 
Цитата
Inexsu написал:
в командной строке:
А вот тоже, но не в командной строке?
 
Цитата
RAN написал:
не в командной строке
В Excel Макрос VBA  ?
Сравнение прайсов, таблиц - без настроек
 
Именно.
 
RAN,  При таком раскладе #6 самый простой. Даже сишники таким путем идут.
По вопросам из тем форума, личку не читаю.
 
Я и не спорю.
Вот только выполнить сие действо из VBA не получается.
 
не верю
а так?
Код
    Set oShell = CreateObject("Wscript.Shell")
    oShell.Run ("explorer.exe /select,""" & ThisWorkbook.FullName & """")


Ну конечно ждать или не ждать закрытия окна - это тоже надо прописать в параметрах RUN
Изменено: БМВ - 18.07.2018 00:13:12
По вопросам из тем форума, личку не читаю.
 
RAN, по-моему можно через shell на vba запустить командную строку. Не за компом, завтра накидаю, если раньше не помогут.
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit,  ну да
    Shell "explorer.exe /select,""" & ThisWorkbook.FullName & """"
я правда за неуправляемость SHELL VBA недолюбливаю, ни тебе подождать, ни ….
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
не верю
 
Код
 Set oShell = CreateObject("Wscript.Shell")
    oShell.Run ("explorer /select, ""D:\!XXXX\01.jpg""")

открывает Избранное

PS пардон, все работает, сам, дурень, создал файл 1, а в макросе написал 01  :cry:
Всем Мурси!
Изменено: RAN - 18.07.2018 00:31:39
 
Цитата
RAN написал:
/select, ""
ну вот где в моем коде пробел после запятой? Где?
Изменено: БМВ - 18.07.2018 00:26:56
По вопросам из тем форума, личку не читаю.
 
БМВ, VBA shell не пользуюсь, пользуюсь Wscript.Shell. Можно не ждать выполнения, вот и ассинхронность, почти параллельность (из соседней темы).
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
вот и ассинхронность
:-) тогда уж .не run a Exec. там совсем ассинхронность :-) с контролем и  …...
По вопросам из тем форума, личку не читаю.
 
Код
Sub test()
    Shell "explorer.exe /select,""" & "z:\01.txt" & """", 1
    Stop
    Dim str As String
    str = "TASKKILL /F /FI " & Chr(34) & "WINDOWTITLE eq z:\*" & Chr(34)
    Shell "cmd /k " & str
End Sub
Сравнение прайсов, таблиц - без настроек
 
В общем, вполне себе получилось
Код
Function ShowInFolder(s As String) As Boolean
    If Dir(s) = "" Then
        ShowInFolder = False
    Else
        CreateObject("Wscript.Shell").Run ("explorer /select, " & s)
        ShowInFolder = True
    End If
End Function

Sub test()
    Dim s$, ss$
    s = "D:\!XXXX\01.jpg"
    x = ShowInFolder(s)
    ss = "D:\!XXXX\1.jpg"
    xx = ShowInFolder(ss)
End Sub


Еще раз всем спасибо.
 
RAN,  Андрей, хорошо что все получилось, но:
1. пробел после запятой должен вредить, синтаксис вроде не позволял такое, сейчас проверил, работает, хотя странно.
2. а вот кавычки экранирующие лучше поставить, если появится пробел в полном имени файла, то могут возникнуть проблемы.
Изменено: БМВ - 18.07.2018 01:02:56
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
а вот кавычки экранирующие лучше поставить
поподробнее плз...
догадываюсь, но не уверен
 
#12, #14, #19

("explorer.exe /select,""" & ThisWorkbook.FullName & """")

Будучи приученным к командной строке, я предпочитаю перебдеть. нежели удивится.  
Изменено: БМВ - 18.07.2018 01:07:50
По вопросам из тем форума, личку не читаю.
 
Миш, разницы не заметил, но замечания принял.
Код
Function ShowInFolder(s As String) As Boolean
    If Len(Dir(s)) Then CreateObject("Wscript.Shell").Run ("explorer /select,""" & s & """"): ShowInFolder = True
End Function
 
Цитата
RAN написал:
разницы не заметил
Пока не появилось пробелов и лишних символов в пути и имени файла и код не распространился на другие ПК :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Э, нет. Вчера специально в имя файла пробелов напихивал.
 
А другие ПК? ;)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Не пробовал.  :)  Возможно, поэтому и не заметил. Но ждать, когда замечу, не стал. Поверил на слово.  :D
 
RAN, Андрей, к стати вспомнил про пока еще действующее ограничением в 260 символов. Как поведет себя конструкция при превышении и что откроет - надо проверять. Может открыть снова избранное :-) По сему лучше сразу проверить и ….. ну тут по задаче.
По вопросам из тем форума, личку не читаю.
 
Доброе время суток.
Запущено как-то всё у Microsoft с Shell.Application. Некоторое приближение к решению задачи. И по идее, ещё нужно искать - по nextWindow.HWND то ли окно мы нашли, в том смысле, что для одной и той же папки может быть открыто несколько экземпляров проводника. Надо брать верхнюю.
Код
Public Sub test()
    Dim pShell As New Shell32.Shell, nextWindow As Object
    Dim nextView As Object, pFolderItem As Object
    pShell.Open "c:\windows"
    Application.Wait Time + 1.15740740740741E-05
    For Each nextWindow In pShell.Windows
        Set nextView = nextWindow.Document
        If TypeOf nextView Is Shell32.ShellFolderView Then
            If LCase$(nextView.Folder.Self.Path) = "c:\windows" Then
                Set pFolderItem = nextView.Folder.Items.Item("notepad.exe")
                nextView.SelectItem pFolderItem, 1
                Exit For
            End If
        End If
    Next
End Sub
Страницы: 1 2 След.
Наверх