2009-05-23 225 views
3

我在工作表中的单元格范围内有一个公式,这个公式的计算结果是数值。如何从传入函数的范围获取VBA中的数值?如何使用VBA从Excel中的公式获取单元格值?

比方说,在工作表中的前10行A列中包含RAND(),我传递一个作为参数传递给我的功能...

public Function X(data as Range) as double 

    for c in data.Cells 
     c.Value 'This is always Empty 
     c.Value2 'This is always Empty 
     c.Formula 'This contains RAND() 
    next 

end Function 

我打电话从细胞功能.. 。

=X(a1:a10) 

我该如何获得单元值,例如0.62933645?

Excel 2003中,VB6

+0

我做了一些快速的VBA代码,并得到了单元格Rand()的值;没问题。也许发布更多的代码,看看还有什么事情? – 2009-05-23 12:38:39

+0

理查德,没有更多的代码,就是这样... 我想要做的就是获取单元格值,它们都是“空的” – Simon 2009-05-23 12:40:12

+0

也请说明在哪些条件下使用该函数。特别是,在同一张表单上的单元格在使用它时有些活动,例如对话框或某些Excel功能(某些Range方法在某些情况下在Excel中不起作用)。 – GSerg 2009-05-23 13:17:31

回答

5

从VBA(Excel 2003中)运行时,下面的代码工作对我来说:

Public Function X(data As Range) As Double 

For Each c In data.Cells 
    a = c.Value  'This works 
    b = c.Value2 'This works too (same value) 
    f = c.Formula 'This contains =RAND() 
Next 

End Function 

a和b是相同的,等于什么我传递(其中是其中有Rand()的单元格的范围)。我不确定这里还有什么事情发生。

啊哈!你需要设置X,否?我不确定你期望这个函数做什么,但是你需要将X(函数的名字)设置为你想返回的值。添加此行:

X = a 
1

我无法使用您发布的布局复制问题。我发现你的发布代码中有一些语法错误(例如:“for”应该是“for each”)。但是,当我把= RAND()在A1:A10和= X(A1:A10)我得到了回报只是这个罚款:

Public Function X(data As Range) As Double 
    Dim c As Excel.Range 
    Dim sum As Double 
    For Each c In data.Cells 
     sum = sum + c.Value 
    Next 
    X = sum 
End Function 

然而,仅仅一个扩大多了几分几的其他问题你反对。您可以评估公式结果,像这样:

Public Function X(data As Range) As Double 
    Dim c As Excel.Range 
    Dim sum As Double 
    For Each c In data.Cells 
     sum = sum + Excel.Evaluate(c.Formula) 
    Next 
    X = sum 
End Function 

但一般来说,你不会想,因为这基本上是两次计算的值相同。

0

请确保您在请求值之前进行计算。

要在这种状态下,你必须强制计算的值将是可用之前加快宏类似下面的往往是预制..

'Set Reasonable default 
Application.CutCopyMode = False 
Application.ScreenUpdating = False 
Application.Interactive = False 
Application.Calculation = xlCalculationManual 

Public Function X(data As Range) As Double 
    'You may need the following as well 
    'Application.Calculate 
    Dim c As Range 
    For Each c In data.Cells 
     c.Calculate 
     c.Value 'This is now has a value 
     c.Value2 'This is now has a value 
     c.Formula 'This contains RAND() 
    Next 
End Function 
相关问题