Я хочу изменить код, чтобы макрос запускался сразу после открытия книги - PullRequest
0 голосов
/ 25 января 2019

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

Я пытался закодировать его в «этой книге», но не могу понять, как это сделать.Я также пытался сделать это в «модуле», но не смог.

 Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  'vps
  Dim x As Long
  x = 7
  ThisWorkbook.ActiveSheet.Unprotect Password:="123456"
  ThisWorkbook.ActiveSheet.Cells.Locked = False
  Do Until IsEmpty(Cells(5, x))
    If Cells(5, x) <> Date Then
      Columns(x).Locked = True
    End If
    x = x + 1
  Loop
  ThisWorkbook.ActiveSheet.Protect Password:="123456"
  End Sub

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

1 Ответ

0 голосов
/ 25 января 2019

Блокировка ячеек на книге Открыть

Особенности

  • Чтобы запустить следующий (или любой) макрос при открытии книги, у вас есть использовать его событие Workbook_Open. В VBA дважды щелкните ThisWorkbook. В в первом раскрывающемся списке выберите «Рабочая книга», а во втором выберите «Открыть».
  • Для каждого листа в книге, содержащей этот макрос, снимите защиту это и разблокирует все клетки. Затем проверяет указанный диапазон строк для дат и блокирует ячейки целых столбцов, где сегодняшняя дата не была найдена. Наконец защищает рабочий лист.
  • Кроме того, цвет внутри будет отличаться в клетках, где сегодняшняя дата была найдена.

Ссылки

Загрузка рабочей книги (Dropbox)

Код

Стандартный модуль, например, Module1

Sub ProtectPrevious()

    Const cRow As Long = 5        ' Date Row Number
    Const cFirstC As Variant = 7  ' First Column Letter/Number e.g. 7 or "G"
    Const cToday As Long = 6      ' Today Cell ColorIndex e.g. 6 is Yellow
    Const cDays As Long = 15      ' Other Days ColorIndex e.g. 15 is some Gray

    Dim ws As Worksheet   ' Current Worksheet
    Dim LastC As Long     ' Last Column Number
    Dim j As Integer      ' Column Counter

    For Each ws In ThisWorkbook.Worksheets
        With ws
            ' Prepare for processing.
            .Unprotect Password:="123456"
            .Cells.Locked = False
            ' When there is no data in Date Row, continue with next worksheet.
            If .Rows(cRow).Find("*", .Cells(cRow, _
                    .Columns.Count), -4123, , 1) Is Nothing Then Exit For
            ' Calculate Last Column Number
            LastC = .Rows(cRow).Find("*", , -4123, , 1, 2).Column
            ' Remove formatting from other day(s) in Date Row.
            With .Range(.Cells(cRow, cFirstC), .Cells(cRow, LastC))
                .Interior.ColorIndex = cDays
            End With
            ' Loop through columns: from First Column to Last Column.
            For j = cFirstC To LastC
                If .Cells(cRow, j) <> Date Then
                    .Columns(j).Locked = True
                  Else
                    ' Apply formatting to 'today' in Date Row.
                    With .Cells(cRow, j)
                        .Interior.ColorIndex = cToday
                    End With
                End If
            Next
            .Protect Password:="123456"
        End With
    Next

End Sub

ThisWorkbook

Private Sub Workbook_Open()
    ProtectPrevious
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...