如何从VBA向单元格写入数据

3

对于一个VBA新手来说,这似乎是一个愚蠢的问题,但我无法弄清楚如何在VBA中写入单元格... 我在“Module1”中有一个函数,看起来像这样:

Function Foo(bar As Boolean)
  Range("A1").Value = 1
  Foo = ...
End Function

然后,假设我将单元格A2的公式设置为:
=Foo(true)

如果我删除了范围设置行,调用本身就会起作用...在这种情况下,将调用单元格设置为foo值。但是我希望最终一次写入大量单元格,而不是为每个单元格调用不同的函数。我做错了什么??


如果此代码应按原样工作...是否有Excel 2007中可能阻止编辑单元格的设置之类的设置?


你的函数意图不是很明确。 - Fosco
你的函数中忽略了错误参数,这看起来很奇怪。这是你的完整代码吗? - Richard Fawcett
它不重要,我试图让它工作的是从VBA函数编写单元格,该函数对其他单元格范围的输入做出反应...为了清晰起见,我将删除所有不重要的内容。 - tbischel
+1,不过我希望标题能更具描述性。 - Jeremy Thompson
2个回答

2
根据这个页面的说法,Excel用户定义函数无法更改工作簿的其他部分。看起来你可能需要尝试其他方法。

这很令人失望...我的VBA将调用一个需要大量输入单元格并返回大量输出以在输出单元格范围内显示的外部DLL。我需要避免为每个单元格调用dll,同时仍然使得dll在每次更改输入时被调用。 - tbischel
在这种情况下,您可以使用Worksheet_Change事件。每当页面上的单元格更改时,都会引发此事件。该事件可用于更改其他单元格。 - Richard Fawcett
如果我使用Worksheet_Change事件将单元格写入同一工作表,会出现循环引用吗?或者我可以测试单个单元格的更改吗? - tbischel
1
将您的代码用 Application.EnableEvents = False 和 Application.EnableEvents = True 包围起来,这将阻止代码再次触发。如果您希望在代码内部测试单个单元格,还可以使用 Intersect。 - Richard Fawcett
看起来存在循环引用问题,而且更新仅在用户更改当前工作表上的值时才会发生,而不是从其他工作表驱动更新。 - tbischel
如果来自其他工作表的输入也是由该工作表的Worksheet_Change事件提供的,则如果禁用应用程序的事件,这可能会成为一个问题。不过我相信一定有方法可以解决它! - Richard Fawcett

0

若要在VBA中创建自定义函数,请在模块中输入以下内容:

Public Function MyCalc(ByRef r as Range) as Double
    MyCalc = r.Value^2
End Function

或者

Public Function MyCalc(ByVal x as Double) as Double
    MyCalc = x^2
End Function

并将其用作工作表上的=MyCalc(A2),以返回和设置适当的值。根据您想要执行的操作选择是传递值还是范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接