Двойной щелчок по ячейке для поиска
Это решение, которое я объединил из разных мест, чтобы открыть окно проводника на пути, которые фильтруются (ищутся) по термину ввыбранная ячейка с помощью функции поиска Windows Explorer.Он запускается двойным щелчком мыши по ячейке, содержащей искомое условие:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("A1:AA1048576")) Is Nothing Then
Dim d As String
Dim searchpath As String
Dim searchlocation As String
Cancel = True
d = Selection.Value
'change window name to make sure new explorer window is opened for each instance
'copy string from manual search
searchpath = "search-ms:displayname=" & d & "%20Results%20&crumb=System.Generic.String%3A"
'copy string from manual search (e.g. my documents replace USERNAME)
searchlocation = "&crumb=location:C%3A%5CUsers%5CUSERNAME%5CDocuments"
If Not d = "" Then
Call Shell("explorer.exe """ & searchpath & d & searchlocation & "", 1)
'src: https://stackoverflow.com/questions/24376850/open-explorer-search-from-excel-hyperlink
End If
End If
End Sub
. Это открывает окно в VbNormalFocus, в качестве заголовка окна задается переменная ячейки (d).Гарантирует, что если этот код будет запущен для другого значения ячейки, откроется новое отдельное окно.Без этого я обнаружил, что при следующем запуске кода окно обозревателя не обновлялось новым поисковым значением, а просто меняло фокус на предыдущий результат.
edit: «копировать из панели поиска» - это строка послерасположение: в адресной строке ручного поиска в проводнике
Использование элементов управления ActiveX
Добавьте текстовое поле ActiveX (TextBox1) и кнопку (CommandButton1) и добавьте следующеедобавьте код в командную кнопку:
Private Sub CommandButton1_Click()
Dim d As String
Dim searchpath As String
Dim searchlocation As String
Cancel = True
d = TextBox1.Value
'change window name to make sure new explorer window is opened for each instance
'copy string from manual search
searchpath = "search-ms:displayname=" & d & "%20Results%20&crumb=System.Generic.String%3A"
'copy string from manual search (e.g. my documents replace USERNAME)
searchlocation = "&crumb=location:C%3A%5CUsers%5CUSERNAME%5CDocuments"
If Not d = "" Then
Call Shell("explorer.exe """ & searchpath & d & searchlocation & "", 1)
'src: https://stackoverflow.com/questions/24376850/open-explorer-search-from-excel-hyperlink
End If
End Sub
Теперь пользователь может изменить текст в текстовом поле, и, нажав кнопку, откроется проводник поиска файлов Windows для указанной папки в коде.
Пример снимка экрана с использованием кнопки поиска для «Редактируемого текста поиска»
РЕДАКТИРОВАТЬ
Вы можете включить дополнительные функции поиска в синтаксис поиска Windows: http://download.microsoft.com/download/8/1/7/8174a74e-3d8d-4478-abc6-84cd51ad93c4/Windows_Desktop_Advanced_Query_Reference.pdf
Например.Вы можете искать в папке все файлы с частичным совпадением каждого слова в строке, изменяя переменную поиска "d:
...
d = Selection.Value
d = "(" & Replace(d, " ", " OR ") & ")"
...
, если выбор (d) имел значение Where will I find it
Этобудет искать (Where OR will OR I OR find OR it)
в проводнике Windows и будет возвращать файлы с именами, такими как WHEREver
и Last WILL and testament
. Я нашел это полезным для качественной информации, где приведение более широкого поиска приемлемо и может быть легко отфильтрованоuser (ПРИМЕЧАНИЕ: приведенный выше пример также вернет все файлы с именем, содержащим i
, поэтому оно не очень конкретное!)