2017-02-07 89 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,因此您需要使用您希望範圍參考的表格來限定範圍。

相關問題