Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
784to788
784to788
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Dateien mit deaktivierten Makros öffnen
21.07.2006 11:04:55
{Boris}
Hallo zusammen,
wie kann man per VBA Dateien mit deaktivierten Makros öffnen?
Hintergrund: Ich möchte in allen Dateien eines Ordners (alle gleicher Aufbau) Änderungen vornehmen (nur eine kleine Sortierroutine) und sie wieder speichern. In den Dateien gibt es aber Ereigniscodes mit der End-Anweisung, die mein aufrufendes Makros natürlich beendet. Die Events auszuschalten funktioniert auch nicht.
Wie geht das?
Hier der Vollsändigkeit halber mein Code:
Option Explicit

Sub Alle_Dateien()
Const PFAD As String = "H:\Eigene Dateien\Mein Ordner"
Dim i As Long
With Application.FileSearch
.LookIn = PFAD
.Filename = "*.xls"
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count
Call mach_was(.FoundFiles(i))
Next icounter
End With
End Sub


Sub mach_was(S As String)
Dim Wb As Workbook
Dim Ws As Worksheet
Set Wb = Workbooks.Open(S)
Set Ws = Wb.Worksheets("Tabelle1")
With Ws
'Hier kommt die Sortierroutine
End With
Wb.Close True
End Sub

Grüße Boris

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien mit deaktivierten Makros öffnen
21.07.2006 11:12:27
Matthias
Hallo Boris,
stelle die Makrosicherheit auf "mittel", das ist sowieso sicherer.
Dann die Mappe öffnen und die Frage nach aktivieren der Makros verneinen.
Gruß Matthias
Nein, das ist es nicht
21.07.2006 11:19:38
{Boris}
Hi Matthias,
die steht schon auf mittel. Die erste Mappe öffnet sich ja auch problemlos - aber mein aufrufendes Makros bricht ab, weil in der ersten Mappe (und in allen anderen auch) Ereigniscodes drin sind, die die End-Anweisung enthalten. Und damit wird auch mein aufrufendes Makro beendet.
Danke trotzdem und
Grüße Boris
AW: Nein, das ist es nicht
21.07.2006 11:25:25
Heiko
Hallo Boris,
Application.EnableEvents = False
Workbooks.Open ...
Application.EnableEvents = True
Hilft wirklich nicht.
Bei werden die Makros in der zu öffenden Mappe damit nicht mehr ausgeführt, gerade getestet.
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Nein, das ist es nicht
21.07.2006 11:28:32
Matthias
Hallo Heiko,
das:

Application.EnableEvents = False
Workbooks.Open ...
Application.EnableEvents = True

...wollte ich gerade auch vorschlagen.
Ich glaube aber schon, dass es was nützt, den es werden ja temporär nur die Ergeinismakros abgeschaltet.
Gruß Matthias
Nein, es nützt nichts...
21.07.2006 11:32:30
{Boris}
Hi ihr 2,
...ich habe es getestet. Die zu öffnenden Dateien enthalten ne Menge Makros - unter anderem auch Steuerelemente (Change_Ereignis). Und die lassen sich durch die Events nicht abschalten. Da scheint wohl das Problem zu liegen.
Noch Ideen?
Grüße Boris
Anzeige
AW: Nein, es nützt nichts...
21.07.2006 11:35:58
Matthias
Hallo Boris,
und wenn du die Events während der ganzen Laufzeit abschaltest?

Sub mach_was(S As String)
Application.EnableEvents = False
Dim Wb As Workbook
Dim Ws As Worksheet
Set Wb = Workbooks.Open(S)
Set Ws = Wb.Worksheets("Tabelle1")
With Ws
'Hier kommt die Sortierroutine
End With
Wb.Close True
Application.EnableEvents = True
End Sub

Es darf halt im Code der geöffneten Mappe kein .EnableEvents = True ausgeführt werden.
Gruß Matthias
Und es hilft immer noch nicht...
21.07.2006 12:01:05
{Boris}
Hi Mathias,
erstens werden natürlich innerhalb des Codes der Mappe die Events irgendwo wieder angeschaltet und zweitens haben die Events augenscheinlich keine Auswirkung auf die Ereignisse von Steuerelementen. Die Sortierroutine sortiert nämlich den ListFillRange einer Combobox - und dabei wird das Change-Ereignis selbiger ausgelöst, das wiederum irgendwo zu einer End-Anweisung gelangt.
Danke für Dein Mitdenken!
Grüße Boris
Anzeige
AW: Und es hilft immer noch nicht...
21.07.2006 12:05:17
Matthias
Hallo Boris,
hmmm, und es sind ganz viele Mappen mit diesem Code, der lässt sich also nur schwer für alle ändern...
Weil, du könntest doch die End-Anweisung in eine Exit Sub-Anweisung ändern, oder?
Gruß Matthias
Und auch das geht nicht...
21.07.2006 12:16:31
{Boris}
Hi Matthias,
...oder wäre zu umständlich:
du könntest doch die End-Anweisung in eine Exit Sub-Anweisung ändern
Zunächst mal ist der Code in allen Mappen implementiert (und läuft auch einwandfrei), weiterhin gibt´s viele sich gegenseitig aufrufende Routinen, aus denen ich in manchen Fällen nicht einzeln (Exit Sub) sondern Gesamt (End) aussteigen muss.
Ich seh mich schon alle Mappen händisch öffnen...
Grüße Boris
Anzeige
AW: Dateien mit deaktivierten Makros öffnen
21.07.2006 12:32:40
FP
Hallo {Boris},
also bei mir hat
Application.EnableEvents = False
vor dem öffnen einer Beispielmappe mit VBA-Code geholfen ( Die Ereignis-Codes wurden NICHT ausgeführt )
Und was soll ohne Ereignis dann laufen ?
Servus aus dem Salzkammergut
Franz
Nein
21.07.2006 12:36:29
{Boris}
Hi Franz,
mit EnableEvents kann man NICHT die Ereignisse vom Steuerelementen ausschalten.
Und davon gibt´s in den Mappen nunmal welche (Change-Ereignisse, die zur End-Anweisung führen).
Und was soll ohne Ereignis dann laufen ?
In den Mappen soll gar nichts laufen. Ich möchte nur einen ganz bestimmten Bereich darin aufsteigend sortieren. Da dieser Bereich aber der ListFillRange einer Combobox ist, wird deren Change-Ereignis ausgelöst, das wiederum irgendwo mit der End-Anweisung endet.
Daher meine Frage: Kann man ALLE Ereignisse beim Öffnen einer Mappe ausschalten?
Grüße Boris
Anzeige
AW: Nein
21.07.2006 12:41:45
Heiko
Hallo Hallo Boris,
das mit den Steuerelementen ist richtig die lassen sich nicht mit EnableEvents wegschalten.
Also neuer Vorschlag, die Dateien in einer 2. Excel-Instanz öffnen. Den Code habe ich mal auf die Schnelle gemacht darum kein Kommentar zur Programmierung.
Aber damit konnte ich eine Excel Mappe öffen in der Makros drin sind und ich habe die änderungen da rein bekommen. Mein Makro test lief aber weiter (trotz End Anweisungen in Mappe1).
Muss du halt mal testweise in ne Scheife einbauen.

Sub test()
Dim xlApp As Excel.Application
Dim wksSheet As Worksheet
Set xlApp = CreateObject("Excel.Application")
On Error GoTo errorhandler
xlApp.Workbooks.Open ThisWorkbook.Path & "\Mappe1.xls"
Set wksSheet = xlApp.ActiveWorkbook.Worksheets("Tabelle1")
wksSheet.Range("A1").Value = 12345
xlApp.ActiveWorkbook.Save
xlApp.ActiveWorkbook.Close
xlApp.Quit
MsgBox "Fertig"
Exit Sub
errorhandler:
MsgBox "Error " & Err.Number & "   " & Err.Description
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
Hervorragend!
21.07.2006 13:16:37
{Boris}
Hi Heiko,
die neue Instanz hat´s gebracht! Läuft wunderbar durch - und ist schon alles erledigt.
Vielen Dank dafür (und auch allen anderen für´s Mitdenken).
Grüße Boris

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige