2012-07-05 46 views
0

我一直在试图建立在VBA子程序我访问应用程序:VBA MS Access 2010如何调用对象的子程序?

Public Sub addProduct(ByRef Product As Product, AsFoo As Integer, Optional Mutual As Boolean = True) 
    Products.Add (Product) 

    If (Mutual) Then 
     Select Case AsFoo 
      Case 0 
       Product.setProjectmanager = Me 
      Case 1 
       Product.setVIP1 = Me 
      Case 2 
       Product.setVIP2 = Me 
      Case 11 
       Product.setVIP1A = Me 
      Case 22 
       Product.setVIP2A = Me 
     End Select 
    End If 
End Sub 

一个人应该给定的产品只需添加到产品的集合,并设置参照用户参考,如果是互助真正。

一个人应该工作...问题是,我不知道如何调用 我目前的尝试是:

User.addProduct(Product, 0, True) 

但IDE想在年底有=所以我认为这会工作:

User.addProduct(Product, 0, True) = Product 

但是,这会导致编译错误: Expected function or Variable

+0

您需要声明为公共函数:public sub不返回值或对象。 – Trace 2012-07-05 12:51:01

+0

但我不想返回一些东西,它应该只是将该产品添加到该用户的集合中。有没有办法实现这个? – Oli 2012-07-05 12:54:37

+0

因为'Me'是一个对象,所以在分配'Product.setProjectmanager = Me'时不需要使用'Set'? – Gaffi 2012-07-05 12:57:30

回答

1

尝试调用与该行:

User.addProduct Product, 0, True

Call User.addProduct(Product, 0, True)

取出()或使用Call关键字应该为你工作。

+0

非常感谢,这就是我的问题的答案。 – Oli 2012-07-05 21:11:59

1

我不知道如果这是你想做的事,但如果是添加类实例的集合,我建议是这样的:

Sub Main_sub() 

dim colProduct as Collection 
dim cProduct as clsProduct 
dim asFoo as integer  
dim Mutual as boolean 


set colProduct = new collection 
set cProduct = new clsproduct 

asFoo = ? 'Define 
Mutual = ? 'Define 

'if the AddProduct function resides in the clsProduct class: 
set cProduct = cproduct.AddProduct(cProduct, asFoo, Mutual) 
colProduct.add cProduct 

set cProduct = nothing 
set colProduct = nothing 

end sub 

而对于私人产品类的属性Projectmanager, VIP1,VIP2,VIP1A,VIP2A

Public function addProduct(cProduct as clsProduct, AsFoo As Integer, Optional Mutual As Boolean) as cProduct 

      If (Mutual) Then 
       Select Case AsFoo 
       Case 0 
        cProduct.Projectmanager = Me 
       Case 1 
        cProduct.VIP1 = Me 
       Case 2 
        cProduct.VIP2 = Me 
       Case 11 
        cProduct.VIP1A = Me 
       Case 22 
        cProduct.VIP2A = Me 
       End Select 
      End If 
set addProduct = cProduct 
End Sub 

您在类模块中声明属性是这样的:

Private pVIP1 as <Type> 

和getter/setters:

Public Property Get VIP1() As <Type> 
    VIP1 = pVIP1 
End Property 

Public Property Let VIP1(tVIP1 As <Type>) 
    pVIP1 = tVIP1 
End Property 

如果类型是一个对象,则需要使用SET而不是LET。

Public Property SET VIP1(tVIP1 As <Type>) 
    SET pVIP1 = tVIP1 
End Property 

也许我的意图是错误的,因为我没有看到为每个案例添加Me的目的。但这是我能想到的最好的。

+0

我遗漏了一个循环来在集合中添加多个类对象实例。 – Trace 2012-07-05 13:13:54

+0

好的,在你的情况下,集合被称为“用户”。 – Trace 2012-07-05 13:15:34

+0

哇,谢谢,这可以帮助我很多,我只是习惯了VBA,我的java经验dosent相当有帮助^^ – Oli 2012-07-05 21:11:49