我正在研究面向对象的Excel加载项以从我们的ERP系统的数据库中检索信息。下面是一个函数调用的例子:函数返回一个包含返回类的函数的类
itemDescription = Macola.Item("12345").Description
马科拉是一类需要的数据库访问护理的一个实例。 Item()是Macola类的一个函数,它返回一个ItemMaster类的实例。 Description()是ItemMaster类的一个函数。这一切都正常工作。
项目可以被存储在多个位置,所以我的下一步就是要做到这一点:
quantityOnHand = Macola.Item("12345").Location("A1").QuantityOnHand
位置()是ItemMaster类返回ItemLocation的一个实例的功能类(理论上来说,无论如何)。 QuantityOnHand()是ItemLocation类的一个函数。但由于某种原因,ItemLocation类甚至没有初始化。
Public Function Location(inventoryLocation As String) As ItemLocation
Set Location = New ItemLocation
Location.Item = item_no
Location.Code = inventoryLocation
End Function
在上面的示例中,变量item_no是ItemMaster类的成员变量。
奇怪的是,我可以在非类模块中成功实例化ItemMaster类之外的ItemLocation类。
Dim test As New ItemLocation
test.Item = "12345"
test.Code = "A1"
quantityOnHand = test.QuantityOnHand
有什么方法可以使我的工作方式符合我的要求吗?我试图尽可能简化API。所以它只需要一行代码来检索一个值。
我知道这是用来展示问题的示例代码,所以你可能已经意识到了这一点,但那些不应该谷歌的“得墨忒耳定律”... – jtolle 2010-03-27 21:29:33
你怎么知道“..出于某种原因,ItemLocation类甚至没有被初始化。“ ?? – RBarryYoung 2010-03-27 21:44:17
@jtolle - 我没有在这里遮住任何东西。我搜索了“德米特法”,但不知道你认为我的代码有什么问题? @RBarryYoung - 我在ItemLocation类的Class_Iizeize中有一些代码来打印调试消息。没有消息=没有初始化。 – Scott 2010-03-27 23:07:10