代码不会在多个工作表中工作(尝试移动选择,选择等等仍然无法工作)

时间:2017-12-22 09:57:27

标签: excel vba excel-vba

这里有一个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

有人可以帮忙解决这个问题吗?任何帮助,将不胜感激。非常感谢!

编辑: 根据请求添加了问题的示例快照 Click here for image.

2 个答案:

答案 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