2016-12-13 5 views
-1

, пожалуйста, как я могу изменить этоИзменить абсолютный путь к относительному пути VBA

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

относительного пути? DB_DATA \ HISTORY_LOG.xlsx

У меня есть два файла. Если я хочу скопировать оба этих файла в другое место, мне нужно, чтобы оба они все еще были связаны.

Thx за помощью

ответ

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 
+0

Я немного смущен этим кодом. Его можно применить к 'Sub XFer() Dim wb As Workbook, NR As Long Установить wb = Workbooks.Open (" Quotes.xls ") NR = Таблицы (" Sheet1 "). Диапазон (" A " & Rows.Count) .End (xlUp) .Row + 1 With ThisWorkbook.Sheets («Лист результатов») wb.Sheets («Sheet1»). Диапазон («A» и NR) .Value = .Range (" B4 "). Значение Конец с wb.Close savehanges: = True End Sub' – Nataniell

0

Если вы используете Activeworkbook.FullName это даст вам полный путь активного файла .. но не вы это знаете, если вы сохраняете его в любом случае?

+0

Я хочу использовать это для сохранения некоторых данных в разных книгах, но для этого нужны эти книги. Я нашел коды для сохранения данных, но не с относительными путями. – Nataniell

+0

@Nataniell Это потому, что вы не знаете, какой диск это? (т. е. «U: \ DB_DATA \ HISTORY_LOG.xlsx» может быть «T: \ DB_DATA \ HISTORY_LOG.xlsx» на чужом ПК?) Если это так, вам лучше использовать имя диска, чем назначенное письмо (например, Drive_NAME: \ DB_DATA \ HISTORY_LOG.xlsx ") – Jeremy

0

Есть два возможных решения здесь:

я) Вы можете использовать книгу, чтобы создать путь и изменить его

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

II) С.Е. cond, вы должны иметь возможность использовать '.' нотация ('.' = эта папка, '..' = родительская папка)

Dim Path AS String 
Path = ".\Subfolder A\" 
Path = "..\..\Subfolder B\" 
Смежные вопросы