2017-09-13 138 views
1

我想在Excel文档的vba代码中声明变量并在单元格中使用它。声明VBA变量并在Excel的工作表中使用它

事情是这样的:

VBA代码:

Dim foo as Integer 
foo = 2 

Excel单元格(任意)

=foo 

这可能吗?

+1

不使用它,除非你想使用[无模式]的(HTTPS那是不可能的://stackoverflow.com/a/16860597/1153513)和可能不可见的'userform'。您只能在表格中存储值(如果需要,可以隐藏它们)。单元格可以用作命名范围,然后可以使用'= foo'来引用它们。然而,价值必须在一个单元格中(再次)。 – Ralph

+0

好的。非常感谢你! –

+1

你有点儿可以。如果你在一个模块中创建一个'Public' UDF,那么你就可以从你的单元调用这个UDF,就像调用其他任何函数一样......也就是说你的模块中有一个名为'GetFoo'的UDF。在你的单元格中输入'= GetFoo()',你的单元格将显示你的UDF返回的值。您的问题在于,只有在您最初调用该功能时才会触发。如果你然后改变'GetFoo'中的返回值,单元格不会被更新,除非你再次触发它。 – Zac

回答

2

您可以在代码模块

Public Function Foo() As Integer 
    Foo = 2 
End Function 

声明公用函数在某小区

=Foo() 
+0

:)伟大的思想和所有这一切。问题仍然是这些UDF必须在初始调用后触发以更新值 – Zac

+2

您可以将函数设置为“易失性”,以便在每次执行计算时计算它。 (或者有时我将'Now()'的虚拟变量传递给函数来实现同样的事情 - 所以'= Foo(Now())'作为公式,'Public Function Foo(d As Date)As Integer'作为程序声明[我通常只会在我懒得写出正确的代码时才这样做,例如一个快速而肮脏的一次性任务。]) – YowE3K

+1

虽然这对于这个问题来说当然是一个可行的解决方案,但我仍然觉得不得已指出[volatile UDF](https://msdn.microsoft.com/en-us/library/office/bb687891.aspx#sectionSection2)会严重降低Excel文件的性能。此外,你可能想阅读这篇文章:https://stackoverflow.com/questions/24353506/non-volatile-udf-always-recalculating – Ralph

相关问题