复制工作表以归档两个目录

时间:2018-09-28 15:22:48

标签: excel vba relative-path

我正在使用宏在多个文件夹中的工作表之间复制数据。在此示例中,文件为

  

\ 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扫描报告\ 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 :(得分:1)

将以下代码复制到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正常工作

答案 1 :(得分:0)

您可以使用

获取当前工作簿的文件路径的名称。
this.data = [{
    name: '1',
    children: [{
        name: '11',
        children: [{
            name: '111'}, {
            name: '112'}]}, {
        name: '12',
        children: [{
            name: '121'}, {
            name: '122'}]}]}, {
    name: '2',
    children: [{
        name: '21'}, {
        name: '22'}]}];

从那里,您可以将字符串转换为字符串,并附加上面提到的导航:

thisworkbook.path

让您进入两个目录。

祝你好运!