使用用户表单删除多个工作表上的特定行
Deleting a specific row on multiple worksheets using a userform
我正在开发一种跟踪学生评估的工具,并使用用户表单来管理学生数据。
我已经根据对先前问题的回答编写了代码,以删除工作簿中包含各种学生数据的 14 个工作表上的同一行,但在 WshtNameCrnt.Rows(l).Delete
行出现 'Object required' 错误下面的代码:
Private Sub cmbDelete_Click()
Dim WshtNames As Variant
Dim WshtNameCrnt As Variant
WshtNames = Array("Pupil Data", "RWM", "Art", "Computing", "Design Technology", "Geography", "History_", _
"MFL", "Music", "PE", "RE", "Science", "Bookbands", "KS1 - TRP")
Dim msgResponse As String 'confirm delete
Application.ScreenUpdating = False
msgResponse = MsgBox("This will delete the selected record. Continue?", _
vbCritical + vbYesNo, "Delete Entry")
Select Case msgResponse 'action dependent on response
Case vbYes
Dim l As Long
l = ActiveCell.Row 'store currently active cell row
For Each WshtNameCrnt In WshtNames
WshtNameCrnt.Rows(l).Delete
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
Call ResortData
End With
Case vbNo
Exit Sub 'cancelled
End Select
Application.ScreenUpdating = True
End Sub
我假设问题是我的工作表名称数组被标注为变体,但我不确定将其设置为对象并循环遍历数组中的工作表的最佳方法。
如果我的假设是正确的,请有人告诉我,suggest/show我如何解决这个问题?
WshtNameCrnt
是 Worksheet
的名称,而不是实际的 Worksheet
对象。
所以
WshtNameCrnt.Rows(l).Delete
使用 Worksheets
集合,它与 Worksheet
索引或 name 一起工作,到 return Worksheet
有问题的对象。
ThisWorkbook.Worksheets(WshtNameCrnt).Rows(1).Delete
@BigBen 发现了问题和可能的解决方案
另一种解决方案是遍历 Worksheets
集合,其名称已收集到 WshtNames
数组
For Each WshtNameCrnt In Worksheets(WshtNames)
WshtNameCrnt.Rows(l).Delete
Next
两种解决方案(和您的代码)都无法管理 sheet 名称与任何当前工作簿作品sheet不匹配的情况
我正在开发一种跟踪学生评估的工具,并使用用户表单来管理学生数据。
我已经根据对先前问题的回答编写了代码,以删除工作簿中包含各种学生数据的 14 个工作表上的同一行,但在 WshtNameCrnt.Rows(l).Delete
行出现 'Object required' 错误下面的代码:
Private Sub cmbDelete_Click()
Dim WshtNames As Variant
Dim WshtNameCrnt As Variant
WshtNames = Array("Pupil Data", "RWM", "Art", "Computing", "Design Technology", "Geography", "History_", _
"MFL", "Music", "PE", "RE", "Science", "Bookbands", "KS1 - TRP")
Dim msgResponse As String 'confirm delete
Application.ScreenUpdating = False
msgResponse = MsgBox("This will delete the selected record. Continue?", _
vbCritical + vbYesNo, "Delete Entry")
Select Case msgResponse 'action dependent on response
Case vbYes
Dim l As Long
l = ActiveCell.Row 'store currently active cell row
For Each WshtNameCrnt In WshtNames
WshtNameCrnt.Rows(l).Delete
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
Call ResortData
End With
Case vbNo
Exit Sub 'cancelled
End Select
Application.ScreenUpdating = True
End Sub
我假设问题是我的工作表名称数组被标注为变体,但我不确定将其设置为对象并循环遍历数组中的工作表的最佳方法。
如果我的假设是正确的,请有人告诉我,suggest/show我如何解决这个问题?
WshtNameCrnt
是 Worksheet
的名称,而不是实际的 Worksheet
对象。
所以
WshtNameCrnt.Rows(l).Delete
使用 Worksheets
集合,它与 Worksheet
索引或 name 一起工作,到 return Worksheet
有问题的对象。
ThisWorkbook.Worksheets(WshtNameCrnt).Rows(1).Delete
@BigBen 发现了问题和可能的解决方案
另一种解决方案是遍历 Worksheets
集合,其名称已收集到 WshtNames
数组
For Each WshtNameCrnt In Worksheets(WshtNames)
WshtNameCrnt.Rows(l).Delete
Next
两种解决方案(和您的代码)都无法管理 sheet 名称与任何当前工作簿作品sheet不匹配的情况