删除多个工作表上的行
Deleting rows on multiple worksheets
继我今天提出的上一个问题之后 - 我修改了 Roy Cox 编写的代码(感谢您为我节省了这么多时间!)以创建一个用户窗体以在分析中添加、修改和删除用户的详细信息我正在创建的工具。
在单个作品上处理用户数据时效果很好sheet。
选择一个用户并单击 'delete' 会删除他们在作品中的用户数据sheet。我已经修改了代码,以便在添加或删除用户时,它应该检查每个工作sheet 并相应地添加或删除行。
这是删除单个学生数据的代码sheet:
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
我试过修改删除每个作品的用户数据sheet,如下:
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行的数据。它根本不会删除下一个作品的数据sheet。
谁能给点建议?
变化:
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
设置为当前 active 单元格,即您的 "Find" 按钮在当前 activesheet
2) 而
c.EntireRow.Delete
总是会毫不奇怪地删除 c
整行 ,即 sheet 中找到 c
的同一行在,因为没有人再次设置 c
并指向另一个 sheet 范围。
并且简单地遍历 Sheets 集合不会改变 Active sheet
继我今天提出的上一个问题之后 - 我修改了 Roy Cox 编写的代码(感谢您为我节省了这么多时间!)以创建一个用户窗体以在分析中添加、修改和删除用户的详细信息我正在创建的工具。
在单个作品上处理用户数据时效果很好sheet。
选择一个用户并单击 'delete' 会删除他们在作品中的用户数据sheet。我已经修改了代码,以便在添加或删除用户时,它应该检查每个工作sheet 并相应地添加或删除行。
这是删除单个学生数据的代码sheet:
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
我试过修改删除每个作品的用户数据sheet,如下:
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行的数据。它根本不会删除下一个作品的数据sheet。
谁能给点建议?
变化:
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
设置为当前 active 单元格,即您的 "Find" 按钮在当前 activesheet
2) 而
c.EntireRow.Delete
总是会毫不奇怪地删除 c
整行 ,即 sheet 中找到 c
的同一行在,因为没有人再次设置 c
并指向另一个 sheet 范围。
并且简单地遍历 Sheets 集合不会改变 Active sheet