如何使一个函数使用工作表上的数据,函数写在?

时间:2018-03-29 04:40:51

标签: excel-vba vba excel

我用一个例子来解释我的问题。让我说我写这个函数,

Function Sums()

Sums = Cells(1, 1) + Cells(1, 2)

End Function

然后,假设我有两个电子表格,AB。如果我在A上刷新所有电子表格,电子表格B上的Sums()函数将使用电子表格A中的数据。如何使函数在电子表格上专门使用数据?

2 个答案:

答案 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)。如果这回答了问题,请告诉我