我有下面的代码无效或在运行按钮时给出预期的结果(通过插入按钮并将代码的宏指定给按钮)。
然而,当我按F5时,它正在工作。你能说出错误的位置吗?
Sub Weekend()
Dim r, LastRow, RemainingDay As Double
LastRow = Range("M:O").Cells(Rows.count, "A").End(xlUp).Row
Application.ScreenUpdating = False
For r = 2 To LastRow
RemainingDay = 0
If Weekday(Range("K" & r).Value, vbSunday) = 1 Or Weekday(Range("K" & r).Value, vbSunday) = 7 Then
If InStr(1, Range("O" & r).Text, "Fail", vbTextCompare) > 0 Then
Select Case True
Case InStr(Range("P" & r).Text, "Moved to SA (Compatibility Reduction)") > 0, _
InStr(Range("P" & r).Text, "Moved to SA (Failure)") > 0
If Range("M" & r) - RemainingDay >= 1 Then
Range("M" & r).Cells.Font.ColorIndex = 3
Else
Range("M" & r).Cells.Font.ColorIndex = 0
End If
End Select
End If
End If
答案 0 :(得分:0)
当您尝试通过按钮执行宏时,我猜您的范围与正确的工作表无关。也许你的按钮与代码不在同一张纸上,这导致了分离?当你按F5时它会工作,因为我假设你的代码在包含范围的工作表模块中。但是当您将宏的触发移动到按钮时,范围变得模糊不清。无论原因是什么,您都应该通过使用该范围的工作表来限定所有范围来修复它。
因此,例如,如果您的范围在Sheet1上,则需要在代码中添加以下行:
Dim ws as Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
然后您需要更改使用工作表限定的所有Range实例,如下所示。
改变这个:
LastRow = Range("M:O").Cells(Rows.count, "A").End(xlUp).Row
对此:
LastRow = ws.Range("M:O").Cells(Rows.count, "A").End(xlUp).Row
在看到单词Range的任何地方都这样做。前言范围与ws和点。这样Excel将知道要查找范围的工作表。因为工作簿中的每个工作表都有一个范围M1:O50,所以你需要使用你希望范围引用的WHICH工作表来限定范围。
答案 1 :(得分:0)
尝试一下: