Addin函数,参考活动工作表

时间:2016-11-29 15:42:36

标签: excel vba excel-vba

我创建了一个具有1个功能区控件的插件,它在Access DB上执行SQL语句并粘贴结果,一个单元格在右侧。这非常有效。它被称为SubTest(c as iribboncontrol)我还有另一个名为GetData(arg1,arg2)的子,我打算在工作表中使用它,因为= GetData(" 01/02 / 2016",&# 34;打开")然后再一次向右,显示返回的自定义SQL。这一切都正常,直到粘贴hint({a:1, b:1})从功能区正常,但不是函数调用,我错过了一些简单的东西。

获得数据之后,仍会出现错误

ActiveCell.Offset(1, 1).CopyFromRecordset rstData

非常感谢

1 个答案:

答案 0 :(得分:3)

功能接受输入,返回值。它不能有副作用 1 。因此,您无法调用一个过程来改变从工作表单元as Scott Craner already mentioned调用的函数内的单元格值。

虽然有很多问题:

Public Sub get_data()
     ActiveCell.Offset(1,1).Value="TEST"
End Sub

依赖ActiveCell的代码意味着您有其他使用SelectActivate的代码。这会使您的代码非常脆弱且容易出错/错误,避免使用它们(see how)。

避免程序名称中的下划线;请改用PascalCase。这不仅仅是因为它的惯例和#34; - VBA将拒绝编译在接口成员名称中具有下划线的更高级代码;因此,即使您不使用接口和Implements关键字,也要养成避免成员名称下划线的习惯。在VBA中,下划线具有特殊含义,例如您可以在事件处理程序过程中看到:ObjectName_MemberName,例如Button1_Click

为他们所做的事情命名。 "获取数据"将是功能的名称,"得到"值[并返回]。一个Sub"得到"一些事情毫无意义。你的程序没有"得到"什么,它"设置"一个值,如果有的话。

从VBA代码调用的

1 Function程序肯定会产生副作用。事实是,在一个理想的世界里,他们不应该;使用过程代替副作用代码。 Excel工作表函数是纯函数,用户定义函数必需或多或少纯函数,否则它们只能&# 39;用于工作表。获取一些输入,计算一个值,返回该值:这是函数所有的。