aus einer Arbeitsmappe wird per Commandbutton4 zunächst das Passwort der VBA-Umgebung aufgehoben und anschließend Module und UserForms ausgetauscht. Das funktioniert jedoch korrekt nur, wenn ich vorher bereits im Code war, also das VBA-Kennwort aufgehoben und ein Codefenster aktiviert habe. Erstmal der Code:
Teil 1 - der Code nach Klick auf CommandButton4:
Private Sub CommandButton4_Click()
'Update Tool - Aufruf Passwort aufheben und Austausch der Module und UserForms
Dim box
box = InputBox("Passwort für Tool-Update!")
If box = "aktual" Then
Call VBA_Kennwort("key")
ModuleCodeUpdate
Else
MsgBox ("Passwort nicht korrekt!")
End If
End Sub
Teil 2: Code für Aufheben des Passworts:
Sub VBA_Kennwort(FreiSchaltCode)
SendKeys ("%{F11}"), True
If Application.VBE.ActiveVBProject.Protection Then
Select Case Val(Application.Version)
Case 5 To 8
SendKeys ("%xs" & FreiSchaltCode & "{ENTER}{ENTER}"), True
Case Else
SendKeys ("%xi" & FreiSchaltCode & "{ENTER}{ENTER}"), True
SendKeys ("%Dh"), True
End Select
End If
End Sub
Teil 3: Das Modul Codeupdate zum Austausch der Module und UserForms:
Sub ModuleCodeUpdate()
'Löscht die vorhandenen Module und UserForms aus dem aktiven Workbook
On Error Resume Next
With ActiveWorkbook.VBProject
.VBComponents.Remove .VBComponents("Modul2")
.VBComponents.Remove .VBComponents("UserForm1")
.VBComponents.Remove .VBComponents("UserForm2")
.VBComponents.Remove .VBComponents("UserForm3")
End With
'Import Module
Application.VBE.ActiveVBProject.VBComponents.Import _
"O:\Komponenten\Zentrale\Module\Modul2.bas"
'Import UserForms
Application.VBE.ActiveVBProject.VBComponents.Import _
"O:\Komponenten\Zentrale\UserForms\UserForm1.frm"
Application.VBE.ActiveVBProject.VBComponents.Import _
"O:\Komponenten\Zentrale\UserForms\UserForm2.frm"
Application.VBE.ActiveVBProject.VBComponents.Import _
"O:\Komponenten\Zentrale\UserForms\UserForm3.frm"
End Sub
Wenn ich den Button4 (so wie gedacht) "einfach so" nach Öffnen der Datei ausführe, werden manchmal die Module und UserForms nur gelöscht aber keine neuen eingefügt. Meistens aber werden alle Komponenten korrekt ausgetauscht, das Modul2 wird jedoch Modul21 genannt, weil anscheinend zuerst das neue Modul eingefügt wird und erst dann das alte gelöscht wird.
Hat vielleicht jemand einen Tipp, warum das so ist und wie ich das ändern müsste?
Vielen Dank und schöne Grüße,
Jochen