通过VBA函数

时间:2016-09-12 05:33:09

标签: excel vba excel-vba function

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

以下函数中的Aka都不会调用:

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

是否有必要做的事情是能够写入不是调用特定功能的单元格的单元格?

1 个答案:

答案 0 :(得分:0)

可能这种解决方法可以为您做到:

将您的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

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

  • 检查传入Target

    Worksheet_Change()范围

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

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

    然后你必须在ThisWorkbook代码窗格中切换到Range事件处理程序