根据2条条件从表中删除一行(1条条件正在工作)

时间:2019-09-17 07:04:57

标签: excel vba

此代码在模块内部,当我选择一个单元格然后按我的按钮“删除便笺”时,它将被激活。我在尝试写此代码时遇到了不断的错误,所以我转向Google并尝试了使用过滤的其他人的方法,但是它不起作用,而且我不喜欢它如何激活包含表的表,所以我给了它另一个去写我自己的代码并使它几乎可以工作。

如果我更改此行:

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

1 个答案:

答案 0 :(得分:1)

好吧,所以我要做的就是将dim EmployeeName As Integer更改为dim EmployeeName as String,其他所有方法都可以正常工作:)。有人可以向我解释为什么解决此问题吗?我非常擅长使用反复试验来解决问题,但实际上我不知道为什么这可以解决问题。