根据列表框中的选择更改单元格值
问题描述:
我正在尝试根据列表框中选定内容来更改某个单元格值。根据列表框中的选择更改单元格值
这是我如何建立我的列表框中
Private Sub cmdAdd2_Click()
Dim LR As Long
Dim r As Long
Dim i As Long
lstSelector.Clear
With ActiveSheet
LR = .Range("A" & .Rows.Count).End(xlUp).Row
For r = 2 To LR
If .Cells(r, 1).Value = Val(TextBox6.Value) And .Cells(r, 5).Value = "No" Then
lstSelector.AddItem .Cells(r, 2).Value
lstSelector.List(i, 1) = .Cells(r, 3).Value
i = i + 1
End If
Next r
End With
这是我的工作如何打算。我遇到的问题是如何选择和编辑第5列单元格。
Private Sub cmdAdd_Click()
Range("Trades").Cells(Me.lstSelector.ListIndex + 2, 5) = "Yes"
上面的代码工作,但只是温和地和列表框被刷新时编辑“随机”行。我猜这是代码的一个问题。
当我单击cmdAdd_Click()时,我想要发生的事情是针对在列表框中选择的行将其值更改为“是”的单元格5。
答
在您的第二段代码(Range("Trades").Cells(Me.lstSelector.ListIndex + 2, 5) = "Yes"
)中,您选择的ListIndex指向列表中第一个项目的位置(第一个,第二个,第三个......),与该行无关的是数据在你的工作表中。 试试这个:
Private Sub cmdAdd2_Click()
Dim LR As Long
Dim r As Long
Dim i As Long
lstSelector.Clear
With ActiveSheet
LR = .Range("A" & .Rows.Count).End(xlUp).Row
For r = 2 To LR
If .Cells(r, 1).Value = Val(TextBox6.Value) And .Cells(r, 5).Value = "No" Then
lstSelector.AddItem .Cells(r, 2).Value
lstSelector.List(i, 1) = .Cells(r, 3).Value
lstSelector.List(i, 2) = .Cells(r, 3).Row 'this line added for storing row number
i = i + 1
End If
Next r
End With
End Sub
然后
Private Sub cmdAdd_Click()
Dim lItem As Long
For lItem = 0 To lstSelector.ListCount - 1 'Scan all items in lstSelector
If lstSelector.Selected(lItem) = True Then 'if selected...
Worksheets("Trades").Cells(lstSelector.List(lItem, 2), 5) = "Yes" 'recall row number
End If
Next
End Sub
这完美地工作。非常感谢。 – Quint