【问题标题】:how to write to a cell from VBA如何从 VBA 写入单元格
【发布时间】:2010-11-17 03:01:24
【问题描述】:

即使对于 VBA 新手来说,这似乎也是一个愚蠢的问题,但我不知道如何在 VBA 中写入单元格...我在“Module1”中有一个如下所示的函数:

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

然后说我将单元格 A2 的公式设置为:

=Foo(true)

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


如果此代码应按原样工作... Excel 2007 中是否存在可能阻止编辑单元格或类似内容的设置?

【问题讨论】:

  • 不清楚你打算用这个函数做什么..
  • 忽略函数中的错误参数似乎很奇怪。这是你的完整代码吗?
  • 这并不重要,我要做的只是从 VBA 函数中写出单元格,该函数对来自一系列其他单元格的输入做出反应......我会拿出所有不'为了清晰无关紧要
  • +1,但我希望标题更具描述性

标签: excel vba


【解决方案1】:

根据this page,Excel 用户定义函数无法更改工作簿的其他部分。看来您可能不得不尝试其他方式。

【讨论】:

  • 这令人失望......我的 vba 将调用一个需要大量输入单元格的外部 dll,并返回大量输出以显示在一系列输出单元格中。我需要避免为每个单元格调用 dll ......同时仍然会在输入更改时调用 dll。
  • 在这种情况下,您可以使用 Worksheet_Change 事件。每次页面上的单元格更改时都会引发此事件。此事件可用于更改其他单元格。
  • 如果我使用 Worksheet_Change 事件将单元格写入同一个工作表,我会得到循环引用吗?或者我可以测试单个单元格的变化吗?
  • 用 Application.EnableEvents = False 和 Application.EnableEvents = True 包围您的代码,这将阻止代码再次触发。如果您愿意,您还可以使用 Intersect 在代码中测试单个单元格。
  • 因此看起来循环引用和更新都会出现问题,仅当用户更改当前工作表上的值时才会发生,而不是从其他工作表驱动更新。
【解决方案2】:

要在 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) 返回并设置适当的值。选择是否要传递值或范围,具体取决于您要执行的操作。

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 2019-11-27
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多