2012-09-05 49 views
1

此处lstName是Access窗体中的列表框的名称。无效限定符错误访问列表框属性

Private Sub cmdUp(lstName As String, SQLName As String, IDName As String, ColumnName As String) 
    Dim sText As String 
    Dim pText As String 
    'check: only proceed if there is a selected item 
    If lstName.ItemsSelected.Count = 1 Then 
    (...) 

调用程序后:

Call cmdUp(lstSchemaName.Name, "eo_ListSchema", "SchemaID", "SchemaName") 

我得到错误就这一行:

If lstName.ItemsSelected.Count = 1 Then 

错误是:

Invalid Qualifier 

所以基本上VBA不能understant是lstName 。是一个列表,它应该从中找到选择了多少项目。 我发现在VBA中“字符串不是对象,所以在你可以调用的字符串变量上没有方法”。

应该有一个简单的解决方案,但我找不到它。如何处理这类问题?

任何帮助,高度赞赏!

Edgaras

回答

1

lstName因为你已经通过它的只会是你的列表框,而不是实际列表框实例的字符串名称。

由于lstName是一个字符串,因此调用lstName.ItemsSelected无效。

您应该能够通过列表框在代替:

Private Sub cmdUp(lstBox As ListBox, SQLName As String, IDName As String, ColumnName As String) 
... 

然后使用称之为:

Call cmdUp(lstSchemaName, "eo_ListSchema", "SchemaID", "SchemaName") 
+1

非常感谢你! – edgarasb

1

你可以通过列表框的列表框,一个字符串不会有任何属性,也可以将字符串和表单对象,这可能是更安全的。

Call cmdUp(Me, lstSchemaName.Name, "eo_ListSchema", "SchemaID", "SchemaName") 

Private Sub cmdUp(frm as Form, lstName As String, _ 
    SQLName As String, IDName As String, ColumnName As String) 

    Frm(lstName) ... 
+0

哇,比我想象的容易。非常感谢你! – edgarasb

1

您需要用传递的ListBox作为Lsitbox cmdUp过程内

Private Sub cmdUp(lstName As ListBox, SQLName As String, IDName As String, ColumnName As String) 

或使用其名称查找适当的控件,如:

Dim myListBox As ListBox = Me.FindControl(lstName) 
if myListBox.ItemSelected.Count = 1 Then 
... 
+0

非常感谢你! – edgarasb