【发布时间】:2010-12-26 02:54:09
【问题描述】:
说,我正在我的 excel 文件 sample.xls 中编写 VBA。现在我想在我的 VBA 中获取 sample.xls 的完整路径。我该怎么做?
【问题讨论】:
-
当您说VBScript inside sample.xls时,您是指Excel原生的VBA吗?
-
那您可以更正标题和标签吗?
说,我正在我的 excel 文件 sample.xls 中编写 VBA。现在我想在我的 VBA 中获取 sample.xls 的完整路径。我该怎么做?
【问题讨论】:
如果你的意思是 VBA,那么你可以使用 FullName,例如:
strFileFullName = ThisWorkbook.FullName
(根据 cmets 的考虑进行了更新:如果其他办公文件可能已打开(编辑)并处于活动状态,则前者使用的 ActiveWorkbook.FullName 更可能是错误的。但如果您将宏存储在另一个文件中,如前所述用户@user7296559 here,并且确实想要宏使用文件的文件名,ActiveWorkbook 可能是正确的选择,如果它保证在执行时处于活动状态。)
【讨论】:
ThisWorkbook.Name 和 ThisWorkbook.FullName 将返回不带文件扩展名或路径的文件名(例如 Book1)。先check if the workbook has ever been saved可能会有用。
这是一个简单的替代方案,它提供所有响应,全名、路径、文件名。
Dim FilePath, FileOnly, PathOnly As String
FilePath = ThisWorkbook.FullName
FileOnly = ThisWorkbook.Name
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))
【讨论】:
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly)) 你可以写:'PathOnly = ThisWorkbook.Path`
strScriptFullname = WScript.ScriptFullName
strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,"\"))
【讨论】:
如果你只需要路径,这是最直接的方法:
PathOnly = ThisWorkbook.Path
【讨论】:
我认为 ActiveWorkbook.FullName 会更好,以防您将 VBA 宏存储在另一个 Excel 工作簿中,但您想获取正在编辑的 Excel 的详细信息,而不是宏所在的位置。
如果它们驻留在同一个文件中,那么没关系,但如果它们位于不同的文件中,并且您想要数据所在的文件而不是宏所在的文件,那么 ActiveWorkbook 就是要使用的文件,因为它同时处理这两种情况。
【讨论】:
如果您只需要没有文件名的路径:
ActiveWorkbook.Path
它会返回 D:\Folder
如果您还需要带有文件名的文件路径:
ActiveWorkbook.FullName
它会返回 D:\Folder\sample.xls
如果您只需要文件名:
ActiveWorkbook.Name
它会返回 sample.xls
所以如果你想结合文件路径和文件名来获得完整的目录,不要忘记在它们之间添加“”。否则使用 .Path 会更简单
【讨论】:
有一个通用的方法来得到这个:
Function FileName() As String
FileName = Mid(Application.Caption, 1, InStrRev(Application.Caption, "-") - 2)
End Function
【讨论】:
ThisWorkbook.Name