Скопируйте рабочий лист в два каталога - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю с макросом для копирования данных между листами в нескольких папках.Для этого примера это файл

\ network_drive \ Locations \ site \ network_scans \ year \ Month \ results.xlsx

Я пытаюсь скопировать таблицу из этого файлав другую рабочую книгу на две папки вверх.В этом случае

\ network_drive \ Locations \ site \ network_scans \ Template.xlsx

Я делаю это с абсолютным путем:

Sheets("Chart Data").Select
Selection.Copy
Workbooks.Open Filename:= _
    "\\network_drive\Locations\site\network_scans\Template.xlsx"
Range("A20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close

Мне это нужно для нескольких местоположений и сайтов (то есть сайт 1, сайт 2, сайт 3 и т. Д.).Я пытаюсь сделать путь относительным.Если бы я делал это вручную, я бы использовал cd ../../ и затем открыл Template.xlsx.

Как ссылаться на относительные пути в VBA?

РЕДАКТИРОВАТЬ
Я думаю, что получил синтаксис, но теперь он генерирует

Ошибка времени выполнения '1004'
Извините, мы не смогли найти C: \ Users \ USER \ AppData \ Roaming \ Excel \ XLSTART Scan Reports \ filename.xlsx.Возможно ли его переместить, переименовать или удалить?

Sheets("Chart Data").Select
Selection.Copy
Workbooks.Open CStr(ThisWorkbook.Path) & "\..\..\..\network_scans\Template.xlsx"
Range("A20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
End Sub

SNIP
Он обращается к файлу так, как если бы он находился на диске C, а не на сетевом диске.Любые мысли о том, как заставить его видеть это как сетевой путь вместо локального?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы можете получить имя пути к файлу текущей рабочей книги с помощью

thisworkbook.path

Оттуда вы можете выполнить приведение в виде строки и добавить навигацию, указанную выше:

cstr(thisworkbook.Path) & "\..\.."

чтобы получить два справочника.

Удачи!

0 голосов
/ 28 сентября 2018

Скопируйте приведенный ниже код в Module

Function GetGrandParentFolder() As String
    Dim oFSO As New FileSystemObject
    With oFSO
        GetGrandParentFolder = .GetParentFolderName(.GetParentFolderName(ThisWorkbook.Path))
    End With
End Function

Теперь вы можете вызвать этот UDF, чтобы получить имя вашей большой папки

ПРИМЕЧАНИЕ. Необходимо добавить ссылку наMicrosoft Scripting Runtime для работы UDF выше

...