excel vba listbox变量类型错过匹配

问题描述:

我一直在努力一段时间,将列表框传递给子。经过3天的搜索......我需要帮助。我的最终目标是在一个列表框中选择项目,然后单击按钮并将它移动到另一个列表框。这是迄今为止我尝试过的。excel vba listbox变量类型错过匹配

在用户窗体:

Private Sub CommandButton7_Click() 
Dim lbINDX As Integer 
Dim lbSource As String, lbDest As String 

lbINDX = ListBox3.ListIndex 
lbSource = Me.ListBox3.Name 
lbDest = Me.ListBox1.Name 
Call move(lbINDX, lbSource, lbDest) 

End Sub 

在用户窗体子我也尝试:(无。名称)lbSource & lbDest作为对象,控制,列表框,和msforms.listbox

在模块:

Private Sub move(itm As Integer, objTarget As String, objDest As String) 

txt = objTarget.ListIndex(itm).Text 
UserForm10.Controls(objTarget).RemoveItem Item:=itm 
UserForm10.Controls(objDest).AddItem txt 

End Sub 

在模块的子我也尝试:(有和没有Userform10.Controls())objTarget & objDest作为对象,控制,数组listB ox和msforms.listbox

如何通过变量传递整个列表框?还是有更简单的方法?

修订1响应Nathan_Sav:

Private Sub CommandButton7_Click() 
Dim lbINDX As Long 
Dim lbSource As MSForms.ListBox, lbDest As MSForms.ListBox 

lbINDX = ListBox3.ListIndex 
Set lbSource = Me.ListBox3 
Set lbDest = Me.ListBox1 
Call move(lbINDX, lbSource, lbDest) 

End Sub 

Private Sub move(lngIndex As Long, objSource As MSForms.ListBox, objDest As MSForms.ListBox) 

objDest.AddItem objSource.ListIndex(lngIndex).Text 
objSource.RemoveItem Item:=lngIndex 

End Sub 
+0

Appologies,我忽略了一个关键部分。我在“呼叫移动(lbINDX,lbSource,lbDest) – gde211

+0

第一个变种,itm需要很长时出现”类型不匹配“错误https://msdn.microsoft.com/en-us/library/office/ff193579.aspx它也需要像索引:= itm –

+0

@Nathan_Sav得到'长'部分,虽然我不知道为什么,但'像索引:= itm'扔我离开。这将去哪里?在模块或用户表单子? – gde211

我会做这样的,没有测试

Public Sub MoveEntry(cboSource As MSForms.ComboBox, cboDestination As MSForms.ComboBox, lngIndex As Long) 
    cboDestination.AddItem cboSource.ListIndex(lngIndex).Text 
    cboSource.RemoveItem Index:=lngIndex 
End Sub 

从Nathan_Sav一些帮助和另外一些修修补补之后我已经到了以下。尽管它满足了我的需要,但它并没有完成,因为它将值添加到目标列表框的底部,而不管有多少空白值(“”或null或其他值)。

在用户窗体

Private Sub CommandButton7_Click() 
Dim lbINDX As Long 
Dim lbSource As MSForms.ListBox, lbDest As MSForms.ListBox 

lbINDX = ListBox3.ListIndex 
Set lbSource = Me.ListBox3 
Set lbDest = Me.ListBox1 
Call Module1.MoveEntry(lbINDX, lbSource, lbDest) 

End Sub 

在模块 子MoveEntry(lngIndex只要,objSource作为MSForms.ListBox,objDest作为MSForms.ListBox) 昏暗TXT作为字符串

MsgBox objSource.Name 
txt = objSource.Value 
objDest.AddItem txt 
objSource.RemoveItem lngIndex 

End Sub 

按照现在的情况我当时只允许一个价值转移。我怀疑,如果列表框是多选的,那就需要进一步修改。

非常感谢Nathan的帮助。

如果有人可以请解释为什么这个工作,但其他的尝试没有请发表回答,所以我可以使它作为回答。