将通过Excel模板生成的工作簿保存在不同位置

时间:2019-02-28 00:29:18

标签: excel vba

我有一个Excel xltm模板,该模板用于生成必须根据用户输入到工作簿中特定单元格的值保存在两个文件夹之一中的工作簿。我知道如何确定单元格的内容,因此可以决定将工作簿保存在哪个文件夹中,并且目标文件夹相对于模板存储文件夹始终位于同一位置。但是,不同的用户可能在不同的驱动器上具有模板文件夹和目标文件夹,因此我无法对宏中的目标文件夹使用硬编码路径。我知道我可以打开一个文件对话框并让用户选择文件夹,但希望让宏直接执行保存。我尝试使用ThisWorkbook.Path,但是由于从模板创建工作簿时,没有与工作簿关联的路径,因此无法使用。任何想法,将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果合理地限制了可用(或变化)驱动器的数量,则可以将预期的驱动器硬编码到Array中,并运行循环检查每个驱动器/文件路径组合是否可用。

当文件路径可用时,这本书将保存并结束循环。


也许是这样的:

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

如果您决定使用此功能,则只需将该过程与您的其他代码分开,并在需要保存新书时调用此子项。当然,您需要将变量Folder路径(可能还有书名)传递到上面的宏中。然后,它应该可以保存动态驱动器和文件夹位置

答案 1 :(得分:0)

更新-很遗憾,解决方案还不够!我假设Environ("OneDriveCommercial")将返回用户Sharepoint文件夹的路径,但不会返回-它返回到用户个人OneDrive文件夹的路径,与Environ("OneDrive")相同。似乎没有环境变量可用于查找Sharepoint文件夹的位置。取而代之的是,我使用了filepath = Left(Environ("OneDrive"), Len(Environ("OneDrive")) -24) & "xxxx",它获得的字符串等于用户的个人OneDrive文件夹所在的路径,并删除了与OneDrive文件夹名称相同的字符(在我的情况下为24个字符)(因此位于共享点的开头)文件夹),然后将路径的其余部分(显示为xxxx)附加到共享点文件夹中的所需文件夹。

例如,对于名为User1的公司中的Company Name1

如果其“个人一驱动器”文件夹位于C:\Users\User1\OneDrive - Company Name1,而其Sharepoint文件夹位于C:\Users\User1\Company Name1,则Environ("OneDrive")返回C:\Users\User1\OneDrive - Company Name1filepath = Left(Environ("OneDrive"), Len(Environ("OneDrive")) -24) & "xxxx"删除字符{{ 1}},并追加字符OneDrive - Company Name1,这些字符设置为等于共享点文件夹中所需文件夹的路径。这从xxxx开始,然后是其余路径。