此代码在模块内部,当我选择一个单元格然后按下我的按钮“删除注释”时它被激活。我试图写这个是不断的错误所以我转向谷歌并尝试了别人的方法,使用过滤,但它不会工作,我不喜欢它如何激活包含表格的表格,所以我给了它另一个去写我自己的代码,让它几乎工作。
如果我更改此行:
If .DataBodyRange.Cells(Counter, .ListColumns("Name").Index) = EmployeeName And .DataBodyRange.Cells(Counter, .ListColumns("Date").Index) = SelectedDate Then .ListRows(Counter).Delete 对此,然后宏工作但显然删除了与该日期相关联的所有名称而不是工作表“日历”中单元格“B3”中的名称
If .DataBodyRange.Cells(Counter, .ListColumns("Date").Index) = SelectedDate Then .ListRows(Counter).Delete 如果我将其更改为此,我会收到类型不匹配错误
If .DataBodyRange.Cells(Counter, .ListColumns("Name").Index) = EmployeeName 完整代码如下
Dim Counter As Integer, EmployeeName As Integer, LastRow As Integer, SelectedDate As Date
If Intersect(ActiveCell, range("D12:AS23")) Is Nothing Then
MsgBox "Please select a date.", , "Error"
Exit Sub
Else
If Sheets("Settings").range("Protected") = 2 Then
With Sheets("Calendar")
SelectedDate = Cells(ActiveCell.Row, 2) - 1 + ActiveCell.Value
EmployeeName = range("B3")
End With
With Sheets("Notes").ListObjects("TblNotes")
LastRow = .range.Rows.Count
For Counter = LastRow To 1 Step -1
If .DataBodyRange.Cells(Counter, .ListColumns("Name").Index) = EmployeeName And .DataBodyRange.Cells(Counter, .ListColumns("Date").Index) = SelectedDate Then
.ListRows(Counter).Delete
End If
Next Counter
End With
Else
'do nothing
End If
End If
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述来看,你正在使用VBA(Visual Basic for Applications)在Excel中编写宏来删除特定条件下的行。问题在于你想根据员工姓名(EmployeeName
)和选定日期(SelectedDate
)删除表格中的行,但遇到了一些挑战。
首先,注意到一个类型不匹配的错误,这通常是因为比较的数据类型不一致。在这个情况下,EmployeeName
被定义为Integer
,而你可能想用它来存储一个字符串(员工的名字),这应该是String
类型而不是Integer
。因此,请将EmployeeName
的声明更改为:
Dim Counter As Integer, EmployeeName As String, LastRow As Integer, SelectedDate As Date
接下来,确保EmployeeName
正确地获取了“B3”单元格的值,并且该值确实是一个字符串。修改这部分代码如下:
EmployeeName = Sheets("Calendar").Range("B3").Value
至于你的主要逻辑问题,你希望仅当员工姓名和日期都匹配时才删除行。你的原始逻辑是正确的,只是需要确保数据类型正确无误。所以,保持你的判断条件不变:
If .DataBodyRange.Cells(Counter, .ListColumns("Name").Index) = EmployeeName And .DataBodyRange.Cells(Counter, .ListColumns("Date").Index) = SelectedDate Then
.ListRows(Counter).Delete
End If
如果以上更改后仍然遇到问题,可能需要检查以下几个点: 1. 确保SelectedDate
计算正确,减去1是否符合你的业务逻辑。 2. 检查“TblNotes”表中的“Name”列和“Date”列的数据类型与你的变量类型是否匹配。 3. 确认没有任何其他隐藏的错误,比如表格范围是否正确,或者是否有保护设置阻止了行的删除。
最后,记得测试宏时要小心,特别是在执行删除操作时,以避免意外丢失数据。可以先在一个备份副本上进行测试。