使用VBA更改工作簿参考

问题描述

当前,我有一个没有VBA的工作簿,该工作簿从外部工作簿中几个不同工作表上的特定范围提取最大值。将来,我希望能够经常更新源工作簿,而工作表名称和单元格范围将始终相同。例如,以下是我当前使用的一些单元格公式:

=MAX(ABS(IF('[Test.xlsx]Page_3'!$B$6:$B$107<$B$8,'[Test.xlsx]Page_3'!$A$6:$A$107)))
=MAX(ABS(IF('[Test.xlsx]Page_4'!$B$6:$B$107<$B$8,'[Test.xlsx]Page_4'!$A$6:$A$107)))

有没有一种方法可以定义工作表名称,同时仍在单元格中使用这些公式?我设想的是这样的:

Private Sub CommandButton1_Click()
Dim path As String
Dim wbk As Workbook

path = Application.GetopenFilename()
Set wbk = Workbooks.Open(path)


End Sub 

然后我将能够在像这样的单元格中使用该变量:

=MAX(ABS(IF('[wkb]Page_3'!$B$6:$B$107<$B$8,'[wkb]Page_3'!$A$6:$A$107)))

像这样可能吗?我想避免在VBA窗口中编码所有功能。我对Excel函数的语法更加满意。

解决方法

请尝试下一个代码,

Sub testOpenWB_Formula()
  Dim sh As Worksheet,path As String,wbk As Workbook,shortName As String

  Set sh = ActiveSheet 'use here your sheet
  path = Application.GetOpenFilename()
  Set wbk = Workbooks.Open(path)

   shortName = Split(path,"\")(UBound(Split(path,"\")))

  sh.Range("A8").Formula = "=MAX(ABS(IF('[" & shortName & "]Page_3'!$B$6:$B$107<$B$8,'[" & _
                                                        shortName & "]Page_3'!$A$6:$A$107)))"
  sh.Range("A9").Formula = "=MAX(ABS(IF('[" & shortName & "]Page_4'!$B$6:$B$107<$B$8,'[" & _
                                                        shortName & "]Page_4'!$A$6:$A$107)))"
End Sub

请注意更改要放置公式的单元格(在我的测试代码中为“ A8”和“ A9”)。