2017-05-07 133 views
0

我正在尝试根据列表框中选定内容来更改某个单元格值。根据列表框中的选择更改单元格值

这是我如何建立我的列表框中

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。

回答

0

在您的第二段代码(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 
+0

这完美地工作。非常感谢。 – Quint