为什么我的VBA代码不起作用

时间:2017-12-02 17:55:17

标签: vba ms-access access-vba ms-access-2016

我有一个带有数字的列表框和一个按钮,我希望列表框显示您在另一个表单中选择的数字

示例我想从1到10购买一些键,如果我选择3我希望下一个表单显示你买了3个键

Private Sub List28_Click()
If Not IsNull([num of keys]) Then
Forms! [navigation forms].Form.[navigationsubform].Form.User = 
Me.Num_of_keys_Label
Forms! [navigation forms].Form.[navigationsubform].Form.User = Me.List28
End If
DoCmd.Close
EndSub

显示购买结果

我收到编译错误:无效使用属性

1 个答案:

答案 0 :(得分:2)

这不是VBS(Microsoft Visual Basic Sc​​ripting Edition)。它是VBA(Visual Basic for Applications)。 VBA是面向行的。如果要分割长行,则必须在行尾使用前面带有空格(_)的行继续符。

Forms! [navigation forms].Form.[navigationsubform].Form.User = _
    Me.Num_of_keys_Label

EndSub

中应该有一个空格
End Sub

此外,缩进代码使其更具可读性

Private Sub List28_Click()
    If Not IsNull([num of keys]) Then
        Forms![navigation forms].Form.[navigationsubform].Form.User = _
            Me.Num_of_keys_Label
        Forms![navigation forms].Form.[navigationsubform].Form.User = Me.List28
    End If
    DoCmd.Close
End Sub

您应该使用AfterUpdate事件。不是Click事件。选择新项目后会发生AfterUpdate

什么是[num of keys]?列表框的名称似乎是List28

List28是个坏名字。在创建事件方法之前重命名控件。这使代码更具可读性。例如。如果您将列表框重命名为lstNumbers,那么您将获得事件方法的发言名称,例如lstNumbers_AfterUpdate。类似btnCancel_Click的名称比Button17_Click更容易理解。

我不明白代码的逻辑。您将另一个表单的User控件(Label或TextBox?)设置为Me.Num_of_keys_Label,而不是您测试的[num of keys]非空。之后您立即将此值替换为Me.List28,这是根据您的评论(“点击按钮”),按钮。这一切都没有意义。

首先为控件和表单的名称添加前缀。 E.g。

TextBoxes的

txt,例如txtUser
btn用于按钮,例如,btnBuy
列表框的lst,例如,lstNumOfKeys
lbl代表标签,例如,lblResult
cbo用于组合框,例如,cboCountry
表格的frm,例如frmNavigation fsub用于子表单控件,例如fsubNavigation