【问题标题】:delete a line or item selected on listbox of userform删除用户窗体列表框中选择的行或项目
【发布时间】:2019-12-30 05:35:43
【问题描述】:

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

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 并单击删除时,我想删除有关 XOXO 的全部信息,确实意味着删除 XOXO 和 SA 以及他的电话号码等.....是的,我有相同的工作表上的数据和删除数据单元格后我想保持空白

【问题讨论】:

  • “它不起作用”?你得到了什么错误?当你穿过它时会发生什么?你在哪里要求用户输入密码?
  • @brax 我有错误 424 和 ligne lstdiplay.Selected(i) 突出显示
  • 你真的有所有 65656 行的数据吗? i 中断时的值是多少?列表框中有多少项? 65656?
  • @braX 不,我没有 65656 个条目,我从一开始就没有确切的数字,因为我填写了一张表格,所以我必须考虑最大数量,这就是我留下 65656 的原因;但是当我只输入 4 个条目并尝试了代码时,它给了我错误;通常我的表从第 3 行开始,所以即使我输入 i=3 ,也没有任何改变
  • .Selected 属性告诉您一个项目是否被选中,或者用于使其被选中或取消选中。你不是那样使用它。 stackoverflow.com/questions/39244444/… Rows(i + 1).Selected 毫无意义。

标签: excel vba listbox


【解决方案1】:
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

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

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

【讨论】:

  • 非常感谢您的帮助,它的工作原理,但我想很好地理解你的代码,为什么你把 Me.lstdiplay.ListIndex = -1 ,为什么等于 -1 ?因为我知道 listindex 从 0 开始
  • 不是真的...如果您没有选择任何内容Me.lstdiplay.ListIndex 将返回 -1。代码“说”Not Me.lstdisplay.ListIndex = -1。如果未选择任何内容,您会收到一条消息来警告您,而不是错误消息...
  • @axel:如果它按需要工作,那么答案投票不会杀死任何人...... :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多