如何在VBA中获取当前工作表的路径?


141

我写了一个宏作为外接程序,我需要获取正在执行宏的当前工作表的路径。我该怎么做呢?如何获取文件路径(仅目录)?


您的意思是,给定一个工作表,您是否想知道父工作簿的保存文件夹?
Mathias

Answers:


264

使用Application.ActiveWorkbook.Path的只是路径本身(没有工作簿的名称),或者Application.ActiveWorkbook.FullName该路径工作簿的名称。


24
Activeworkbook取决于哪个工作簿处于活动状态。使用Thisworkbook.path
Alwyn Miranda

6
当然,两者在不同情况下都是有用的。我以最初的问题来表示该宏驻留在外接工作簿(将为ThisWorkbook.path)中,但需要根据用户的需要对其他工作簿运行代码(即ActiveWorkbook.path)。
BradC

2
应该始终是明确的-如果是此工作簿,则应为application.thisworkbook.path。如果正在打开工作簿,则应使用一个集合定义名称,然后使用application.Variablename.path(或全路径,取决于)。
Selkie

@Selkie如果代码本身打开工作簿,请确定。但是,如果这只是驻留在外接程序工作簿中的帮助程序宏,并且需要在用户调用宏时在用户当前打开的任何工作簿上进行操作,则ActiveWorkbook需要使用该宏。
BradC

3
Excel.ActiveWorkbook.Path仅在文件已保存至少一次后才有效。另外,如果从未保存Excel.ActiveWorkbook.FullName过文件,则仅返回文件名。检查工作簿是否曾经保存可能是一个好主意。
ChrisB

37

总是很高兴:

Dim myPath As String     
Dim folderPath As String 

folderPath = Application.ActiveWorkbook.Path    
myPath = Application.ActiveWorkbook.FullName

27

如果要从执行宏的位置获取工作簿的路径,请使用Application.ThisWorkbook.Path
Application.ActiveWorkbook.Path有时会产生意想不到的结果(例如,如果宏在多个工作簿之间切换)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.