我用一个例子来解释我的问题。让我说我写这个函数,
Function Sums()
Sums = Cells(1, 1) + Cells(1, 2)
End Function
然后,假设我有两个电子表格,A和B。如果我在A上刷新所有电子表格,电子表格B上的Sums()函数将使用电子表格A中的数据。如何使函数在电子表格上专门使用数据?
答案 0 :(得分:1)
此处的问题是,在使用Cells(1, 1)
或Range("A1")
而未指定哪个工作表时,Excel会开始猜测您的工作表。猜测的结果可能不同。
模块中的代码:
当代码在模块中时,它假定您的意思是ActiveSheet
(代码运行时位于顶部的工作表)
表格中的代码:
当代码在工作表中时,它假定您的意思是代码所在的工作表。
因此,我们看到任何Cells(1, 1)
或Range("A1")
而未指定工作表是一点乐透。
这里的下一个问题是Sums()
函数无法知道它写在哪个工作表上,除非你将单元格作为参数放在一个范围内:
Public Function Sums(Rng As Range) As Double 'specify a return type here
Sums = Application.WorksheetFunction.Sum(Rng)
End Function
所以你可以在像=Sums(A1:B1)
另一个优点是您不需要按重新计算,因为它会监视给定范围Rng
中的值是否已更改并自动重新计算。
注意:函数应始终使用为函数指定的参数,而不是直接访问工作表。否则,该函数可能会显示错误的值(除非您使其不稳定)。
答案 1 :(得分:0)
我不是100%肯定你在问什么。但这是猜测:确保始终(完全)定义您的工作表。
Function Sums()
Dim wb as Workbook
Dim ws as Worksheet
Dim ws2 as Worksheet
Dim sum as Integer
Set wb = Application.ActiveWorkbook
Set ws = wb.Worksheets("Sheet1")
Set ws2 = wb.Worksheets("Sheet2")
'now you defined your worksheets and always know which cells you're referring to
sum = ws.Cells(1, 1) + ws2.Cells(1, 2)
End Function
此外,我通常建议使用范围,而不是单元格(x,y)。如果这回答了问题,请告诉我