Я подыскиваю папку (каталог) для хранения временных .txt файлов (эти файлы будут создаваться и удаляться только на время выполнения процедуры). Остановил выбор на папке Пользователя.
Почему?
Загвоздка в том, что некоторые процедуры - подразумевают работу с .txt файлами не только в выбранном каталоге, но и всех его ПОДкаталогах (выбор осуществляется через диалог выбора каталога).
Т.е., нужен такой каталог, в котором ничего интересного обычно не хранится (при выборе такого каталога предлагается обработка всех его подкаталогов; ну, или можно вернуться к диалогу и выбрать любые другие каталоги\подкаталоги вручную). Но это всё лирика))
Основная причина в том, что папка Пользователя разрешает создание файлов (!!!) - по крайней мере в Win 8.1 (да, я люблю Win 8.1).
Этот факт (!!!) теперь мне нужно проверить в Win XP - хотя бы ещё и потому что там совсем другая структура каталогов (я подглядывал здесь: https://habr.com/ru/post/70922/).
Код
Option Explicit
Private Sub Workbook_Open()
Const zQcQ1q As Double = 100000000000000#
Const zQcQ2q As Double = 999999999999999#
Dim zQ0q As String
Dim zQ1q As String
Dim zQFq As Variant
Dim zQsq As Variant
Set zQsq = CreateObject("WScript.Shell").SpecialFolders: zQ0q = _
zQsq("MyDocuments")
Dim zQiq As Variant
Dim zQSplitq() As String
zQSplitq = _
Split(zQ0q, "\")
zQ0q = "" '!!!
For zQiq = 0 To UBound( _
zQSplitq) - 1: zQ0q = zQ0q & _
zQSplitq(zQiq) & "\"
Next
zQ1q = _
zQ0q & Application.WorksheetFunction.RandBetween(zQcQ1q, zQcQ2q) & ".txt"
Set zQFq = CreateObject("Scripting.FileSystemObject").CreateTextFile( _
zQ1q)
For Each _
zQsq In zQsq
zQFq.WriteLine _
zQsq
Next: zQFq.Close '!!!
Shell "explorer.exe" & " " & zQ0q, vbNormalFocus
Shell "notepad.exe " & " " & zQ1q, vbNormalFocus
Kill zQ1q '!!!
Beep
End Sub
Что код делает:
Находит SpecialFolders("MyDocuments") - которая примечательна тем, что во всех версиях винды она лежит прямо в папке Пользователя.
Находит папку Пользователя - через Split по "\" и через "UBound - 1".
Создаёт в папке Пользователя .txt файл со случайным именем.
Записывает в этот .txt все возможные SpecialFolders.
Открывает этот .txt и папку Пользователя через Shell.
Удаляет этот .txt.
Передаёт на секретную веб-страницу данные фашего паспорта и дебетовой карты (на самом деле нет)))
В общем, я вполне уверен, что папка Пользователя в Win XP тоже разрешает создание файлов. Но я буду признателен, если кто-то из владельцев хрюши здесь это подтвердит)) И ещё мне не помешает список "всех возможных SpecialFolders" (см. п. 4).
Oleg Boyaroff, я мало знаком с Environ; прочитал, будто она не всегда работает. Искать UserFolder через "Ubound - 1" конечно тоже не универсальный метод)) Но если на всех версиях винды начиная с XP он сработает - меня это устраивает!
Тут надо от задачи плясать ибо каталоги пользователя могут быть 1. обычными, на диске С: или ином другом, как большинство привыкли . 2. Перемещаемые c профилем 3. Перенаправленные например в последнем варианте предусматривается стандартно редирект 4х каталогов: Documents, Desktop, Download, Favorites. Надо ли временные файлы создавать на сервере, если хранить это в каталоге с документами - дело вкуса и потребности. А с роумингом, если не почистить, то будет барахло ездить туда сюда.
Я б тоже использовал TEMP, но повторю, все от задачи.