VBA Help - Скрипт для запуска 3-х макросов через функцию Call не запускает все макросы - PullRequest
0 голосов
/ 07 января 2019

Извиняюсь, если этот вопрос элементарный, я не очень хорош в VBA. У меня есть 3 отдельных кода, которые я хочу запускать один за другим по нажатию кнопки. Так что у меня есть мастер-код под названием UpdateLinks, который должен вызывать их. Первые 2 (PreSelect & UpdateLinksCode) запускают 3-й (PostSelect) нет. По отдельности они все работают.

Цель - обновить ссылки на внешние книги Excel без необходимости ввода пароля вручную. Для этого и нужен макрос UpdateLinksCode. Однако если связанный источник не требует пароля, UpdateLinksCode удалит пароль в любой ячейке, выбранной перед запуском. Следовательно PreSelect & PostSelect - предполагается удалить пароль и предотвратить воздействие.

Это основной код:

Sub UpdateLinks()

    Call PreSelect
    Call UpDateLinksCode
    Call PostSelect

End Sub

Индивидуальные, как показано ниже:

Sub PreSelect()

    Sheets("Sheet1").Select
    Range("A1").Select

End Sub

Sub UpDateLinksCode()

    Const PWord As String = "password"
    Dim xlLinks
    Dim i As Integer
    xlLinks = ThisWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(xlLinks) Then
        For i = 1 To UBound(xlLinks)
            SendKeys PWord & "{Enter}"
            ThisWorkbook.UpdateLink Name:=xlLinks(i)
        Next i
        End If

End Sub

Sub PostSelect()

    Sheets("Sheet1").Select
    Range("A1").Select
    Selection.ClearContents

End Sub

Это кажется простым, но я не могу взломать его.

Обновление: оцените все входные данные. Теперь я изменил код, чтобы сидеть в модуле и ссылаться на лист по имени. Я удалил функции вызова и разделил коды и сжал их до одной. При отладке или выполнении пошаговых инструкций ошибок нет.

Однако, существует та же проблема в том, что после «ключей отправки» не будет выполняться никакой другой код. «Диапазон (« А1 »). Выбор» должен быть там, потому что, что-то, связанное с синхронизацией появления окна запроса пароля и клавишами отправки, вводящими пароль, приводит к тому, что половина пароля вводится в какую-либо ячейку выделяется при запуске кода. Поэтому я помещаю его в ячейку A1, в которой фон и текст имеют белый цвет.

Текущий код, как показано ниже:

Sub Update_links()
Worksheets("Staff Rota 2019").Unprotect "broncko"

Range("A1").Select

Dim PWord As String
PWord = "stevefinnan"
SendKeys PWord & "{Enter}"
ActiveWorkbook.UpdateLink Name:= _
"Y:\a - Staff Rota\Staff Rota 2019.xlsm", _
 Type:=xlExcelLinks

Worksheets("Staff Rota 2019").Protect "broncko", DrawingObjects:=True, 
Contents:=True, Scenarios:=True

end sub

1 Ответ

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

Этот код должен быть в коде рабочего листа, а не в модуле, поскольку вы отвечаете на событие кнопки. Проблема в том, что вы выбираете другой лист Sheets("Sheet1").Select, и в этот момент должен быть запущен какой-то другой код.

Переместите код в модуль и обратитесь к конкретным рабочим листам напрямую ( не используйте оператор выбора ).

например:

Worksheets("Sheet1").Range("A1").ClearContents
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...