2017-02-07 46 views
0

我有下面的代码不工作,或者当它运行一个按钮(通过插入按钮并将代码的宏指定给按钮)时发出预期的结果。当通过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 
+0

请发布按钮代码。请记住,如果您创建按钮事件代码,然后更改按钮的名称,代码将不会被调用。如果您在按钮代码中创建断点,它会运行吗? –

+0

我没有创建任何按钮代码..我只需点击“插入”,然后选择按钮并为其分配控件。 –

+0

在VBA编辑器中是否有这样的代码:'Sub Button1_Click()'。你记得插入按钮时_Macro Name_是什么吗? –

回答

0

我猜测,当您试图通过按钮执行宏时,您的范围没有与正确的工作表关联。也许你的按钮与代码不在同一张表上,这会导致分离?当你按下F5时它会起作用,因为我假设你的代码在包含范围的表单模块中。但是,当您将宏的触发移动到按钮时,范围变得模糊不清。无论原因如何,您应该可以通过使用该范围的工作表限定您的所有范围来解决问题。

因此,举例来说,如果你的范围是在Sheet1中,您将需要以下几行添加到您的代码:

Dim ws as Worksheet 

Set ws = ThisWorkbook.Sheets("Sheet1") 

然后你需要改变使用范围的所有实例的合格与表一样,如下所示。

更改此:

LastRow = Range("M:O").Cells(Rows.count, "A").End(xlUp).Row 

要这样:

LastRow = ws.Range("M:O").Cells(Rows.count, "A").End(xlUp).Row 

做这个无处不在,你看字范围。前言ws和点的范围。这样Excel可以知道哪个工作表需要查找范围。因为工作簿中的每张工作表都有一个范围M1:O50,因此您需要使用您希望范围参考的表格来限定范围。

相关问题