2017-11-10 30 views
0

试图查看这个,但我仍然是VBA的新手,仍然很困惑。我无法弄清楚如何从一个子变量中获取变量并在另一个子变量中使用它。如何从模块中的子变量中使用变量,并在用户窗体的另一个子功能中使用Excel VBA

我想从GetListBox1Items获取变量ListBox1Items并在cbSave_Click中使用它。我一直收到Set oNewRow = Selection.ListObject.ListRows.Add(1)的错误。我试过Dim ListBox1Items As StringPublic ListBox1Items As String但这没有帮助。

是否子模块的位置? GetListBox1Items在模块中。 cbSave_Click位于UserForm中。

我抬头看着使用类型,但它变得混乱。

Private Sub cbSave_Click() 
Dim oNewRow As ListRow 
Dim rng As Range 
Set rng = ThisWorkbook.Worksheets("Creatures").Range("MonsterList") 
Set oNewRow = Selection.ListObject.ListRows.Add(1) 


With ws 

Call GetListBox1 

oNewRow.Range.Cells(1, 24).Value = Me.StatBox1.Value 
oNewRow.Range.Cells(1, 35).Value = ListBox1Items 

End With 
End Sub 

和GetListBox1是

Sub GetListBox1() 
Dim SelectedItems As String 
Dim ListBox1Items As String 


With MonsterMaker 
    For i = 0 To .ListBox1.ListCount - 1 
     If .ListBox1.Selected(i) = True Then 
      SelectedItems = SelectedItems & .ListBox1.List(i) & ", " 
     End If 
    Next i 

    ListBox1Items = Left(SelectedItems, Len(SelectedItems) - 2) 


End With 
End Sub 
+0

您需要将其设为全局变量。一些指针https://stackoverflow.com/questions/2722146/how-do-i-declare-a-global-variable-in-vba – QHarr

+0

你可以让GetListBox1函数返回ListBox1Items的值 – mooseman

+0

尝试设置全局变量在用户窗体和模块中,但仍然出现'Set oNewRow = Selection.ListObject.ListRows.Add(1)'错误。 – bigbucky

回答

0

采取按照抽象的例子:

标准模块的代码:

Option Explicit 
Public ListBoxItems As String 'GLOBAL 

Sub GetListBoxItems() 

    Dim selectedItems As String 
    Dim i as long 

    With ThisWorkBook.Worksheets("Sheet1").OLEObjects("ListBox1").Object 'amend as appropriate 
     For i = 0 to .ListCount-1 
      If .Selected(i) Then 
       selectedItems = selectedItems & .List(i) & ", " 
      End If 
     Next i 
     ListBoxItems = Left$(selectedItems,Len(selectedItems)-2) 
    End With 

End Sub 

在用户窗体代码:

Private Sub cbSave_Click() 
    Call GetListBoxItems 
    Debug.Print ListBoxItems 
End Sub 
+0

无法正常工作。仍然收到错误'Set oNewRow = Selection.ListObject.ListRows.Add(1)' – bigbucky

+0

$ left之后会做什么?我无法找到记录。 – bigbucky

+0

这个例子是一个抽象的例子,向你展示如何传递变量?例如,我不知道MonsterMaker是什么。并且以下语法是否正确? Selection.ListObject.ListRows.Add(1) – QHarr

相关问题