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

Posted

技术标签:

【中文标题】如何在 VBA 中获取当前工作表的路径?【英文标题】:How to get the path of current worksheet in VBA? 【发布时间】:2011-02-18 07:50:25 【问题描述】:

我编写了一个宏作为加载项,我需要获取正在执行它的当前工作表的路径。我该怎么做呢?如何获取文件路径(只是目录)?

【问题讨论】:

你的意思是,给定一个工作表,你想知道父工作簿保存的文件夹吗? 【参考方案1】:

Application.ActiveWorkbook.Path 仅用于路径本身(没有工作簿名称)或Application.ActiveWorkbook.FullName 用于路径工作簿名称。

【讨论】:

活动工作簿取决于哪个工作簿处于活动状态。使用 Thisworkbook.path 当然,两者在不同的情况下都有用。我认为原始问题的意思是宏驻留在加载项工作簿(即 ThisWorkbook.path)中,但需要根据用户需要对其他工作簿运行代码(即 ActiveWorkbook.path)。跨度> 应始终明确 - 如果是此工作簿,则应为 application.thisworkbook.path。如果是打开的工作簿,则应使用集合定义名称,然后是 application.Variablename.path(或 fullpath,取决于)。 @Selkie 如果 代码本身 打开工作簿,那么可以。但是,如果这只是一个驻留在加载项工作簿中的辅助宏,并且需要在用户调用该宏时对当前打开的任何工作簿进行操作,则需要 ActiveWorkbook Excel.ActiveWorkbook.Path 仅在文件至少保存一次时才有效。此外,如果文件从未保存过,Excel.ActiveWorkbook.FullName 只返回文件名。 check if the workbook has ever been saved 可能是个好主意。【参考方案2】:

总是很高兴拥有:

Dim myPath As String     
Dim folderPath As String 

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

【讨论】:

【参考方案3】:

如果您想从执行宏的位置获取工作簿的路径 - 使用

Application.ThisWorkbook.Path

Application.ActiveWorkbook.Path 有时会产生意想不到的结果(例如,如果您的宏在多个工作簿之间切换)。

【讨论】:

@avalanche1. 完全正确,activeworkbook 给我带来了很多意想不到的结果【参考方案4】:

最快的方法

path = ThisWorkbook.Path & "\"

【讨论】:

如果您可以在最后添加 &"\",您的方式会很好。 myPath = ThisWorkbook.Path & "\"

以上是关于如何在 VBA 中获取当前工作表的路径?的主要内容,如果未能解决你的问题,请参考以下文章

vba excel怎么获取指定工作表的行数、列数

如何正确地从 Excel 工作表的 VBA 连接到另一个 Excel 工作表?

VBA 工作薄中所有工作表怎么用代码表示

跨多个工作表的 VBA 宏

vba 打开固定地址下,指定名称的工作簿

利用vba怎样编写将工作表中第三行到最后一行(不确定)的数据复制并插入到另一个工作表的第二行前?