Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004

Forumthread: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004

alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
16.07.2024 14:38:09
tuska
Hallo,
ich bitte um Unterstützung bei diesem Thema.
(Achtung: Nur Hobbyanwender - KEINE CODE-Kenntnisse).

Erwähnen möchte ich, dass diese Makros früher ohne Probleme funktioniert haben
jedoch in dieser Konfiguration NICHT mehr funktionieren:

Microsoft® Excel® LTSC MSO (16.0.14332.20734) 64-Bit,
Bestandteil von: Microsoft Office LTSC Professional Plus 2021

Windows 11 Pro (x64) Version 23H2 (OS Build 22631.3880) - Letztes Revisionsdatum: 9.7.2024

Nach Ausführung des Makros "alleMakrosExportieren" erhalte ich folgende Hinweismeldung:
"Laufzeitfehler '1004':
Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher"


... und nach Klick auf den Button "Debuggen" wird mir diese Zeile gelb eingefärbt angezeigt:
For Each vbc In ThisWorkbook.VBProject.VBComponents

-------------------

Nach Ausführung des Makros "alleMakrosImportieren" erhalte ich folgende Hinweismeldung:
"Laufzeitfehler '1004':
Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher"


... und nach Klick auf den Button "Debuggen" wird mir diese Zeile gelb eingefärbt angezeigt:
With ThisWorkbook.VBProject '  Workbooks("Testmappe.xls").VBProject


Beide Makros befinden sich in Modul 471.
Diese Makros habe ich vor sehr langer Zeit integriert, zum jetzigen Zeitpunkt bin ich mir aber nicht sicher,
ob ich in einem neuen Arbeitsblatt den Code in "DieseArbeitsmappe" einfügen muß oder ob ich
ein neues Modul einfügen muß und auf diesem den Code einfügen soll.

Bitte zu diesem Punkt um eine Auskunft.

Danke im voraus für die Bemühungen.

Gruß,
Karl

Option Explicit


Public Sub alleMakrosExportieren()
' von Nepumuk
' Export des gesamten Codes
' aus ThisWorkbook
' vor Export sollten bereits vorhandener Code im Verzeichnis gelöscht werden
' damit es mit dem Import Fehlerfrei geht
Dim vbc As Object, iCounter As Integer, sMacro As String, cType As String
For Each vbc In ThisWorkbook.VBProject.VBComponents
With vbc.CodeModule
For iCounter = 1 To .CountOfLines
If .ProcOfLine(iCounter, 0) > "" Or InStr(1, .Lines(iCounter, 1), "Dim") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Public") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Type") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Static") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Declare") > 0 Then
Select Case vbc.Type
Case 1: cType = ".bas"
Case 2, 100: cType = ".cls" 'Tabelle; DieseArbeitsmape
Case 3: cType = ".frm"
End Select
' Ablagephad
Workbooks(ThisWorkbook.Name).VBProject.VBComponents(vbc.Name).Export _
"D:\Daten\EXCEL\Vorlagen\Makros\" & vbc.Name & cType
Exit For
End If
Next iCounter
End With
Next vbc
End Sub

Public Sub alleMakrosImportieren()
' von Nepumuk
Dim vbc As Object, iCounter As Integer, StDateiname As String
With ThisWorkbook.VBProject ' Workbooks("Testmappe.xls").VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With vbc.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
StDateiname = Dir("D:\Daten\EXCEL\Vorlagen\Makros\" & "*.*")
Do While StDateiname > ""
If UCase(Right(StDateiname, 4)) = ".BAS" Or UCase(Right(StDateiname, 4)) = ".FRM" Or UCase(Right(StDateiname, 4)) = ".CLS" Then
.VBComponents.Import "D:\Daten\EXCEL\Vorlagen\Makros\" & StDateiname
End If
StDateiname = Dir
Loop
For Each vbc In .VBComponents
If vbc.Type = 2 Then
If Left(vbc.Name, 5) = "Diese" Or Left(vbc.Name, 7) = "Tabelle" Then
.VBComponents(Left(vbc.Name, Len(vbc.Name) - 1)).CodeModule.InsertLines 1, vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines)
.VBComponents.Remove .VBComponents(vbc.Name)
End If
End If
Next vbc
End With
End Sub
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
16.07.2024 15:14:46
peter
Hallo

Hast Du schon Deine Einstellungen überprüft:

Optionen
Trustcenter
Makroeinstellungen
Zugriff auf das VBA-Projektmodell (Hacken sollte gesetzt sein)

Peter
AW: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
16.07.2024 16:00:52
tuska
Hallo Peter,

danke für Deine prompte Antwort!

Der Haken bei "Zugriff auf das VBA-Projektobjektmodell vertrauen" war bei mir NICHT vorhanden,
daher habe ich ihn jetzt gesetzt.

Danach hat das Makro "alleMakrosExportieren" den Export durchgeführt!

Im definierten Ordner "D:\Daten\EXCEL\VORLAGEN\Makros\" habe diese Dateien vorhandene Dateien überschrieben
(die Überschreibung der Dateien erfolgte erwartungsgemäß!), uzw wie folgt:
DieseArbeitsmappe.cls; Stk. 21 .bas Dateien wobei nur bei der Datei "Modul47.bas" der Zeitstempel unverändert blieb:

Name/Erw. Letzte Änderung
Modul47.bas 12.05.2013 20:31:44

Vermutlich aufgrund dessen wurden mir nach dem Export nach ALT+F8 diese weiteren Makronamen eingeblendet:
Modul47.alleMakrosExportieren
Modul47.alleMakrosImportieren
Modul4711.alleMakrosExportieren
Modul4711.alleMakrosImportieren

Wahrscheinlich aufgrund dessen waren die ursprünglichen Namen nach ALT+F8 nicht mehr vorhanden:
alleMakrosExportieren
alleMakrosImportieren

Das Makro "alleMakrosImportieren" hat KEINEN Import Import durchgeführt.

Ein Neustart von Excel hat leider nichts gebracht.

Bitte daher um weitere Unterstützung.

Gruß,
Karl

Nachstehend übermittle ich noch den CODE von: Modul47.bas

Attribute VB_Name = "Modul47"

Option Explicit

Public Sub alleMakrosExportieren()
Attribute alleMakrosExportieren.VB_Description = "exportiert alle vorhandenen Makros nach C:\\Windows\\Temp\\DieseArbeitsmappe.cls (Pfad lt. Makro)"
Attribute alleMakrosExportieren.VB_ProcData.VB_Invoke_Func = " \n14"
' von Nepumuk
' Export des gesamten Codes
' aus ThisWorkbook
' vor Export sollten bereits vorhandener Code im Verzeichnis gelöscht werden
' damit es mit dem Import Fehlerfrei geht
Dim vbc As Object, iCounter As Integer, sMacro As String, cType As String
For Each vbc In ThisWorkbook.VBProject.VBComponents
With vbc.CodeModule
For iCounter = 1 To .CountOfLines
If .ProcOfLine(iCounter, 0) > "" Or InStr(1, .Lines(iCounter, 1), "Dim") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Public") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Type") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Static") > 0 _
Or InStr(1, .Lines(iCounter, 1), "Declare") > 0 Then
Select Case vbc.Type
Case 1: cType = ".bas"
Case 2, 100: cType = ".cls" 'Tabelle; DieseArbeitsmape
Case 3: cType = ".frm"
End Select
' Ablagephad
Workbooks(ThisWorkbook.Name).VBProject.VBComponents(vbc.Name).Export _
"D:\Daten\EXCEL\Vorlagen\Makros\" & vbc.Name & cType
Exit For
End If
Next iCounter
End With
Next vbc
End Sub

Public Sub alleMakrosImportieren()
Attribute alleMakrosImportieren.VB_Description = "... importiert sämtliche zuvor exportieren Makros"
Attribute alleMakrosImportieren.VB_ProcData.VB_Invoke_Func = " \n14"
' von Nepumuk
Dim vbc As Object, iCounter As Integer, StDateiname As String
With ThisWorkbook.VBProject ' Workbooks("Testmappe.xls").VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With vbc.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
StDateiname = Dir("D:\Daten\EXCEL\Vorlagen\Makros\" & "*.*")
Do While StDateiname > ""
If UCase(Right(StDateiname, 4)) = ".BAS" Or UCase(Right(StDateiname, 4)) = ".FRM" Or UCase(Right(StDateiname, 4)) = ".CLS" Then
.VBComponents.Import "D:\Daten\EXCEL\Vorlagen\Makros\" & StDateiname
End If
StDateiname = Dir
Loop
For Each vbc In .VBComponents
If vbc.Type = 2 Then
If Left(vbc.Name, 5) = "Diese" Or Left(vbc.Name, 7) = "Tabelle" Then
.VBComponents(Left(vbc.Name, Len(vbc.Name) - 1)).CodeModule.InsertLines 1, vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines)
.VBComponents.Remove .VBComponents(vbc.Name)
End If
End If
Next vbc
End With
End Sub
Anzeige
AW: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
16.07.2024 16:20:02
ralf_b
ich halte es für nicht für clever wenn man die Makros, die gerade laufen löschen will. Auch das kann nämlich einen Zugriffsfehler verursachen und das mit Recht.
AW: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
16.07.2024 17:52:27
tuska
ralf_b

Den Verdacht, dass es zu einem Zugriffsfehler gekommen ist hatte ich auch schon.

Ein Testlauf ist erfolgreich mit einem Import verlaufen.
Werde das Thema nochmals testen und die Schritte dann bekanntgeben.

Danke.
Anzeige
AW: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
16.07.2024 19:09:47
tuska
Leider hat zB folgendes NICHT funktioniert:

- Doppelklick auf Datei "MAKROS_Exportieren-Importieren.xltm" mit Makros "alleMakrosExportieren" u. alleMakrosImportieren
- Öffnen der Datei "Test.xlsx"
- ALT+F8 in der Datei "Test.xlsx"
- Auswahl treffen > Makros in: Alle offenen Arbeitsmappen
- 'MAKROS_Exportieren-Importieren1'!alleMakrosImportieren markieren
- Button "Ausführen" drücken

Erwartetes Ergebnis:
in der Datei "Test.xlsx" sollten jetzt etliche Makros vorhanden sein.

Ergebnis:
Es wurde KEIN Makro in der Datei "Test.xlsx" importiert.
Stattdessen wurden Makros in der noch nicht gespeicherten Datei "Exportieren-Importieren1" importiert.

Interessant in diesem Zusammenhang war für mich auch noch folgendes - für mich unerklärliches:
Ich hatte in der Datei "MAKROS_Exportieren-Importieren.xltm" bei den Makros die Pfade und Dateinamen geändert
VON: D:\Daten\EXCEL\Vorlagen\Makros\ ... AUF: C:\totalcmd\Tools\Excel\Makros\
VON: Testmappe.xls ............................................. AUF: MAKROS_Exportieren-Importieren.xlsm

In der noch nicht gespeicherten Datei "Exportieren-Importieren1" war im Makro der VORHERIGE Pfad und Dateiname vorhanden(!)
In der Datei "MAKROS_Exportieren-Importieren.xltm" ist nach wie vor im Makro der AKTUELLE Pfad und Dateiname vorhanden(!)

Bei so einer Testvariante kann es meines Erachtens kein Zugriffsproblem mehr sein.

Vielleicht hat jemand noch einen Rat?
Ich werde jedenfalls weiterhin selbst versuchen das Problem zu lösen.
Anzeige
AW: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
16.07.2024 19:17:48
Luschi
Hallo tuska,

habe das das Makro von Nepumuk in eine Arbeitsmappe
- mit vielen Vba-Klassen-Formular-Modulen kopiert
- und laufen lassen (Excel 365 / 32-bit)
- und alles lief ohne Komplikationen durch
- und die *.cls, *.frm, *.frx, *.bas Dateien wurden im angepaßten Verzeichnis angelegt (insgesamt 46)

Prüfe doch mal ob das Kontrolkästchen 'Zugriff auf das Vba-Projektobjektmodell vertrauen' gesetzt ist!
- Datei - Optionen - Trust Center - Einstellungen für das Trust Center - Makroeinstellungen

Gruß von Luschi
aus klein-Paris
Anzeige
AW: alleMakrosExportieren, alleMakrosImportieren - LfFehler 1004
17.07.2024 01:54:39
tuska
Hallo Luschi,

danke, dass Du ebenfalls das Thema geprüft hast!

Excel: Menü "Datei" > Optionen > Trust Center > Einstellungen für das Trust Center... > Richtlinientipps:
Richtlinientipp in der Meldungsleiste anzeigen. Wenn Sie dies deaktivieren, werden alle Richtlinientipps deaktiviert,
    es sei denn, in Ihrer Organisation ist die Anzeige von Richtlinientipps obligatorisch.

hatte ich gemäß Hinweis von Peter bereits eingestellt.

Ich bin nur Hobbyanwender ohne Programmierkenntnisse und hatte Verständnisprobleme bei der Verwendung der Makros.
Aufgrund dessen hatte ich keine brauchbaren Ergebnisse erzielt :(

********************************************************************
Jetzt haben bei mir die MAKROS ebenfalls FUNKTIONIERT!
********************************************************************

Ich bin wie folgt vorgegangen:

1. EINRICHTUNG
   Die zwei Makros wurden in der Datei "Excel workbook with macros - template.xltm" angelegt.

2. Makro "alleMakrosExportieren" - PFAD für den Export definieren
Den Pfad (nur Beispiel!) habe ich wie folgt eingestellt (komplette Codezeile):
"C:\totalcmd\Tools\Excel\Makros\" & vbc.Name & cType

---------------------------------------------------------------------------------------------------------
3. Makro "alleMakrosImportieren"
a. DATEI erstellen (.xlsm) ohne Makros möglich (Nur "Platzhalter"), zB "_MAKROS_Importieren.xlsm"
im Pfad: C:\totalcmd\Tools\Excel\Makros\ (nur Beispiel!)
Wenn diese Vorgangsweise NICHT eingehalten wird, dann werden beim Import weitere Makros,
die sich im Pfad: C:\totalcmd\Tools\Excel\Makros\ befinden können, NICHT importiert!

b. DATEINAMEN der gespeicherten Arbeitsmappe definieren (.xlsm) (komplette Codezeile):
With ThisWorkbook.VBProject '  Workbooks("_MAKROS_Importieren.xlsm").VBProject

Siehe auch Punkt 3.a.
---------------------------------------------------------------------------------------------------------

c. PFAD für den Import definieren
Hier wird der Ort festgelegt von dem sich das Makro "alleMakrosImportieren"
die gespeicherten Makros holen soll (komplette Codezeilen):
StDateiname = Dir("C:\totalcmd\Tools\Excel\Makros\" & "*.*")

.VBComponents.Import "C:\totalcmd\Tools\Excel\Makros\" & StDateiname

---------------------------------------------------------------------------------------------------------------------------

4. IMPORT von Makros
a. BACKUP von Makros erstellen.
VOR Durchführung des Imports den Inhalt von: Ordner "Makros" in C:\totalcmd\Tools\Excel\ prüfen und ein Backup anlegen.
b. VOR dem Import habe ich diese Makros in diesem Pfad: C:\totalcmd\Tools\Excel\ temporär nach C:\TMP VERSCHOBEN!
C:\totalcmd\Tools\Excel\Makros\Modul18.bas - Makro: auto_open
C:\totalcmd\Tools\Excel\Makros\Modul47.bas - Makros: "alleMakrosExportieren" und "alleMakrosImportieren"
(Nach dem Import wurden diese Dateien wieder an den ursprünglichen Ort transferiert - siehe Punkt 4.e.).
c. PRÜFEN der EINSTELLUNGEN in den Makros, speziell beim Makro "alleMakrosImportieren" - Punkt 3.a.
d. IMPORT DURCHFÜHREN
- Doppelklick auf Datei "C:\totalcmd\Tools\Excel\Excel workbook with macros - template.xltm"
(Diese Datei beinhaltet eine Makrosammlung für den täglichen Gebrauch).
- AUFRUF des Makros mit ALT+F8 > Makronamen anklicken > Button "Ausführen" drücken
Mit erneutem Aufruf von ALT+F8 kann geprüft werden ob zB neu hinzugekommene Makros importiert wurden.
[Mit dem Shareware-Tool: FastStone Capture, dzt. Version 10.6 - 10.7.2024 https://www.faststone.org/FSCaptureDetail.htm
kann man sich mit der Funktion "Bildlauffenster erfassen" eine Hardcopy mit Inhalt von sämtlichen Makronamen erstellen].
e. Transferierung der temporär nach C:\TMP verschobenen Dateien: Modul18.bas und Modul47.bas -> siehe Punkt 4.b.
an den ursprünglichen Ort: C:\totalcmd\Tools\Excel\.

Vielen Dank auch für die Hinweise von peter und ralf_b!

Gruß,
Karl

Windows 11 Pro (x64) Version 23H2 (OS Build 22631.3880) - Letztes Revisionsdatum: 9.7.2024 -> https://aka.ms/Windows11/ReleaseInfo
Microsoft® Excel® LTSC MSO (16.0.14332.20734) 64-Bit, Bestandteil von: Microsoft Office LTSC Professional Plus 2021
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige