0

我正在尝试制作一个可以遍历整个工作簿并计算员工工作天数的宏。工作表以天为单位完成工作,因此 T 必须找到的天数不为零。我试过使用COUNTIF(A11:A12,">0"),我得到了错误Expected : list separator or )。我正在使用For Each循环来处理工作表。我想将所有信息放在工作簿末尾的新工作表上,其中包含员工姓名和工作天数。我对 Visual Basic 很陌生,但对 C# 非常熟悉。

我现在已经走到了这一步

Option Explicit

Sub WorksheetLoop2()
    ' Declare Current as a worksheet object variable.
    Dim Current As Worksheet
    Dim LastColumn As Integer

    If WorksheetFunction.CountA(Cells) > 0 Then
    ' Search for any entry, by searching backwards by Columns.
        LastColumn = Cells.Find(What:="*", After:=[A1], _
        SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious).Column
    End If

    ' Loop through all of the worksheets in the active workbook.
    For Each Current In Worksheets
        Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range(Cells(11, LastColumn), Cells(16, LastColumn)), ">0")
        Current.Range("A28") = Application.WorksheetFunction.CountIf(Current.Range("Al17:Al22"), ">0")
    Next
End Sub

当我运行它时,我收到一条错误消息method range of object'_worksheet' failed。我也无法找到一种方法来获取摘要表上的所有信息。

4

1 回答 1

1

VBA 解决方案,根据您上面的最后一条评论。

良好的 VBA 编程实践需要始终在代码中使用 Option Explicit,这样您就知道什么时候没有正确声明变量,或者有时代码是否不好!在这种情况下,您会发现仅写入 A27 并不意味着您将值返回到单元格 A27,而只是将您获得的值设置为变量 A27。或者,也许您不会确切地知道这一点,但您会很快发现您的问题出在哪里!

此代码应该为您修复它:

Option Explicit

Sub WorksheetLoop2()

'Declare Current as a worksheet object variable.
Dim Current As Worksheet

' Loop through all of the worksheets in the active workbook.
For Each Current In Worksheets
    Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range("A11:A12"), ">0")
Next

End Sub

如果有帮助,非 VBA 解决方案:

假设您有一个摘要表,并且每个员工都在单独的表中,A 列中的天数和 B 列中的工作时间,请在摘要 B1 的公式栏中输入公式,然后在 A 列中运行名称列表。

床单

于 2012-06-25T20:47:08.307 回答