Автоматический запуск двух кодов VBA при открытии книги Excel - PullRequest
0 голосов
/ 13 марта 2019

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

Sub test2()
    Dim c As Range
    For Each c In Range("A1:A1").Cells
        c.Select
        SendKeys "{F2}", True
        SendKeys "{ENTER}", True
    Next
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCell As Range
    If Target.Address <> Range("A1").Address Then Exit Sub
    Application.ScreenUpdating = False
    For Each xCell In Range("B3:P3")
        xCell.EntireColumn.Hidden = (xCell.Value < Target.Value)
    Next
    Application.ScreenUpdating = True
End Sub

Он отлично работает вручную.

Я пробовал Sub Workbook_Open, но это не работает. Я попытался в модуле, в листе и в ThisWorkbook тоже. Не удалось заставить его работать автоматически при открытии книги.

Этот код должен F2 + войти в ячейку A1 и затем скрыть некоторые столбцы в зависимости от значения в A1.

Я изменил код следующим образом:

Private Sub Workbook_Open()
     test2
End Sub
Sub test2()
    Dim c As Range
    For Each c In Sheets("MySheet").Range("A1:A1").Cells
        c.Select
        SendKeys "{F2}", True
        SendKeys "{ENTER}", True
    Next
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCell As Range
    If Target.Address <> Range("A1").Address Then Exit Sub
    Application.ScreenUpdating = False
    For Each xCell In Range("B3:P3")
        xCell.EntireColumn.Hidden = (xCell.Value < Target.Value)
    Next
    Application.ScreenUpdating = True
End Sub

Когда открывается рабочий лист, он начинает работать, выполняет первую часть (F2 + Enter), но на этом останавливается. Не выполняет эту часть:

Private Sub Worksheet_Change(ByVal Target As Range)

        Dim xCell As Range
        If Target.Address <> Range("A1").Address Then Exit Sub
        Application.ScreenUpdating = False
        For Each xCell In Range("B3:P3")
            xCell.EntireColumn.Hidden = (xCell.Value < Target.Value)
        Next
        Application.ScreenUpdating = True
    End Sub

Код, написанный на Листе 1 (не «ThisWorkbook»), вручную работает хорошо (не автоматически).

Тот же код, написанный в «ThisWorkbook», начинает выполняться автоматически при открытии файла, но останавливается в середине (как упоминалось ранее).

1 Ответ

0 голосов
/ 13 марта 2019

Я думаю, что вы делаете чрезмерное проектированиеВ настоящее время вы хотите:

  • Вызвать открытый Workbook_Open
  • ... макрос test2, который имитирует изменение листа (нажав F2 и Enter), поэтомучто ...
  • ... вызывается код внутри Worksheet_Change.

На самом деле, вы действительно хотите иметь код, который теперь находится внутри Worksheet_Changeвнутри Workbook_Open.

Итак:

  1. Удалить test2
  2. Удалить код из Worksheet_Change
  3. Добавить код прямо внутри Workbook_Open следующим образом:

    Private Sub Workbook_Open()
        Dim xCell As Range
        Dim Target As Range: Set Target = Sheets("yourSheet").Range("A1")
        Application.ScreenUpdating = False
        For Each xCell In Sheets("yourSheet").Range("B3:P3")
            xCell.EntireColumn.Hidden = (xCell.Value < Target.Value)
        Next
        Application.ScreenUpdating = True
    End Sub
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...