我想知道是否有人知道如何解决这个问题:
在我的项目中,用户可以提供销售数据并使用宏来汇总数据并计算市场份额。宏本身根据用户提供的数据创建一个枢轴,然后添加一些 DAX 度量。然后将数据透视表作为纯文本复制到新工作表中(带有一些格式)。
这是负责为数据透视(和度量)创建数据模型的代码:
Dim NewScenario As Worksheet
Dim RangeForPivot As Range
Set NewScenario = Sheets(ActiveSheet.Index)
Set RangeForPivot = NewScenario.Range("A3", Range("A3").End(xlToRight).End(xlDown).End(xlDown).Offset(-1))
Workbooks("Award Document template.xlsm").Connections.Add2 _
"ScenarioConnection_" & NewScenario.Name & "!" & RangeForPivot.Address, "", _
"WORKSHEET;N:\02 - Trust Activity (New)\Northumbria NHS Foundation Trust\Service Line 1 - CRM & EP\CRM\CRM PQ074 2023\03-Pricing Analysis\[Award Document template.xlsm]" & NewScenario.Name _
, NewScenario.Name & "!" & RangeForPivot.Address, 7, True, False
ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("ScenarioConnection_" & NewScenario.Name & "!" & RangeForPivot.Address), Version:=8).CreatePivotTable TableDestination:= _
NewScenario.Name & "!" & "R100C42", TableName:="ScenarioPIVOT", DefaultVersion:=8
问题: 最终用户将将此模板文件从我们的团队文件夹复制到客户的文件夹中,并在其中开始分析和其他活动。不幸的是,该文件的名称和位置是硬编码的,并且宏将无法在不同的位置工作,或者如果文件具有不同的名称而不调整代码。
请问有人遇到过类似情况并找到解决办法吗? 任何建议将不胜感激。
假设代码存储在模板文件(Award Document template.xlsm)中,并在同一文件中创建数据透视表。
ThisWorkbook
是模板文件。 ThisWorkbook.Name
和 ThisWorkbook.Path
返回文件名和位置(路径)。
Dim NewScenario As Worksheet
Dim RangeForPivot As Range
Dim sPath As String
Set NewScenario = ActiveSheet
Set RangeForPivot = NewScenario.Range("A3", Range("A3").End(xlToRight).End(xlDown).End(xlDown).Offset(-1))
With ThisWorkbook
sPath = "WORKSHEET;" & .Path & "\[" & .Name & "]"
.Connections.Add2 _
"ScenarioConnection_" & NewScenario.Name & "!" & RangeForPivot.Address, "", _
sPath & NewScenario.Name _
, NewScenario.Name & "!" & RangeForPivot.Address, 7, True, False
.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
.Connections("ScenarioConnection_" & NewScenario.Name & "!" & RangeForPivot.Address), Version:=8).CreatePivotTable TableDestination:= _
NewScenario.Name & "!" & "R100C42", TableName:="ScenarioPIVOT", _
DefaultVersion:=8
End With