0

我不确定我想要实现的目标是否可行。所以这里是:

我有两张工作簿:

第一张表包含员工的原始数据以及他们参加或未参加的培训(他们无法参加培训)。表格包含几列,例如:姓名、特殊 ID(每个员工都不同)、2 个空白列、存在(是/否)等等......

第二张表将根据范围和存在标准创建报告。

从技术上讲,它是这样的:

报告表有员工列表,他们将使用自动过滤器进行过滤。那些被过滤的员工将被检查他们是否参加了 14 类培训。类别因范围而异(范围是已知的;将添加或调整时间范围以适应新添加的培训)。

我的问题: 是否可以创建 vba 代码来检查员工是否参加了某些培训(countif 在某个范围内,条件:不存在 = 不计算)并将值粘贴到某些单元格?如果是,您能否就如何做到这一点提供一些建议?我不是要求准备好的代码。

试图让它工作,但我坚持这一点。“if cells.find...”行出错。

Sub Check()

MyRange = Range("A1", Selection.End(xlDown))

For Each MyCell In MyRange
With Range("pp2dni2007")
    If Cells.Find(MyCell.Value) Is Nothing Then

    Else
        If ActiveCell.Value = ActiveCell.Offset(0, 3).Value Then
        MyCell.Offset(0, 6).Value = 1

        Else
        MyCell.Offset(0, 6).Value = 0

        End If

    End If

End With
Next

End Sub


第二次编辑,早期的代码做了无限循环。现在我认为 if 语句引用了错误的范围,但不知道如何处理它。

Sub Check()

Dim MyRange As Range, MyCell As Variant

Range("A1").Select

Set MyRange = Range(Selection, Selection.End(xlDown)).Rows.SpecialCells(xlCellTypeVisible)

For Each MyCell In MyRange.Cells
    With Range("pp2dni2007")
        If .Cells.Find(MyCell.Value) Is Nothing Then

        Else
            If .Cells.Find(MyCell.Value).Value = .Cells.Find(MyCell.Value).Offset(0, 3).Value Then
            MyCell.Offset(0, 6).Value = 1

            Else
            MyCell.Offset(0, 6).Value = 0

            End If

        End If

    End With
Next

End Sub

示例工作簿:https ://dl.dropboxusercontent.com/u/7421442/sample%20workbook%20(1).xls

4

1 回答 1

0

声明所有变量,例如,

Dim MyRange as Range, MyCell as Range.

没有声明,MyCell是变体数据类型,这就是您收到Object Required错误的原因。然后做:

For Each MyCell In MyRange.Cells

With块内,您可能想要使用(注意.前面的Cells):

If .Cells.Find(MyCell.Value) Is Nothing Then

此外,您可能需要修改您正在做的事情ActiveCell,因为这永远不会改变哪个单元格处于活动状态,我不确定它会给您带来预期的结果。总是最好避免依赖ActiveSelect方法(除了将它们用作用户输入)。相反,直接使用范围对象。

于 2013-10-09T14:07:19.773 回答