Отправить ключи, чтобы разблокировать VBA проектОтправить ключи, чтобы отпереть проекта VBA Excel 2013
Любой Я несколько продвинуты в макро письменной форме, однако это все-самоучка от этого сайта, и я не в полной мере понять большое изображение
Я пытаюсь создать лист распространения Excel, который обновит код VBA другого листа распространения Excel, который имеет защищенный паролем проект VBA. Я использую SendKeys для разблокировки проекта VBA. Я также решаю проблему с недостатками SendKey, написав скрипт, чтобы закрыть все открытые документы Excel.
Все код, который я написал работу по своему собственному, но когда я пытаюсь совместить его SendKey макроса размещения пароля в других строках коды:
Это работает:
Sub UnprotectProject()
With Application
.SendKeys "%{F11}", True
.SendKeys "^r", True
.SendKeys "~", True
.SendKeys "password", True
.SendKeys "~", True
End With
End Sub
Это вставляет пароль в другой VBA Код:
Sub UnprotectProject()
With Application
.SendKeys "%{F11}", True
.SendKeys "^r", True
.SendKeys "~", True
.SendKeys "password", True
.SendKeys "~", True
End With
Application.VBE.MainWindow.Visible = False
End Sub
Обновление:
Бо го набора кода одинаковы, за исключением, следующая строка во втором примере
Application.VBE.MainWindow.Visible = False
Полный код Я пытаюсь написать пять задач, я создал макрос для каждой задачи, а затем еще один макрос для запуска пять макросов. Каждый макрос выполняет задание при автономном запуске. Однако, когда я пытаюсь запустить макрос, который объединяет отдельные задачи, макрос с send keays терпит неудачу, и вместо разблокировки VBA Project он вставляет пароль в код одного из макросов отдельной задачи. Это пять задач
Open (Открыть книгу для изменения)
Unprotect VBA Project
Обновление VBA код
Обновление Рабочий лист
SaveAs новая версия
Это макрос я написал для выполнения отдельных задач Sub UsernameCheck()
lastRow = Sheets("update").Range("I" & Rows.count).End(xlUp).Row
Uname = Environ("Username")
Set aCell = Sheets("update").Range("I4:I" & lastRow).Find(What:=Uname, MatchCase:=False)
If aCell Is Nothing Then
MsgBox ("Not an Authorised User")
Else
Open_1
UnprotectProject
ChangeDateAddUserCheck
UpdateDashBoard
Save
End If
End Sub
Это код, я использую для редактирования макроса
Sub ChangeDateAddUserCheck()
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim S As String
Dim LineNum As Long
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
'Delete
VBComp.CodeModule.DeleteLines 15, 4
'add Code
Set CodeMod = VBComp.CodeModule
LineNum = 15
S = "yr = Format(Now(), ""YYYYMMDD"")" & vbCrLf & _
"If UCase(Sheets(""DashBoard"").Range(""B21"").Value) = UCase(Environ(""Username"")) Then" & vbCrLf & _
"If yr < 20160601 Then B2_Stage Else MsgBox (""Software is Expired"")" & vbCrLf & _
"Else: MsgBox (""Not Authorized User"")" & vbCrLf & _
"End If"
CodeMod.InsertLines LineNum, S
End Sub
Пароль вставляется в код a Бова между folloing линиями, но я думаю, что имеет больше общего с размещением макроса в редакторе VBA
Dim LineNum As Long
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module2")
См. [Здесь] (http://stackoverflow.com/questions/16174469/unprotect-vbproject-from-vb -код/16176557 # 16176557) для блестящего трюка Сида. – findwindow
@findwindow That * - * блестящий. Спасибо, что указали это. –
@David Zemens Я ищу что-то конкретное и прочитал все сообщения с помощью sendkeys, так как я отключил макрос, но не в сочетании с другими макросами. –