将绝对路径更改为相对路径VBA

时间:2016-12-13 11:39:36

标签: excel vba excel-vba

请问我怎么能改变这个

Set historyWb = Workbooks.Open("U:\DB_DATA\HISTORY_LOG.xlsx")

相对路径? DB_DATA \ HISTORY_LOG.xlsx

我有两个文件。如果我想将这两个文件复制到不同的位置,我需要将它们都连接起来。

寻求帮助

3 个答案:

答案 0 :(得分:1)

该函数名为get_relative,它有一个相对于get的可选值。如果未设置该值,则为1。 因此,TestMe模块将返回以下内容:

\DB_DATA\HISTORY_LOG.xlsx
\HISTORY_LOG.xlsx

代码如下:

Option Explicit

Sub TestMe()

    Debug.Print get_relative("U:\DB_DATA\HISTORY_LOG.xlsx")
    Debug.Print get_relative("U:\DB_DATA\HISTORY_LOG.xlsx", 2)

End Sub


Public Function get_relative(str_path As String, Optional l_number As Long = 1) As String

        Dim str_result      As String
        Dim l_start         As Long
        Dim l_counter       As Long

        For l_counter = 1 To l_number
            l_start = InStr(l_start + 1, str_path, "\")
        Next l_counter

        get_relative = Mid(str_path, InStr(l_start, str_path, "\"))

End Function

答案 1 :(得分:0)

如果您使用Activeworkbook.FullName,它会为您提供当前活动文件的完整路径..但​​如果您将其保存在那里,您是不是也知道这一点?

答案 2 :(得分:0)

这里有两种可能的解决方案:

i)您可以使用工作簿生成路径并对其进行更改

Dim Path As String
Path = Application.Substitute(ThisWorkbook.FullName, ThisWorkbook.Name, "")
Path = Path & "Subfolder A\"

ii)第二个是你应该可以使用'。'符号('。' =此文件夹,' ..' =父文件夹)

Dim Path AS String
Path = ".\Subfolder A\"
Path = "..\..\Subfolder B\"