我正在开发一种跟踪学生评估的工具,并正在使用用户表格来管理学生数据。
我已经基于对先前问题的回答编写了代码,以删除工作簿中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
我认为问题是我的工作表名称数组的尺寸是一个变体,但不确定将其设置为对象并在数组中的工作表之间循环的最佳方法。
如果我的假设是正确的,请有人告诉我,并建议/告诉我如何解决该问题?
答案 0 :(得分:1)
@BigBen找到了问题和可能的解决方案
另一种解决方案是遍历Worksheets
数组中收集的名称,这些集合的名称是WshtNames
For Each WshtNameCrnt In Worksheets(WshtNames)
WshtNameCrnt.Rows(l).Delete
Next
两个解决方案(和您的代码)都无法管理工作表名称与当前工作簿工作表都不匹配的情况
答案 1 :(得分:0)
WshtNameCrnt
是Worksheet
的名称,而不是实际的Worksheet
对象。
所以不是
WshtNameCrnt.Rows(l).Delete
使用Worksheets
集合(与Worksheet
索引或 name 一起使用)返回有问题的Worksheet
对象。
ThisWorkbook.Worksheets(WshtNameCrnt).Rows(1).Delete