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_Vba_Excel - Fatal编程技术网

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

将绝对路径更改为相对路径VBA,vba,excel,Vba,Excel,请问我怎样才能改变这个 Set historyWb=Workbooks.Open(“U:\DB\U DATA\HISTORY\U LOG.xlsx”) 到相对路径?DB\u DATA\HISTORY\u LOG.xlsx 我有两个文件。如果我想将这两个文件复制到不同的位置,我需要两个文件都保持连接 Thx获取帮助如果您使用Activeworkbook.FullName它将为您提供当前活动文件的完整路径。。但是,如果您将它保存在那里,您难道不知道这一点吗?该函数被称为get\u relative,

请问我怎样才能改变这个

Set historyWb=Workbooks.Open(“U:\DB\U DATA\HISTORY\U LOG.xlsx”)

到相对路径?DB\u DATA\HISTORY\u LOG.xlsx

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


Thx获取帮助

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

该函数被称为
get\u 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

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

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

Dim Path As String
Path = Application.Substitute(ThisWorkbook.FullName, ThisWorkbook.Name, "")
Path = Path & "Subfolder A\"
ii)第二个是您应该能够使用“.”符号(“.”=此文件夹“…”=父文件夹)


我被这段代码弄糊涂了。可以将此应用于
Sub-XFer()将wb作为工作簿,NR作为长集wb=工作簿。打开(“Quotes.xls”)NR=工作表(“Sheet1”)。范围(“A”和Rows.Count)。结束(xlUp)。行+1与此工作簿.Sheets(“结果表”)wb.Sheets(“Sheet1”)。范围(“A”和“NR”)。值=.Range(“B4”).Value End With wb.Close savechanges:=True End Sub
我想用它将一些数据保存到不同的工作簿,但需要连接此工作簿。我找到了保存数据的代码,但没有相对路径。@Nataniell是因为你不知道它是什么驱动器吗?(即,“U:\DB\U DATA\HISTORY\U LOG.xlsx”在其他人的电脑上可能是“T:\DB\U DATA\HISTORY\U LOG.xlsx”),如果是这样,最好使用驱动器名而不是指定的字母(如“drive\U name:\DB\U DATA\HISTORY\U LOG.xlsx”)
Dim Path AS String
Path = ".\Subfolder A\"
Path = "..\..\Subfolder B\"