Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VBA中获取excel文件名/路径_Excel_Vba - Fatal编程技术网

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

如何在VBA中获取excel文件名/路径,excel,vba,Excel,Vba,比如说,我正在excel文件sample.xls中编写VBA。现在我想在VBA中获取sample.xls的完整路径。如何操作?如果您指的是VBA,则可以使用全名,例如: strScriptFullname = WScript.ScriptFullName strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,"\")) strFileFullName = ThisWorkbook.FullName

比如说,我正在excel文件sample.xls中编写VBA。现在我想在VBA中获取sample.xls的完整路径。如何操作?

如果您指的是VBA,则可以使用全名,例如:

   strScriptFullname = WScript.ScriptFullName 
   strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,"\")) 
strFileFullName = ThisWorkbook.FullName

(根据评论意见进行了更新:如果其他office文件可能被打开(ed),则前者使用的
ActiveWorkbook.FullName
更可能是错误的)但如果您将宏存储在另一个文件中,如user@user7296559所述,并且确实需要使用file的宏的文件名,
ActiveWorkbook
可能是正确的选择,如果它保证在执行时处于活动状态。)

ActiveWorkbook.FullName我认为更好,如果VBA宏存储在另一个Excel工作簿中,但希望获取正在编辑的Excel的详细信息,而不是宏所在的位置


如果它们位于同一个文件中,则无所谓,但如果它们位于不同的文件中,并且您希望该文件位于数据所在的位置而不是宏所在的位置,那么ActiveWorkbook就是您要选择的文件,因为它同时处理这两种情况。

这是一个简单的替代方案,可以提供所有响应、全名、路径和文件名

Dim FilePath, FileOnly, PathOnly As String

FilePath = ThisWorkbook.FullName
FileOnly = ThisWorkbook.Name
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))

有一种通用的方法可以做到这一点:

Function FileName() As String
    FileName = Mid(Application.Caption, 1, InStrRev(Application.Caption, "-") - 2)
End Function

如果只需要路径,这是最简单的方法:

PathOnly = ThisWorkbook.Path

如果只需要路径而不需要文件名:

ActiveWorkbook.Path
它将返回D:\文件夹

如果还需要文件名为的文件路径:

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

如果您只需要文件名:

ActiveWorkbook.Name
它将返回sample.xls


所以,如果您想要合并文件路径和文件名以获得完整目录,请不要忘记在两者之间添加“”。否则,使用.Path会更简单。当您在sample.xls内说VBScript时,您是指Excel固有的VBA吗?那么您是否想更正标题和标记?op中说的是inside sample.xls,这让我怀疑VBScript。我怀疑VBA。你肯定是指这个工作簿。全名?;)Oorang的评论是正确的:“ThisWorkbook.FullName”将是正确且安全的调用。Veera的问题是:“我正在excel文件sample.xls中编写VBA。现在我想在VBA中获得sample.xls的完整路径。”。(添加了强调符号。)在这种情况下,使用“ThisWorkbook.FullName”保证是正确的,而如果“sample.xls”当前不是活动工作簿,“ActiveWorkbook.FullName”则可能给出错误的答案。这是有效的。请记住,如果文件未保存,则
thiswoolk.Name
thiswoolk.FullName
将返回文件名(例如Book1),而不带文件扩展名或路径。首先,它可能很有用。除了
PathOnly=Left(FilePath,Len(FilePath)-Len(FileOnly))
你可以写:“PathOnly=thishworkbook.Path`为什么你说这是一种通用的方法?”?这甚至不能回答问题。OP需要带路径的全名。您的所有函数都与:
ThisWorkbook.Name