Run-Macro-in-protected-Project
06.09.2021 17:06:31
Hendrik
Ich habe vor einem Jahr eine Makro-Vorlage gebaut, mit denen Projekte kalkuliert werden.
Nennen wir Sie Vorlage B.
D.h., es liegen mittlerweile über 100 verschiedene Projekte vor, die alle im Format der Vorlage B vorliegen.
Also B1, B2 usw.
Die Vorlage B hat ca. 32 Tabellenblätter, von denen ich für mein neues Tool (siehe folgend) nur die Abschlusstabelle 15 benötige.
Die Vorlage B ist so aufgebaut, dass beim Öffnen der Datei nur das Tabellenblatt 1 angezeigt wird. Den Rest lässt man sich spezifisch einblenden.
Nun baue ich eine neue Datei, die eine Analyse dieser Projekte vornehmen soll.
Nennen wir Sie Vorlage A.
Dazu versuche ich, alle Projekte mit Vorlage B, die ich gerne untersuchen möchte, in einen Ordner zu werfen, und dass diese dann von meiner neuen Vorlage A durchgegangen werden.
Problem:
Um die o.g. Abschlusstabelle 15 anzuzeigen, muss ich also erst die Datei mit open-workbooks öffnen lassen und dann das in der Vorlage vorliegende Modul "alle_einblenden" ausführen (run).
Dies funktioniert leider nicht, weil das VBA-Projekt passwortgeschützt ist.
Wie kriege ich es hin, dass er, nachdem er mit open-workbooks die Datei geöffnet hat, die VBA-Umgebung mit dem vorliegenden Passwort ("Test") aktiviert, sodass ich dann mit Application.Run das benötigte "Sub" ausführen kann?
Ich dachte, ich hätte eine Lösung für die Passworteingabe gefunden (siehe im Code in fett und kursiv), aber das funktioniert nicht.
Sub Bereich_importieren()
Dim directory As String
Dim fileName As String
Dim sheet As Worksheet
Dim total As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
directory = "C:\meinpfad\Test\"
fileName = Dir(directory & "*.xl?")
Do While fileName ""
Workbooks.Open (directory & fileName)
ActiveWorkbook.Activate
Application.Run fileName & "!alle_einblenden", Password:="Test"
For Each sheet In Workbooks(fileName).Worksheets
total = Workbooks("Gesamtdatei").Worksheets.Count
Workbooks(fileName).Worksheets("Name der Tabelle15").Copy _
after:=Workbooks("Gesamtdatei").Worksheets(total)
Next sheet
Workbooks(fileName).Close
fileName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Vielen lieben Dank im Voraus fürs Lesen. Ich habe versucht, sehr genau zu sein, aber wenn noch Informationen benötigt werden, liefere ich die gerne nach :-)Beste Grüße
Hendrik