通过位于其他文件夹中的Excel模板创建新的工作簿

时间:2018-11-19 22:54:23

标签: excel vba excel-vba

我有一个Excel 2016电子表格,其中包含发送给客户的报价的详​​细信息(每个报价的第一行包含带有客户名称,报价日期,报价编号等单元格)。我正在尝试设计一个宏以驻留在此电子表格中,该电子表格将基于现有的Excel模板(英国-Quote Sheet.xltm)创建一个新的工作簿,填充新工作簿中的某些字段,并将其保存为由元素构造的文件名报价条目。例如,如果电子表格在日期单元格中包含19/11/18的条目,在“客户名称”字段中包含ABC,在“报价编号”字段中包含Q1234,则新文件将被赋予名称“ Q1234-ABC(19.1.18) .xlsm”以及日期,客户名称和报价编号将被插入到新工作簿中的相应工作表单元格中。我已经能够获取宏以生成适当的文件名并填充新工作簿中的单元格,但是仅通过使用绝对文件路径作为模板的位置和新工作簿的存储位置即可。只要在我需要运行宏的每台PC上文件夹路径都相同的情况下就可以了,但事实并非如此,因此当宏在文件路径不同的PC上运行时宏会失败。每台PC上的文件夹结构为:

.. \ Documents \ Quotes \ Quotes数据库 ,以获取报价明细电子表格的位置
.. \ Documents \ Templates \ Quotes .. \ Documents \ Quotes \ Amendable Quotes (新文档的位置)

此文件夹树的位置将因PC而异。

以下代码适用于以上文件夹树位于 C:\ VD Operations 内的情况,但是我需要进行修改,以便无论文件夹树位于何处例如它可能位于 D:\ Work \ VD Operations

Sub CreateQuote()   'Generate a new quote using UK - Quote Sheet Template

Dim qContact, qNo, qDate, qCustomer As String
Dim qFilename As String
Dim qDay, qMonth, qYear As String
Dim qNewWorkbook As Workbook
Dim qDest As Worksheet

' Get quote details from appropriate entry in Quote Database

qContact = Cells(ActiveCell.Row, 13).Value
qNo = Cells(ActiveCell.Row, 1).Value
qCustomer = Cells(ActiveCell.Row, 12).Value
qDate = Cells(ActiveCell.Row, 3).Value
qDay = Day(qDate)
qMonth = Month(qDate)
qYear = Right(Year(qDate), 2)

Set qNewWorkbook = Workbooks.Open(Filename:="C:\VD Operations\Documents\Templates\Quotes\UK - QUOTE SHEET.xltm", _
Editable:=False)

' Construct quote file name

qFilename = "C:\VD Operations\Documents\Quotes\Amendable Quotes\" & qNo & " - " & qCustomer & " (" & qDay & "." & qMonth & "." & qYear & ").xlsm"

' Update Cover sheet in quote with values from Quote Database

Set qDest = qNewWorkbook.Sheets("Cover Sheet")
qDest.Range("QuoteNo") = qNo
qDest.Range("Customer") = qCustomer
qDest.Range("Contact") = qContact
qDest.Range("QuoteDate") = qDate

' Save the quote
qNewWorkbook.SaveAs Filename:=qFilename, FileFormat:=52
End Sub

我知道我可以找到“报价详细信息”电子表格的路径,但不确定如何使用它来计算其他文件的路径。

1 个答案:

答案 0 :(得分:0)

对于此文件夹结构(例如):

C:\
    _Stuff\
         test\
             tmp1\   '<< macro file is stored here
             tmp2\   '<< need to load a file "test.xlsx" from here

您可以这样做:

  ThisWorkbook.Path                        '>> C:\_Stuff\test\tmp1

  ThisWorkbook.Path & "\..\tmp2\test.xlsx" '>> C:\_Stuff\test\tmp2\test.xlsx

因此..带您“上”到C:\_Stuff\test,然后您可以从那里“下”到tmp2