【问题标题】:Delete rows on multiple worksheets using userform 'delete' button使用用户窗体的“删除”按钮删除多个工作表上的行
【发布时间】:2018-09-11 10:17:09
【问题描述】:

我修改了 Roy Cox 编写的代码(感谢您为我节省了这么多时间!)以创建一个用户表单,以便在我正在创建的分析工具中添加、修改和删除用户的详细信息。

在单个工作表上处理用户数据时,它可以完美运行。我想修改代码,以便在添加或删除用户时,它会检查每个工作表并相应地修改添加或删除的行。

这是删除单张瞳孔数据的代码:

Private Sub cmbDelete_Click()

Dim msgResponse As String    'confirm delete

Application.ScreenUpdating = False

'get user confirmation
msgResponse = MsgBox("This will delete the selected record. Continue?", _
        vbCritical + vbYesNo, "Delete Entry")
Select Case msgResponse    'action dependent on response

Case vbYes
    'c has been selected by Find button on UserForm
    Set c = ActiveCell
        c.EntireRow.Delete    'remove entry by deleting row

'restore form settings
    With Me
        .cmbAmend.Enabled = False    'prevent accidental use
        .cmbDelete.Enabled = False    'prevent accidental use
        .cmbAdd.Enabled = True    'restore use
        'clear form
        Call ClearControls
    End With

Case vbNo
    Exit Sub    'cancelled
End Select

Application.ScreenUpdating = True

End Sub

我已经尝试修改它以删除每个工作表上的用户数据,如下:

Private Sub cmbDelete_Click()

Dim Sh As Worksheet
Dim msgResponse As String    'confirm delete

Application.ScreenUpdating = False

'get user confirmation
msgResponse = MsgBox("This will delete the selected record. Continue?", _
        vbCritical + vbYesNo, "Delete Entry")
Select Case msgResponse    'action dependent on response

Case vbYes
For Each Sh In ThisWorkbook.Sheets
    With Sh.UsedRange
        'c has been selected by Find button
        Set c = ActiveCell
            c.EntireRow.Delete    'remove entry by deleting row
    Next

'restore form settings
    With Me
        .cmbAmend.Enabled = False    'prevent accidental use
        .cmbDelete.Enabled = False    'prevent accidental use
        .cmbAdd.Enabled = True    'restore use
        'clear form
        Call ClearControls
    End With

Case vbNo
    Exit Sub    'cancelled
End Select

Application.ScreenUpdating = True

End Sub

但得到一个

'Next without For' 错误。

我不明白为什么会发生这种情况,因为我认为这就是我在本节中所做的:

For Each Sh In ThisWorkbook.Sheets
With Sh.UsedRange
    'c has been selected by Find button
    Set c = ActiveCell
        c.EntireRow.Delete    'remove entry by deleting row
Next

任何建议将不胜感激。

(我希望一旦我解决了删除问题,我就可以在添加新学生时修改添加行的解决方案!)

【问题讨论】:

  • 在下一个之前结束
  • 感谢斯里扬的帮助。

标签: vba excel delete-row worksheet


【解决方案1】:

添加End With:

For Each Sh In ThisWorkbook.Sheets
    With Sh.UsedRange
        'c has been selected by Find button
        Set c = ActiveCell
        c.EntireRow.Delete    'remove entry by deleting row
    End With
Next

Next 之前。


作为最佳实践,使用ThisWorkbook.Worksheets 可能是一个更好的主意,因为它只循环工作表并避开图表(如果可用)。

【讨论】:

  • 感谢 Vityata - 我已经注意到这一点并进行了更改。
  • 这么简单的更正!我现在有一个问题,当我选择用户并单击删除时,用户和接下来的 3 行也会在第一个工作表上被删除,但在第二个(测试)工作表上没有任何内容被删除。您对如何解决这个问题有任何想法吗?谢谢。
  • @gbra - 是的,有些错误很容易解决。关于第二个错误,最好提出一个新问题。
  • 当然修复了语法错误,但代码既是多余的(With Sh.UsedRange 引用从未使用)而且逻辑错误(设置Set c = ActiveCell 不会改变@ 987654327@ 因此c.EntireRow.Delete 将继续删除同一工作表中的同一行)
猜你喜欢
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2023-03-09
  • 2019-04-06
  • 1970-01-01
相关资源
最近更新 更多