2016-01-13 51 views
0

我一直在努力一段時間,將列表框傳遞給子。經過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

回答

0

我會做這樣的,沒有測試

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 
0

從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的幫助。

如果有人可以請解釋爲什麼這個工作,但其他的嘗試沒有請發表回答,所以我可以使它作爲回答。