【问题标题】:VBA how to write to/modify cells in a functionVBA如何写入/修改函数中的单元格
【发布时间】:2019-11-27 03:04:17
【问题描述】:

我很惊讶这样一个简单的功能似乎在 VBA 中不受支持。假设我想将值 0.5 写入 函数 内的单元格 E7(不是子!):

Public Function writeToCell() As Integer
    ActiveSheet.Range("E7").Value = 0.5
    writeToCell = 0
End Function

而当我在另一个单元格中调用writeToCell函数F9时,出现值错误,写入语句执行失败。

为什么我们不能写入函数内的单元格?有什么解决方法吗?我的问题是我将写入一些预先指定的单元格的值取决于函数内部计算的一些中间结果。因此,当我从工作表中的目标单元格调用该函数时,我将不得不写入该函数内的单元格。

【问题讨论】:

  • 这听起来与 Excel 的想法很矛盾,而且性能损失会很严重,因为每次工作表重新计算时都会写入单元格。
  • 以@PatrickHonorez 的评论为基础,如果您只使用按下按钮(或热键)时触发的 sub 可能会更好。 UDF 并非真正设计用于编辑其他单元格
  • @PatrickHonorez 我会说每次刷新时重新计算是 Excel 的功能,例如允许在更新参数时进行“实时”监控。除此之外,我永远不会将 Excel 用于任何数据分析任务,因为 VBA 及其原生编辑器使用起来非常难看......
  • @TimStack 是的,我正在考虑这个问题。按钮+sub 更容易,虽然不够健壮。
  • 不健壮?就是这样。您甚至可以利用Selection_ChangeWorksheet_Change 事件或Application.OnTime 来使更新自动且更频繁

标签: excel vba


【解决方案1】:

可能的,虽然与采用传统方式(即不通过 UDF)时略有不同

Function writeToCell() As Integer
    Evaluate "performwrite(" & Range("E7").Address(0, 0) & ")"
    writeToCell = 0
End Function

Sub performwrite(dest As Range)
    dest.Value = 0.5
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2015-09-01
    相关资源
    最近更新 更多