Excel在动态目录路径中生成新工作簿

时间:2015-12-18 11:16:49

标签: excel vba excel-vba

我正在使用根据所选国家/地区生成报告的工作簿。每个国家/地区都使用特定的路径目录。

从根文件夹导入信息时,确定。

我的问题是当我使用报告生成新工作簿时。我尝试将其保存在随国家/地区变化的特定位置:

'Generate a new workbook refering to the first Worksheet
 Set WkReport = Workbooks.Add(xlWBATWorksheet)
 With WkReport
 // Skip selecting the sheet, just reference it explicitly and copy it      after//
 // the blank sheet in the new wb.
ThisWorkbook.Worksheets("REPORT").Copy after:=.Worksheets(.Worksheets.Count)
End With
// Kill alerts, delete the blank sheet in the new wb and turn alerts back on//
Application.DisplayAlerts = False

With WkReport

.SaveAs Filename:="L:\Fold1\Fold2\Fold3\" & rngFolder & "\" & rngYear & "\" & rngMonth &"\"& rngName & "_Report_" & rngDate & ".xlsx"

End With

Application.DisplayAlerts = True'`enter code here`
  • L:\ Fold1 \ Fold2 \ Fold3:固定路径
  • rngFolder是国家之路
  • rngYear是国家/地区内子文件夹的路径
  • rngMonth是年内子文件夹的路径

(rngSmthing是指工作簿中的单元格的范围)

所有这些都是动态范围,根据用户提供的信息而变化。

因此,当我创建工作簿时,必须根据此信息将其保存在不同的位置。

该文件的名称包含另一个动态范围" rngName"随后是报告和" rngDate": Filename = rngName_Report_rngDate.xlsx

我的代码用L:\ Fold1 \ Fold2 \ Fold3保存,文件名为 Report .xlsx

用户选择的路径目录示例... 德国: L:Folder1中\文件夹2 \ Folder3 \德国\ 2015年\ 06-2015 \ GE_Report_31-06-15.xlsx 匈牙利: L:Folder1中\ FOLDER2 \ Folder3 \匈牙利\ 2015 \ 06_2015 \ HU_Report_31-06-15.xlsx

!问题解决了!我只是忘了设置rngSmthng变量...(Clap Clap)无论如何,如果你想根据你的范围设置不同的保存路径,有人可能会觉得它很有用:

'cellRef is a named cell within the workbook where user selects data
rngName = ws.Range("cellRef").Value

通过这种方式,您可以使用动态路径查找器。

2 个答案:

答案 0 :(得分:2)

很高兴你找到了答案。作为旁注 - 这是我写程序的方式。

Sub Test()

    Dim wkReport As Workbook
    Dim sFolder As String
    Dim sPath As String
    Dim rngFolder As Range
    Dim rngName As Range

    With ThisWorkbook.Worksheets("Sheet1")
        Set rngFolder = .Range("A1")
        Set rngName = .Range("A2")
    End With

    sFolder = "L:\Fold1\Fold2\Fold3\" & rngFolder & "\" & Format(Date, "yyyy\\mm mmm\\")
    CreateFolder sFolder

    sPath = sFolder & rngName & "_Report_" & Format(Date, "dd-mm-yy") & ".xlsx"

    Set wkReport = Workbooks.Add(xlWBATWorksheet)
    With wkReport
        ThisWorkbook.Worksheets("REPORT").Copy after:=.Worksheets(.Worksheets.Count)
        .Worksheets(1).Delete
        .SaveAs sPath, ThisWorkbook.FileFormat
    End With

End Sub

' Purpose   : Will Recursively Build A Directory Tree
Sub CreateFolder(Folder)
On Error Resume Next
Dim objFSO As Object: Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Folder <> "" Then
        If Not objFSO.FileExists(objFSO.GetParentFolderName(Folder)) Then
            Call CreateFolder(objFSO.GetParentFolderName(Folder))
        End If
        objFSO.CreateFolder (Folder)
    End If
End Sub

注意:
Format(Date, "yyyy\\mm mmm\\")将返回2015\12 Dec\ Format(Date, "yyyy\mm mmm\")将返回2015m12 Dec

答案 1 :(得分:0)

真的很抱歉...... 非常感谢你的帮助......你无法猜到它。

问题在于我将它们设置在不同的宏中的那些变量,我完全忘记了......所以当然它不能识别变量..因为我没有在这个宏中创建它们!

再次,我的道歉应该在发布

之前检查我的代码两次