访问ListBox属性时无效的限定符错误

时间:2012-09-05 11:13:41

标签: vba ms-access

这里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不能理解lstName。是一个列表,从中可以找到选择的项目数。 我发现在VBA中“字符串不是对象,因此字符串变量上没有可以调用的方法”。

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

非常感谢任何帮助!

Edgaras

3 个答案:

答案 0 :(得分: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) ...

答案 1 :(得分: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")

答案 2 :(得分:1)

您需要将ListBox作为列表框传递给cmd Up程序

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
...