Извиняюсь, если этот вопрос элементарный, я не очень хорош в 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