2017-02-05 7 views
0

Ich versuche, die unter Aufgabe in VBA mit Wochentag Funktion zu erfüllen:Weekday-Funktion in VBA

Was ich tun möchte, ist:

  1. Ich habe Daten in Spalte K und dieser Code sollte Führen Sie nur an Wochentagen Daten und nicht am Wochenende Termine.

  2. Ich muss zusätzlichen Text zusammen mit "Umzug nach SA (Kompatibilität Reduktion)", sagen wir "Umzug nach SA (Fehler)" hinzufügen. Wenn also col P entweder "Nach SA (Kompatibilitätsreduktion)" oder "Nach SA (Failure)" verschoben wurde, sollte die Einfärbung erfolgen.

  3. Dieser Code sollte nur in Blech "Latency"

Ich habe den Code unten, aber es wirft eine Fehlermeldung aus:

wrong number of arguments or invalid property assignment 

Mein Code:

Sub Weekday() 

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, vbMonday) = 2 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 
Next r 

End Sub 

Antwort

1

Hier ist Ihr Sub-Code Refaktor für das, was Sie gefragt haben

ich sein früherer Name zu WeekdayCheck() geändert ist nicht zu verstecken VBA auch WeekDay() Funktion

Sub WeekdayCheck() 
    Dim r As Long, LastRow As Long 
    Dim RemainingDay As Double '<--| you seem no to use it! if so get rid of it 

    With Worksheets("Latency") '<--| reference worksheet "Latency" 
     LastRow = .Cells(.Rows.Count, "A").End(xlUp).row '<--| get row index of its column A last not empty cell 
     Application.ScreenUpdating = False 
     For r = 2 To LastRow 
      RemainingDay = 0 '<--| you seem no to use it! if so get rid of it 

      If Weekday(.Range("K" & r).Value, vbSaturday) > 2 Then '<--| having 'Weekday()' function starting from "Saturday", it'll return numbers from 3 to 7 for not weekend weekdays 
       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 
     Next r 
    End With 
End Sub