【问题标题】:Deleting rows on multiple worksheets删除多个工作表上的行
【发布时间】:2018-09-11 12:34:37
【问题描述】:

继我今天提出的上一个问题之后 - 我修改了 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
End With
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

但是这个版本删除了用户的数据和他们下面4行的数据。它根本不会从下一个工作表中删除数据。

谁能给点建议?

【问题讨论】:

  • 1) 您似乎没有根据您上次给​​出(并接受)的答案修改您的代码。 2) 其他工作表中要删除的行是否与 “查找按钮” 找到它的工作表中的行相同?
  • 1) 你说得对 - 我很懒惰,复制了原帖,忘记修改代码 - 谢谢!
  • 2) 是的,其他工作表将具有相同的用户列表。根据工作表收集的数据会有所不同。
  • 2) 所以如果要在搜索到的工作表中删除第 23 行,那么所有其他工作表第 23 行也将被删除?
  • 是的,没错。

标签: excel vba delete-row


【解决方案1】:

改变:

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
    End With
    Next

到:

Case vbYes
    Dim l As Long
    l = ActiveCell.Row 'store currently active cell row
    For Each Sh In ThisWorkbook.Worksheets
        Sh.Rows(l).Delete
    Next

您是否有兴趣了解您之前的代码为何不起作用:

1)

Set c = ActiveCell

c 设置为当前活动单元格,即在当前活动工作表中选择“查找”按钮的单元格

2) 而

c.EntireRow.Delete

毫无疑问,总是会删除c 整行,即在工作表中找到c 的同一行,因为没有人再次设置c 并指向另一个工作表范围。

简单地循环通过 Sheets 集合不会改变 Active 工作表

【讨论】:

  • 太棒了!非常感谢 - 太完美了。
  • 也感谢您的解释。我正在(也许并不完全令人惊讶!)学习VBA,我相信一旦我进行了一些适当的培训,我会快很多!
猜你喜欢
  • 1970-01-01
  • 2019-03-17
  • 2022-01-04
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2018-10-04
相关资源
最近更新 更多