我正在尝试将列表框传递给另一个子来填充它,这是为了允许多个列表框通过传递列表框的名称和表的名称(检查是否输入)来使用相同的代码是有效的)到子。目前,当您将鼠标悬停在下面的代码中时,me.Autoclavelist(这是此特定表单上列表框的名称)显示为“null”。
1)实际期望输入的列表框对象是什么?
2)即使发送了null,子类1和2似乎也能正常工作 - 但使用.removeitem的类似代码却没有(3& 4)为什么会这样?
谢谢!
编辑:我在这里找到了问题 - 我已将列表框锁定在表单上。这意味着无法选择其中的任何项目,因此值始终为null,因此后两个潜艇失败。
Sub 1:
Private Sub cmdAutoClaveAddItem_Click()
On Error GoTo Errorhandler
Call AddtoList(Me.AutoClaveList, "[Autoclave Process]")
If Me.AutoClaveList.ListCount <> 0 Then
Me.cmdRunAutoclave.Enabled = True
Me.CmdRemoveItem.Enabled = True
End If
SubExit:
Exit Sub
Errorhandler:
MsgBox Error$
Resume SubExit
End Sub
Sub 2:
Private Sub AddtoList(ListName As Listbox, FormName As String)
On Error GoTo Errorhandler
Dim StrLabel_Id As String
Dim l As Long
ListName.RowSourceType = "Value List"
StrLabel_Id = InputBox("Scan Tray Label", "Scan")
If StrLabel_Id = "" Then
GoTo SubExit
Else
If Not IsNull(DLookup("[Tracking_Label_ID]", "Label_Production", "[Tracking_Label_ID]='" & StrLabel_Id & "'")) Then
If IsNull(DLookup("[Tracking_Label_ID]", FormName, "[Tracking_Label_ID]='" & StrLabel_Id & "'")) Then
l = 0
For l = 0 To (ListName.ListCount - 1) Step 1
If ListName.ItemData(l) = StrLabel_Id Then
Call MsgBox("Label is already in batch!", , "Error")
GoTo SubExit
End If
Next
ListName.AddItem StrLabel_Id
Else
Call MsgBox("Label has already been processed", , "Error")
End If
Else
Call MsgBox("Label does not exist. Make sure you create label in Label Production", , "Error")
End If
End If
SubExit:
Exit Sub
Errorhandler:
MsgBox Error$
Resume SubExit
End Sub
Sub 3:
Private Sub CmdRemoveItem_Click()
On Error GoTo Errorhandler
Call RemovelistItem(AutoClaveList)
SubExit:
Exit Sub
Errorhandler:
MsgBox Error$
Resume SubExit
End Sub
Sub 4:
Private Sub RemovelistItem(ListName As Listbox)
On Error GoTo Errorhandler
Dim strRemoveItem As String
If Not IsNull(ListName.Value) Then
strRemoveItem = ListName.Value
ListName.RemoveItem (strRemoveItem)
Else
GoTo SubExit
End If
SubExit:
ListName.Requery
Exit Sub
Errorhandler:
MsgBox Error$
Resume SubExit
End Sub
答案 0 :(得分:1)
不要担心Null
。对象存在并且很好。 ListBox
个对象的默认属性为Value
;因此,Value
的值是鼠标悬停在Me.AutoClaveList
上时显示的值。它的Value
恰好是Null
(默认情况下是这样):
Null表示项目处于空状态,既未选中也未清除。
有关详细信息,您可以在“本地”窗口中查看ListName
及其属性。
当然,如果你这样做:
If Not IsNull(ListName.Value) Then
'do stuff
Else
GoTo SubExit
End If
然后它“将无效”,即不会做任何事情,因为.Value
是Null
。摆脱这种状况。