【问题标题】:Writing Value to a Cell which is not calling the function, via VBA Function通过 VBA 函数将值写入未调用函数的单元格
【发布时间】:2016-09-12 15:33:56
【问题描述】:

我想知道是否可以通过 VBA 函数将值写入 Excel 中的单元格?

以下函数中的任何一行都不会调用:

Function OffsetValue(myinput As Double) As Double
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = myinput
    Call OffsetValueSub(myinput)
End Function

Sub OffsetValueSub(myinput As Double)
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = myinput
End Sub

但是下面的 Dummy Sub 可以正常工作:

Sub Dummy()
    Call OffsetValueSub(100)
End Sub

Sub OffsetValueSub(myinput As Double)
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = myinput
End Sub

是否需要做一些事情才能写入一个不是调用特定函数的单元格的单元格?

【问题讨论】:

标签: vba excel function


【解决方案1】:

这种解决方法可能对您有用:

将您的 OffsetValue 函数缩短为:

Function OffsetValue(myinput As Double) As Double
    OffsetValue = myinput '<--| this will trigger worksheet 'Change' event
End Function

将以下子代码放置在您要使用Function OffsetValue() 的工作表的代码窗格中:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ExitSub
    Application.EnableEvents = False
    Call OffsetValueSub(Target.Value) '<--| call 'OffsetValueSub()' and write input value where it has to
    Target.ClearContents '<--| should you ever want to erase any trace of the OffsetValue function
ExitSub:
    Application.EnableEvents = True
End Sub

如果您不想从您写入的单元格中删除对OffsetValue() 的调用,那么只需删除/评论Target.ClearContents

这只是您可能想要增强的基本代码:

  • 对传入Worksheet_Change()Target 范围进行一些检查

    您可能想检查它是否匹配特定的 Value(例如:检查 Target.Value 与某个值范围)或 Range(例如:检查 Target 范围本身属于预定义的Range) 标准

  • 在整个工作簿中处理相同的需求

    那么您必须切换到在 ThisWorkbook 代码窗格中使用的 Sub ThisWorkbook_Change() 事件处理程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-27
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多