我同时处理四个不同的 Excel 工作簿。实际上,三个工作簿和一个 Excel 模板。
可以这么说,我有一本正在指挥流量的主(“主”)工作簿。它包含对所有内容的引用(使用命名范围)以及打开其他三个电子表格的 VBA 代码。它创建数据工作簿和包含报告的工作簿。
对于一项特定操作,我有一个电子表格,我将其称为“数据”,其中包含(击鼓……)我的数据。在模板电子表格(又名“模板”)中,我使用源自“数据”的数据创建报告。
这就是我需要帮助的地方。我要求“大师”在“模板”的 C 列中写入一个引用工作簿“数据”中两个不同范围的公式,其中我从另一个(数据)范围中减去一个(数据)范围。
我希望Master在模板列C中创建一个引用数据中两列的公式...(其中QuantityTotal作为一列,Miscellaneous作为另一列)。
这就是我想要的。
Row1 公式 = ”Data”.Range(R1 & C(QuantityTotal)) – “Data”.Range(R1 & C(Miscellaneous)) Row2 公式 = “Data”.Range(R2 & C(QuantityTotal)) – “Data”.Range(R2 & C(Miscellaneous)) 。 。 。 RownFormula = “数据”.Range(Rn & C(QuantityTotal)) – “数据”.Range(Rn & C(杂项))
这个语法和 R1C1 表示法一样让我着迷。此时我认为我需要 R1C1 参考资料,但也许不需要。
我无法对“数据”工作簿名称进行硬编码。每次运行脚本时它都会发生变化。我不想在任何数据工作簿范围/单元格引用中进行硬编码。数据行引用将随每个连续行而变化,但列引用不会。数据列引用需要通过变量指定来引用,因为这些变量可能会随着我的软件的未来版本而改变。
我可以通过在数据中创建一个列来保存其他两个数据列的减法结果来解决这个头痛问题,但这不是一种干净的方式来处理我知道可以使用单元格中的公式执行的操作。
我希望这不是太含糊。如果需要更多信息,我可以提供。 感谢您提供的任何帮助。
我已经尝试了我能想到的每一种语法迭代。有一次,我真的很着迷于尝试在公式字符串中引用双引号。我开始使用 Chr(34) 我想要双引号,但其他语法错误也影响了我的结果。
可以通过多种方式将工作簿设置为变量。最简单的方法是按名称引用它,但您说过它每次都会更改,因此我建议循环浏览每个打开的工作簿,看看它是否看起来像您的数据工作簿。
老实说,我不知道你在用 R1 以及公式中的所有内容做什么,所以我将重点关注你有关获取工作簿的问题。
出于纯粹的幻想,假设您的数据工作簿将始终有一个名为“数据”的工作表,并且在“数据”上,A1 始终等于“ID”。
Function GetDataWorkbook() As Workbook
Dim wb As Workbook
For Each wb In Application.Workbooks
If LooksLikeDataWorkbook(wb) Then
Set GetDataWorkbook = wb
Exit Function
End If
Next wb
End Function
Private Function LooksLikeDataWorkbook(wb As Workbook) As Boolean
Dim sht As Worksheet
On Error GoTo Failed
Set sht = wb.Worksheets("The Data")
LooksLikeDataWorkbook = sht.Range("A1").Value = "ID"
Failed:
End Function
现在你可以像这样使用你的函数了。
Dim dataWb as Workbook
Set dataWb = GetDataWorkbook()
If Not dataWb Is Nothing Then
...some formula stuff here
Else
MsgBox "You need to open the data workbook."
End If