如何将Excel VBA变量分配给定义的名称

时间:2015-10-05 18:04:39

标签: excel vba function excel-vba

如何将值从VBA函数变量返回到Excel 2010中的定义名称?

在下面的示例中,我希望i作为定义名称Value_Count返回到Excel,可以在其他公式中重复使用,这样如果MsgBox显示7,则输入单元格中的=Value_Count也会返回7.

下面的其他所有内容都是关于我尝试过的,以及我为什么要这样做。如果这是不可取的,我会很高兴知道为什么,如果有更好的方法。

Function process_control_F(raw_data As Variant)
Dim i As Integer
    i = 0
For Each cell In raw_data
    i = i + 1
    Next cell
MsgBox i
End Function

我的目标是将MsgBox返回的值返回给可以在其他论坛中重用的定义名称。但是,我无法得到显示的价值。我尝试了各种各样的形式(太多无法回忆,更不用说在这里打字了)类似于

Names.Add Name:="Value_Count", RefersTo:=i

我试图在没有向单元格返回大量额外信息的情况下完成此操作,只是为了回忆它,因此希望直接返回到定义名称。

我使用的是Function而不是Sub来简化我的使用,但如果这是问题,我肯定可以改变类型。

我正在创建统计控制图的版本。我期望的最终结果是捕获数据范围(通常约336个值)并对它们应用一系列控制规则(通过VBA),然后将任何超出控制参数的值返回到可以被绘制的定义名称或否则操纵。

我已经看过(并且有各种版本的)电子表格,通过数字英亩的辅助列来实现这一目标,从而产生图表和摘要统计数据。我试图主要在VBA的背景下完成它,通过定义名称调用图表 - 我无法从VBA获取值到图表。

使用Function而不是Sub的兴趣是简化对它的访问。我宁愿不设计用户界面(或使用一个),如果我只是将功能键入一个单元格并直接访问结果。然而,正如Jean-FrançoisCorbett所指出的那样,这很快就会变成一条通往我目标的迂回路线。但是,我仍然认为这是值得的,因为从长远来看,我需要对此分析进行大量迭代,因此一些设置时间对于将来节省的时间是值得的。

1 个答案:

答案 0 :(得分:2)

对您的功能进行微小更改后,您可以使用其返回值来完成您想要的任务:

Function process_control_F(raw_data As Variant) As Integer ' <~~ explicit return type
    Dim i As Integer
    Dim cell As Variant ' <~~~~ declare variable "cell"
    i = 0
    For Each cell In raw_data
        i = i + 1
    Next cell
    process_control_F = i ' <~~~~ returns the value i
End Function

然后,您可以在公式中使用该函数。例如:

enter image description here