我正在设置一个考勤电子表格,其中我们使用CountIf函数计算总的迟到和病假天数。每列列出一个员工。我正在尝试编写一个宏,它将统计每个员工的迟到或病假天数,将该值输入到一个单元格中,然后将该值复制到汇总表中。然后使用For循环使用相同的范围(行数)遍历每个员工,但始终移动到一列。这是我第一次真正使用VBA,所以我被卡住了,因为我的代码在尝试迭代列时给我一个错误。谢谢!
Sub Counting()
ActiveCell.Select
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[2]:RC[2],""L"")"
Selection.Copy
Sheets("Sheet3").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Sheets("Sheet1").Select
Application.CutCopyMode = False
Selection.ClearContents
Dim LastCol As Integer
With ActiveSheet
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With
Dim i As Integer
For i = 1 To LastCol
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[i]:RC[i],""L"")"
ActiveCell.Select
Selection.Copy
Sheets("Sheet3").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Sheets("Sheet1").Select
Application.CutCopyMode = False
Selection.ClearContents
Next i
End Sub
发布于 2019-02-19 10:26:45
问题出在这一行:
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[i]:RC[i],""L"")"
看起来你想要这里的i的值,而不是字母"i",你可以这样做:
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-10]C[" & i & "]:RC[" & i & "],""L"")"
这将修复您的即时错误消息,但是宏作为一个整体是非常脆弱的,您应该阅读PEH参考的文章,并尽可能地替换所有这些.Select / .Copy / .PasteSpecial。
或者,您可以在没有宏的情况下执行所需的操作,而使用公式。如果可以的话,那就更好了。
https://stackoverflow.com/questions/54758281
复制相似问题