使用用户表单“删除”按钮删除多个工作表上的行

问题描述 投票:2回答:1

我修改了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

但得到一个

'下载没有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

任何建议将不胜感激。

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

excel vba excel-vba delete-row worksheet
1个回答
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可能是一个更好的主意,因为它只循环工作表并避免使用图表(如果可用)。

© www.soinside.com 2019 - 2024. All rights reserved.