这里有一个Excel VBA新手。我正在处理此代码,只需单击一次即可完成工作表宏。因此,我们的想法是拥有一个曾经点击的宏,可以在多个工作表中触发IF-ISERROR-Vlookup公式(现在大约12个,但将来会继续增加)。公式和结果都显示在多个工作表的相同列中,但行数不同(Sheet 1 col B [data]和C [formula],sheet 2 Col B和C等)
现在,我在下面执行的代码仅在我转到工作表并在该特定工作表中触发宏时才起作用;这意味着我必须逐张一张。 我尝试删除以前帖子中建议的选择,选择和活动表,但它向我显示了一条错误消息。
所以我的问题是:
a)如何修改代码以便我可以创建一个可以一键触发所有工作表的宏?
b)正如你在下面看到的那样,我把Range(" C4:C54")尽管每张表中的行数不同,因为我不知道如何使范围覆盖不同直到它用值命中最后一个单元格为止。
Dim ws As Worksheet
For Each ws In Worksheets
Range("C4").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],TestScore,1,FALSE)),""Pass"",""Fail"")"
Range("C4").Select
Selection.AutoFill Destination:=Range("C4:C54")
Range("C4:C54").Select
Next ws
End Sub
有人可以帮忙解决这个问题吗?任何帮助,将不胜感激。非常感谢!
答案 0 :(得分:1)
将此代码放入模块中(插入>> 模块):
Dim ws As Worksheet, LastRow As Long
For Each ws In Worksheets
With ws
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'Change the number (1) with appropriate column
.Range("C4:C" & LastRow).FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],TestScore,1,FALSE)),""Pass"",""Fail"")"
'The formula will be filled down til the last row
End With
Next ws
答案 1 :(得分:1)
避免使用Select
语句 - 它可能会导致问题,而是明确地引用单元格。这会将您的公式在单元格C4
中插入该列的最后一个单元格
Dim ws As Worksheet
For Each ws In Worksheets
With ws
.Range("C4:C" & .Cells(.Rows.Count, "B").End(xlUp).Row).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],TestScore,1,FALSE)),""Pass"",""Fail"")"
End With
Next ws