VBA列表框更新



我有下面的VBA代码来更新零件用户表单列表框的长列表(1000(,并不断更改设计。我需要以下两个问题的帮助,我面临的代码,1( 不知何故,它只更新多选列表框下的第一个选定项目。您能帮助检查它的问题吗?通过命令按钮更新所有选定的项目?此外,我还想更新一些重复项。但是,下面的代码只更新一个,而不更新其他重复的代码。你能帮我更正代码,这样它也可以更新重复的代码吗?

Private Sub cmdaction_Click()
Dim t, t1 As String
Dim vrech As Range, lColumn As Range
Dim sh As Worksheet
Dim i As Long
Dim selItem As String

Set sh = ThisWorkbook.Sheets("part bump")
Set lColumn = sh.Range("P1:AZA1").Find(Val(txtchangenumber.Value), , xlValues, xlWhole)
'Set lcolumn1 = sh.Range("F4:F1000")

If UserForm3.txtchangedescrption.Value = "" Then
MsgBox "Please enter Change Description"
Exit Sub
End If
If UserForm3.txtchangenumber.Value = "" Then
MsgBox "Please enter Change Number"
Exit Sub
End If
If UserForm3.cmbaction.Value = "" Then
MsgBox "Please Select part Action"
Exit Sub
End If

If lColumn Is Nothing Then
MsgBox "Change number not found"
Exit Sub
End If


With UserForm3.lstDatabase
For i = 0 To UserForm3.lstDatabase.ListCount - 1
If UserForm3.lstDatabase.Selected(i) = True Then
Set vrech = sh.Range("H4:H250").Find(.Column(7, i), , xlValues, xlWhole)
If Not vrech Is Nothing Then
Select Case cmbaction.Value
Case "RP"
t = Chr(Asc(Mid(.List(i, 7), 2, 1)) + 1)
t1 = Mid(.List(i, 7), 1, 2) & t & Mid(.List(i, 7), 4, 1)
Intersect(vrech.EntireRow, lColumn.EntireColumn) = t1
MsgBox "Selected parts 'RP' Action completed"
Case "RV"
Intersect(vrech.EntireRow, lColumn.EntireColumn) = .List(i, 7)
MsgBox "Selected parts 'RV' Action completed"
Case "DP"
Intersect(vrech.EntireRow, lColumn.EntireColumn) = "Deleted"
vrech.EntireRow.Font.Strikethrough = True
MsgBox "Selected parts 'DP' Action completed"

End Select
End If
End If

Next i

End With
End Sub

经过进一步调查,我发现您对Selected属性的处理是正确的。我已经删除了我在这方面的建议,并为我的草率评论道歉。

我也重新检查了你的代码,很遗憾,我找不到它不应该处理所有选定项目的原因。如果无法访问您的工作簿,我将无法进行测试,也无法进一步帮助您。

您的第二次投诉是由这一行代码引起的。

Set vrech = sh.Range("H4:H250").Find(.Column(7, i), , xlValues, xlWhole)

它将找到第一个实例,而不会找到其他实例。如果希望重复搜索,则需要一个循环来重复搜索。查找";VBA查找&FindNext MSDN"您将找到如何构建循环的代码示例。

注意,在Dim t, t1 As String中,只有t1是字符串。t由于没有指定的数据类型而被定义为变体。这似乎不是你的本意。

我还注意到你不寻常地使用Application.IntersectIntersect(vrech.EntireRow, lColumn.EntireColumn)应该相当于更简单的Sh.Cells(vrech.Row, lColumn),建议在为其赋值时指定Value属性。

最新更新