通过vba中的按钮执行时代码不起作用

时间:2017-02-07 06:29:39

标签: excel vba

我有下面的代码无效或在运行按钮时给出预期的结果(通过插入按钮并将代码的宏指定给按钮)。

然而,当我按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

2 个答案:

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

尝试一下:

  • 插入新按钮
  • 添加VBA代码
  • 选择要在您的VBA代码中激活的工作表
  • 致电您当前的子周末