VBA При открытии файла проверяет, совпадает ли сегодняшняя дата с 1-м днем текущего месяца и не превышает ли значение диапазона ячеек 30, а затем запускает остальные

#excel #vba #date

Вопрос:

Я хотел бы, чтобы следующее выполнялось, если сегодняшняя дата равна первому числу текущего месяца и если значение ячейки больше 30. Я не уверен, где я ошибаюсь.

Пожалуйста, Помогите

 copySheet.Unprotect
copySheet.Range("AB2").Copy
Sheets("Counter").Visible = True
pasteSheet.Unprotect
Sheets("Counter").Select
    Range("D1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
pasteSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Counter").Visible = False
copySheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Sheet1").Select
    Range("B5").Select
 

Кричи, что закончено.

 Private Sub Workbook_Open()

Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim LastCounterVal As Range
Dim FirstDay As Date
Dim Today As Date
Dim pDate As Date


  Set copySheet = Worksheets("Sheet1")
  Set pasteSheet = Worksheets("Counter")
  Set LastCounterVal = Worksheets("Counter").Range("D1")
  FirstDay = DateSerial(Year(pDate), Month(pDate), 1)
  Today = Date
  
  If FirstDay = Today And LastCounterVal > 30 Then


copySheet.Unprotect
copySheet.Range("AB2").Copy
Sheets("Counter").Visible = True
pasteSheet.Unprotect
Sheets("Counter").Select
    Range("D1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
pasteSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Counter").Visible = False
copySheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Sheet1").Select
    Range("B5").Select
    
    Else
    Sheets("Sheet1").Select
    Range("B5").Select
    
End If
    
End Sub
 

Комментарии:

1. Неужели код не работает? Вы получаете ошибки? Кстати, чтобы проверить, является ли сегодняшняя дата первым числом месяца, все, что вам нужно, это Day(Date) = 1 .

2. Вы никогда не присваиваете значение pDate

3. Привет, спасибо. добавление Day(Date) = 1 , сделало трюк и намного проще и очевиднее.