Excel 删除在userform的列表框中选择的行或项

Excel 删除在userform的列表框中选择的行或项,excel,vba,listbox,Excel,Vba,Listbox,我有一个userform,我可以在其中输入一些信息,但我也想让用户可以删除他输入的数据,方法是从列表框中选择数据,然后单击delete,他们需要输入密码。不幸的是,我尝试了这个代码,但它不起作用 Private Sub delete_Click() Dim i As Integer For i = 1 To Range("A65656").End(xlUp).Row If lstdiplay.Selected(i) Then Rows(i + 1).Selected

我有一个userform,我可以在其中输入一些信息,但我也想让用户可以删除他输入的数据,方法是从列表框中选择数据,然后单击delete,他们需要输入密码。不幸的是,我尝试了这个代码,但它不起作用

Private Sub delete_Click()
Dim i As Integer
  For i = 1 To Range("A65656").End(xlUp).Row
    If lstdiplay.Selected(i) Then
      Rows(i + 1).Selected
      Rows(i).Select
      Selection.delete
    End If
  Next i
End Sub
当我选择例如XOXO喜欢图片,然后单击DELETE(删除)时,我想删除关于XOXO的全部信息,这意味着删除XOXO和SA以及他的电话号码等等……是的,我在工作表上有相同的数据,删除数据单元格后,我想保持空白

它删除选定的列表框行并删除等效的图纸行。如果列表框已从第3行(含第3行)开始加载。否则,您应该调整'listStart'常量值

它还会在缺少选择时发出警告

它删除选定的列表框行并删除等效的图纸行。如果列表框已从第3行(含第3行)开始加载。否则,您应该调整'listStart'常量值


如果选择丢失,它也会发出警告。

“它不工作”?你犯了什么错误?当你跨过它时会发生什么?你在哪里向用户询问密码?@brax我有错误424和ligne lstdiplay.Selected(I)highlighted你真的在所有65656行中都有数据吗?当它断开时,
i
的值是多少?列表框中有多少项?65656?@braX不,我没有65656个条目,我没有从一开始就有一个准确的数字,因为我填写了一张表格,所以我必须考虑一个最大数字,这就是为什么我留下65656;但是当我只输入了4个条目,并且我尝试了代码时,它给出了错误;通常情况下,我的表从第3行开始,因此即使我输入I=3,也没有任何更改
。Selected
属性会告诉您某个项目是否被选中,或者用于使其处于选中或未选中状态。你不是那样使用它的<代码>行(i+1)。选中的没有意义。“它不工作”?你犯了什么错误?当你跨过它时会发生什么?你在哪里向用户询问密码?@brax我有错误424和ligne lstdiplay.Selected(I)highlighted你真的在所有65656行中都有数据吗?当它断开时,
i
的值是多少?列表框中有多少项?65656?@braX不,我没有65656个条目,我没有从一开始就有一个准确的数字,因为我填写了一张表格,所以我必须考虑一个最大数字,这就是为什么我留下65656;但是当我只输入了4个条目,并且我尝试了代码时,它给出了错误;通常情况下,我的表从第3行开始,因此即使我输入I=3,也没有任何更改
。Selected
属性会告诉您某个项目是否被选中,或者用于使其处于选中或未选中状态。你不是那样使用它的<代码>行(i+1)。选中的没有任何意义。非常感谢您的帮助,它是有效的,但我想很好地理解您的代码,为什么您将我放在其中。lstdiplay.ListIndex=-1,为什么等于-1?因为我不知道listindex从0开始不是真的。。。如果您没有选择任何内容,
Me.lstdiplay.ListIndex
将返回-1。代码“说”
不是Me.lstdisplay.ListIndex=-1
。如果未选择任何选项,您将收到一条警告消息,而不是错误消息…@axel:如果它能按需要工作,则答案投票不会杀死任何人…:-)非常感谢您的帮助,它是有效的,但我想很好地理解您的代码,为什么您将Me.lstdiplay.listinex=-1,为什么等于-1?因为我不知道listindex从0开始不是真的。。。如果您没有选择任何内容,
Me.lstdiplay.ListIndex
将返回-1。代码“说”
不是Me.lstdisplay.ListIndex=-1
。如果未选择任何选项,您将收到一条警告消息,而不是错误消息…@axel:如果它能按需要工作,则答案投票不会杀死任何人…:-)
Private Sub delete_Click()
    Const listStart As Long = 3 'Your listbox keeps the rows starting with row 3
    Dim sh As Worksheet
    Set sh = ActiveSheet 'better use your worksheet name here...
    If Not Me.lstdiplay.ListIndex = -1 Then
        Me.lstdiplay.RemoveItem Me.lstdiplay.ListIndex
        sh.Rows(Me.lstdiplay.ListIndex + listStart).Delete
    Else
        MsgBox "You must have a listbox selected row!", vbInformation, "No row selected"
    End If        
End Sub