Excel 2010 VBA用户书写函数输入参数的修改

时间:2013-03-07 14:26:01

标签: excel-vba vba excel

我对Excel 2010 VBA有疑问。完成了大量的搜索解决方案,但答案并没有解决我的问题。希望stackoverflow社区能够为我提供一些启示。

我有一个用户编写的函数,可以从工作表中的单元格调用。它用两个参数调用 - 两个单元都放在同一张纸上。

该函数的目的是检查两个参数,并根据函数的值返回一个字符串作为函数的结果。

到目前为止,这些功能按预期工作。

但是,如果第一个参数的值具有特定值,我希望能够更改第二个参数的值。这是我被卡住的地方。我找不到任何方法来改变它的价值。

我试过将参数设置为所需的值,但这会导致错误。 我以为我可以设置一个指向活动工作表的指针,因此也就是单元格,但我不知道它的参考是什么(因为工作表上会有很多)。

说实话,我不确定我能做我需要的事情。我们将非常感激地对未来前进的任何想法或意见。

关于

格雷厄姆琼斯

2 个答案:

答案 0 :(得分:1)

由于用户定义的函数(UDF)无法更改工作簿/工作表等的状态。您可以使用工作表更改事件。

将此代码复制到您输入功能的工作表

    Private Sub Worksheet_Change(ByVal Target As Range) 
Application.EnableEvents=False
     if Target.Address = "$A$1" and target.count = 1 Then ' change in first parameter - first parameter
       if Target.Value ="something" then    Range("B1").Value ="change"
         '$A$1 is the location of fist paramenter
         'range("b1") is second parameter on assumption
      end if
   Application.EnableEvents=True
    End Sub 

答案 1 :(得分:0)

作为一般规则,您不希望Excel函数更改其输入。我之前已经做过,但是这被认为是非常糟糕的做法。

更可接受的方式是制作一个计算第二个参数的函数 - 这将需要2个输入:

  1. 第一个参数
  2. 第二个参数的默认值
  3. 然后你使用该结果来计算工作表中的第二个参数(换句话说,不是让包含你的第二个参数的单元格只是一个设定值,现在通过这个函数来计算)然后你的原始函数可以像往常一样工作,第二个参数始终是预期值。

    我希望这是有道理的 - 如果没有,请告诉我,我会提供一个例子。