Страницы: 1
RSS
Функция Dir не работает в папке "Этот компьютер\ZTE\Телефон"
 
Как правильно скормить путь "Этот компьютер\ZTE\Телефон" функции Dir, чтобы она не вызывала ошибку?

Хочу, как обычно, запустить рекурсивно функцию VBA Dir, чтобы получить список всех папок и файлов.
Так вот: на "C:\" всё работает, а на подключённом к компу по USB-кабелю смартфоне функция Dir выдаёт ошибку.
Понимаю, что вместо "Этот компьютер..." надо писать что-то другое, только вот что именно?
Изменено: Alex_Kite - 02.01.2021 15:33:13 (Скриншоты не загрузились)
 
А как в Проводнике виден телефон? Ведь без "Этот компьютер"?
 
Запишите макрорекордером открытие любого файла на "таинственном" устройстве.
Владимир
 
Если ОС определяет его как некое сетевое устройство или устройство, для работы с которым нужны сторонние драйверы, то Dir может глючить. Наблюдал такое. Можно попробовать применить FSO.  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
sokol92 написал:
Запишите макрорекордером открытие любого файла на "таинственном" устройстве.
Записал. Получил пустой макрос. Все дальнейшие действия записываются, а открытие - нет.
Пытался записать макрорекордером сохранение файла туда. Получаю ошибку - Файл не найден - см. скриншот.
MS Office Pro plus 2019, Excel версия 1911.
 
Цитата
Юрий М написал:
А как в Проводнике виден телефон? Ведь без "Этот компьютер"?
В проводнике виден как "ZTE BLADE V9 VITA". Пробовал ChDrive "ZTE BLADE V9 VITA" - не помогает (Device unavailable).

Обычно я открываю исследуемую папку проводником, делаю "Копировать путь как текст" и вставляю в макрос.
Отсюда и взялся "Этот компьютер". Без  "Этот компьютер" тоже пробовал. Разницы никакой.  
 
Доброе время суток
Цитата
Alex_Kite написал:
В проводнике виден как "ZTE BLADE V9 VITA"
А при попытке открыть любую книгу в проводники, система копирует временно файл книги во временную папку, например, у меня
Код
?ThisWorkbook.FullName
C:\Users\MyUserName\AppData\Local\Microsoft\Windows\INetCache\IE\MTQ0MFIT\Book1.xlsm
и Excel открывает уже её в режиме для чтения. Отсюда напрашивается вывод. Если нет прямого USB подключения (что когда-то было на Android) в режиме флешки, то вы не сможете указать файл ни Dir, ни FileSystemObject.
 
Цитата
Андрей VG написал:
и Excel открывает уже её в режиме для чтения
При открытии - да, согласен. Но Dir должен сработать, главное - понять, как этот диск правильно называется.  
 
Цитата
Alex_Kite написал:
Но Dir должен сработать,
На основании каких данных вы это утверждаете? Что означают USB-подключения Android: MTP, PTP и USB Mass Storage - почитайте ради интереса :)
Цитата
Alex_Kite написал:
как этот диск правильно называется.
Ну, поскольку перебрасывается в App Local, то запросите базовый путь
Код
Environ$("LOCALAPPDATA")
, а из него уже без проблем можно букву диска получить.
 
Цитата
Андрей VG написал: почитайте ради интереса...
Почитал, спасибо, познавательно.
LOCALAPPDATA естественно начинается с "C:\". Получается, средствами VBA невозможно получить перечень файлов на телефоне?
 
Цитата
Alex_Kite написал:
средствами VBA невозможно
На этом форуме такие высказывания, обычно, ложны. Пока более квалифицированные участники доедают остатки от праздничного стола, распечатаем список всех папок (файлов) верхнего уровня мобильного телефона "Galaxy A5 (2017)".
Код
Option Explicit

Sub ShowPhoneFolders()
  Dim f As Object, f2 As Object
  Set f = FindFolder("Galaxy A5 (2017)").GetFolder.ParseName("Phone").GetFolder
  For Each f2 In f.items()
    Debug.Print f2
  Next f2
End Sub

' Поиск папки из "Мой компьютер"
Function FindFolder(ByVal FolderName As String) As Object
  Dim oShellApp, f
  Set oShellApp = CreateObject("Shell.Application")
  For Each f In oShellApp.Namespace("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}").items()
    If StrComp(f, FolderName, vbTextCompare) = 0 Then
      Set FindFolder = f
      Exit For
    End If
  Next f
  Set oShellApp = Nothing
End Function

В условиях #5 строка 5 будет такой:
Код
Set f = FindFolder("ZTE BLADE V9 VITA").GetFolder.ParseName("Телефон").GetFolder
Изменено: sokol92 - 03.01.2021 15:05:12
Владимир
 
Цитата
sokol92 написал:
распечатаем список всех папок (файлов) верхнего уровня мобильного телефона
Работает, спасибо )))
Буду разбираться и рекурсию прикручивать)

А что такое Namespace("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")?
 
"Мой компьютер" (ключ реестра Windows).  :)  
Изменено: sokol92 - 03.01.2021 20:31:55
Владимир
 
Владимир, большое спасибо за решение.
 
Здравствуйте, Андрей, спасибо.
Владимир
 
Цитата
sokol92 написал: "Мой компьютер" (ключ реестра Windows).
Владимир, спасибо за решение!

Спасибо всем, кто участвовал в обсуждении.
С Новым Годом!
Страницы: 1
Наверх