如何在VBA中获取excel文件名/路径

Vee*_*era 33 excel vba excel-vba

说,我正在我的excel文件sample.xls中写一个VBA .现在我想的全路径sample.xls在我的VBA.我该怎么做?

Fio*_*ala 43

如果您的意思是VBA,那么您可以使用FullName,例如:

strFileFullName = ThisWorkbook.FullName
Run Code Online (Sandbox Code Playgroud)

(根据评论考虑更新:ActiveWorkbook.FullName如果其他办公室文件可以打开(编辑)并激活,前者使用的可能更有可能.但是如果您将宏存储在另一个文件中,如用户@ user7296559 在此处所述,以及真的希望宏使用文件的文件名ActiveWorkbook可能是正确的选择,如果它保证在执行时是活动的.)

  • 当然你的意思是ThisWorkbook.FullName?;) (15认同)
  • Oorang的评论是正确的:'ThisWorkbook.FullName'将是正确且安全的电话.Veera的问题是:"我正在写我的excel文件sample.xls中的VBA*.现在我想在我的VBA中获得sample.xls的完整路径".(强调补充.)在这种情况下,使用'ThisWorkbook.FullName'保证是正确的,而'ActiveWorkbook.FullName'可能会给出一个非常错误的答案,如果"sample.xls"当前不是活动工作簿. (15认同)
  • 不必要. (4认同)

小智 18

这是一个简单的替代方案,它提供所有响应,Fullname,Path,filename.

Dim FilePath, FileOnly, PathOnly As String

FilePath = ThisWorkbook.FullName
FileOnly = ThisWorkbook.Name
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))
Run Code Online (Sandbox Code Playgroud)

  • 插入“ PathOnly = Left(FilePath,Len(FilePath)-Len(FileOnly))”可以编写:'PathOnly = ThisWorkbook.Path` (5认同)

Mit*_*eat 8

   strScriptFullname = WScript.ScriptFullName 
   strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,"\")) 
Run Code Online (Sandbox Code Playgroud)

  • op说*inside*sample.xls,这让我怀疑VBScript.我怀疑是VBA. (3认同)

小智 5

如果您只需要路径,这是最直接的方法:

PathOnly = ThisWorkbook.Path
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您只需要不带文件名的路径:

ActiveWorkbook.Path
Run Code Online (Sandbox Code Playgroud)

它将返回 D:\Folder

如果您还需要带有文件名的文件路径:

ActiveWorkbook.FullName
Run Code Online (Sandbox Code Playgroud)

它将返回 D:\Folder\sample.xls

如果您只需要文件名:

ActiveWorkbook.Name
Run Code Online (Sandbox Code Playgroud)

它将返回sample.xls

因此,如果您想组合文件路径和文件名来获取完整目录,请不要忘记在之间添加“”。否则使用 .Path 更简单