【发布时间】:2016-01-01 22:26:25
【问题描述】:
我正在使用带有 12 个列表框(编号为 2-13)的用户表单。每个列表框可以包含用户从主列表框 1 分配的 0-8 个项目。当按下按钮时,我运行以下代码将每个列表框(12 个框)的内容输出到工作表“托盘”。
然后将每个列表框从列 B-M 输出到每个托盘的相应列中。 Listbox2 填充每个托盘的第 1 列,依此类推。最多可装 4 个托盘。该代码检查每个托盘的第一个孔,如果它包含一个值,则假定托盘已满并开始填充下一个托盘。
问题:如果第一个托盘包含一个空白列(列表框)并且第二个托盘包含相同列表框中的值,则代码将使用应该在第二个托盘中的值填充第一个托盘的空白列。请看下面的图片和下面的更新代码:
托盘 1 的列表框 2,3 和 4(注意列表框 3 为空)
托盘 2 的列表框 2,3 和 4(注意 listbox3 有数据)
代码运行了两次:来自托盘 2 的 Listbox3 出现在托盘 1 中(错误!!!)
预期输出:
Sub Worklist()
'
Dim Var, VarName As Variant
Dim i, DblDashPos, FirstPeriodPos, lngColNum, lngRowNum As Long
Dim item As ListBox
Const cstrNames As String = "Listbox2,Listbox3,Listbox4,Listbox5,Listbox6,Listbox7,Listbox8,Listbox9,Listbox10,Listbox11,Listbox12,Listbox13"
Application.ScreenUpdating = False
lngColNum = 2
For Each VarName In Split(cstrNames, ",")
If UserForm2.Controls(VarName).ListIndex <> -1 Then 'if listbox is not blank
If Sheets("Tray").Cells(4, lngColNum).Value = 0 Then
'checks if value in row 3 column "lngColNum" is empty
lngRowNum = 4
ThisWorkbook.Sheets("Tray").Range("C2").Value = UserForm2.TextBox1.Value
ElseIf Sheets("Tray").Cells(15, lngColNum).Value = 0 Then 'checks if value in row 14 column "lngColNum" is empty
lngRowNum = 15
ThisWorkbook.Sheets("Tray").Range("C13").Value = UserForm2.TextBox1.Value
ElseIf Sheets("Tray").Cells(26, lngColNum).Value = 0 Then 'checks if value in row 14 column "lngColNum" is empty
lngRowNum = 26
ThisWorkbook.Sheets("Tray").Range("C24").Value = UserForm2.TextBox1.Value
Else 'otherwise assumes tray starts in row 5, column "lngColNum"
lngRowNum = 37
ThisWorkbook.Sheets("Tray").Range("C35").Value = UserForm2.TextBox1.Value
End If
For i = 0 To UserForm2.Controls(VarName).ListCount - 1
Var = UserForm2.Controls(VarName).List(i)
DblDashPos = InStr(1, Var, "--")
FirstPeriodPos = InStr(1, Var, ".")
Sheets("Tray").Select
ActiveSheet.Cells(lngRowNum, lngColNum) = Left(Var, DblDashPos - 1) & Right(Var, Len(Var) - FirstPeriodPos + 1)
lngRowNum = lngRowNum + 1
Next i
End If
lngColNum = lngColNum + 1
Next
Application.ScreenUpdating = True
End Sub
非常感谢!
【问题讨论】:
-
尝试将这一行:
If Len(Cells(3, lngColNum).Value) = 0 Then改为 IfCells(3, lngColNum).Value = "" Then。 -
它仍然认为 B3 和 B14 中有一些东西(尽管它们显然是空白的)并在 Tray3 中输出(该托盘的第一行是 25)这很奇怪,因为它 debug.prints 的值B14 甚至不在任何列表框中。
-
尝试使用您的工作表名称,例如
sheets("thesheetname").Cells(3, lngColNum).Value -
您的建议有所帮助,但我仍然遇到问题。谢谢