Сохранить книгу, созданную из шаблона Excel, в разных местах - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть шаблон Excel xltm, который используется для создания рабочих книг, которые должны быть сохранены в одной из двух папок в зависимости от значения, которое пользователь вводит в определенную ячейку в рабочей книге.Я знаю, как определить содержимое ячейки и, следовательно, принять решение о том, в какой папке сохранить рабочую книгу, а папки назначения всегда будут находиться в одном и том же месте относительно папки, в которой хранится шаблон.Однако разные пользователи могут иметь папку шаблонов и папки назначения на разных дисках, поэтому я не могу использовать жестко заданный путь для папок назначения в макросе.Я знаю, что могу открыть диалоговое окно файла и заставить пользователя выбрать папку, но предпочел бы, чтобы макрос выполнял сохранение напрямую.Я попытался использовать ThisWorkbook.Path, но это не работает, поскольку нет пути, связанного с книгой, когда она создается из шаблона.Любые идеи были бы хорошы.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Обновление - не совсем решение, к сожалению!Я предполагал, что Environ("OneDriveCommercial") вернет путь к папке Sharepoint пользователей, но это не так - он возвращает путь к личной папке OneDrive пользователей, такой же, как Environ("OneDrive").Кажется, что нет переменной среды для поиска местоположения папки Sharepoint.Вместо этого я использовал filepath = Left(Environ("OneDrive"), Len(Environ("OneDrive")) -24) & "xxxx". Эта строка получает путь, равный пути, в котором находится личная папка OneDrive пользователя, удаляет символы (24 в моем случае), равные имени папки OneDrive (и, следовательно, в начале папки sharepoint).и затем добавляет строку (показанную как xxxx), которая является остатком пути к требуемой папке в папке sharepoint.

Так, например, для User1 в компании с именем Company Name1:

Если папка Personal One Drive находится в C:\Users\User1\OneDrive - Company Name1, а папка Sharepoint в C:\Users\User1\Company Name1, Environ("OneDrive") возвращает C:\Users\User1\OneDrive - Company Name1, а filepath = Left(Environ("OneDrive"), Len(Environ("OneDrive")) -24) & "xxxx" удаляет символы OneDrive - Company Name1 и добавляет символы xxxxустановить равным пути к нужной папке в папке sharepoint.Это начинается с Company Name1, за которым следует остаток пути.

0 голосов
/ 28 февраля 2019

Если количество доступных (или изменяемых) дисков разумно ограничено, вы можете жестко закодировать ожидаемые диски в массив и запустить цикл проверки доступности каждой комбинации пути к диску / файлу.

Когда путь к файлу доступен, книга будет сохранена и цикл завершится.


Может быть что-то вроде этого:

Sub SaveMe()

Dim FilePath As String: FilePath = "\Users\urdearboy\Documents\"
Dim Drive, i As Long

Drive = Array("D:", "Z:", "C:")

For i = LBound(Drive) To UBound(Drive)
    If PathExists(Drive(i) & FilePath) Then
        ThisWorkbook.SaveAs (Drive(i) & FilePath & "Book Name Here" & ".xlsx")
        Exit For
    End If
Next i

End Sub

Функция для проверки, существует ли путь к папке

Function PathExists(path As String) As Boolean
    If Dir(path) <> vbNullString Then
        PathExists = True
    End If
End Function

Если вы решите использовать это, я просто оставлю эту процедуру отдельно от вашего другого кода и вызову эту подпрограмму, когда онавремя сохранить новую книгу.Конечно, вам нужно будет передать переменную путь к папке (и, возможно, название книги) в вышеупомянутый макрос.Затем это можно будет сохранить с помощью динамического расположения дисков и папок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...