通过多选列表框值循环创build并命名工作簿

列表框不会将选定的值分配给“n”。 无论我是否从列表框中select值,“n”值是0。 我正在学习,所以这可能是简单的,我错过了…build议? 谢谢!

Private Sub UserForm_Initialize() With cbomonth .AddItem "January" .AddItem "February" End With With cboyear .AddItem "2013" .AddItem "2014" End With With cboteam .AddItem "Team1" .AddItem "Team2" End With With cbodocument .AddItem "Task1" .AddItem "Task2" End With With ListBox1 .AddItem "Name" .AddItem "Name" End With cboteam.ListIndex = 0 cboyear.ListIndex = 4 cbomonth.ListIndex = 6 cbodocument.ListIndex = 1 End Sub Private Sub cmdSubmit_Click() Dim year As String Dim month As String Dim days As Integer Dim team As String Dim n as Long Dim tallboxynames As Variant Dim tallynewfile As String Unload Me year = cboyear.Value month = cbomonth.Value team = cboteam.Value document = cbodocument.Value TallyPath = "\\network path\Tally of orders\Master Template\" TallyPath1 = "\\network path\Tally of orders\" & year & "\" TallyPath2 = "\\network path\Tally of orders\" & year & "\" & month & "\" TallyTemplate = "Tally_Template_ver1.xls" If document = "Tally Sheets" Then For n = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(n) Then tallynewfile = ListBox1.Selected(n) & ".xls" Else MsgBox "No data from listbox" End If If Len(Dir(TallyPath1, vbDirectory)) = 0 Then MkDir TallyPath1 End If If Len(Dir(TallyPath2, vbDirectory)) = 0 Then MkDir TallyPath2 FileCopy TallyPath & TallyTemplate, TallyPath2 & tallynewfile End If Next n End If Exit Sub End Sub 

Unload Me移动到过程的末尾

 Private Sub cmdSubmit_Click() ' code here ... Unload Me End Sub 

要获取所选项目,请使用如果ListBox1.MultiSelect = 0 (fmMultiSelectSingle)的值:

 Me.ListBox1.Value 

如果MultiSelect> 0,则使用Selected属性 ,例如:

 Private Function GetSelectedItems() As String Dim text As String Dim i As Integer For i = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.Selected(i) Then text = text & Me.ListBox1.List(i) & vbNewLine End If Next i MsgBox "Selected items are: " & text GetSelectedItemsText = text End Function 

代替

 Unload Me 

尝试使用

 Me.Hide 

当你unload表单上的所有值都被删除。 如果你使用Hide他们会被保留。