Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Problem bei mittels Hyperlink geöffneter xlsm-Datei mit Open_Workbook

Problem bei mittels Hyperlink geöffneter xlsm-Datei mit Open_Workbook
15.01.2020 10:08:10
Phil
Hallo Leute!
hier meine Problemstellung: Aus einer Word-Datei heraus soll eine Excel-Datei (Zieldatei) geöffnet werden. In dieser Exceldatei soll ein Autofilter einer Tabelle mit einem Kriterium versehen werden.
Mein Lösungsansatz: In der Word-Datei befindet sich ein Hyperlink, über den sich eine "Zwischendatei" öffnen lässt. Beim Öffnen der Zwischendatei wird mittels Workbook_Open ein Code ausgeführt, der die Zieldatei öffnet und den Filter entsprechend setzt.
Das Problem: Öffne ich die Zwischendatei händisch, funktioniert der Code einwandfrei. Auch beim Öffnen der Zwischendatei über den Hyperlink läuft der Code reibungslos durch. Jedoch wird nach der letzten Code-Sequenz die Zieldatei nicht angezeigt. Auf dem Bildschirm erscheint nur die Excel-App ohne geöffnetes Sheet.
Was ich bereits versucht habe:
Zunächst dachte ich, es liegt an irgendwelchen Sicherheitseinstellungen. Wenn die per Hyperlink geöffnete Zwischendatei jedoch in geschützter Ansicht geöffnet wird (Makros müssen zunächst per Klick aktiviert werden) dann funktioniert alles wunderbar und liefert das korrekte Ergebnis (was ja nicht unbedingt logisch ist). Ist die Zwischendatei jedoch als vertrauenswürdige Datei eingestuft, erscheint am Ende nur die Excel-App ohne geöffnetes Sheet.
Am Ende des Codes möchte ich die Zwischendatei sinnvoller Weise schließen. Ich habe vermutet, dass ich dabei einen Fehler mache. Das Schließen der Zwischendatei habe ich deshalb komplett aus dem Code entfernt, daran kann es also auch nicht liegen.
Am Ende des Codes habe ich Application.visible eingefügt - bringt nichts (keine Ahnung was das genau ist, pure Verzweiflung).
Am Ende des Codes habe ich die Zieldatei erneut angewählt, ein Sheet aktiviert etc. bringt alles nichts.
Hier der gekürzte Code der Zwischendatei (ich bin absolut kein VBA Profi, mir ist also bewusst, dass man den Code bestimmt viel besser gestalten kann...):

Public Sub Workbook_Open()
Application.Visible = True
Call Zeug
Application.Workbooks("NGUS-10000-000.xlsm").Activate 'bringt nix
ActiveWorkbook.Sheets("docindex").Select 'bringt nix
Application.Visible = True 'bringt nix
End Sub
Sub Zeug()
Dim Var1 As String
Dim Filename As String
Filename = ThisWorkbook.Name
Var1 = Left(Filename, 10)

Application.Workbooks.Open "Zieldatei" Application.Workbooks("Zieldatei").Activate Application.Visible = True ActiveWorkbook.Sheets("docindex").Select
Call resetfilters
ActiveWorkbook.ActiveSheet.ListObjects("docindex").Range.AutoFilter Field:=9, Criteria1:="*" _ + Var1 + "*" ActiveWorkbook.ActiveSheet.ListObjects("docindex").Range.AutoFilter Field:=14, _
Criteria1:="released"
Application.Workbooks("NGUS-10000-000.xlsm").Activate End Sub
Sub resetfilters()
Filter der Zieldatei werden zurückgesetzt
End Sub

Vielen Dank im Voraus für die Hilfe!
MfG Phil

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ungewöhnlich
15.01.2020 10:44:42
Fennek
Hallo,
da VBA im Office-Paket alle Programme steuern kann, ist der "normale" Weg, in Word auch den VBA-Code für Excel einzufügen, also ohne die mögliche Komplikation "Workbook_Open()". Dabei stehen allerdings die Konstanten nicht zur Verfügung und müssen durch die numerischen Äquivalente ersetzt werden.
mfg
AW: ungewöhnlich
15.01.2020 12:18:38
Phil
Hallo Fennek,
Danke für die Rückmeldung!
Klar, der "normale" Weg erscheint zunächst passend. Da aber diese Vorgehensweise nicht nur für ein Zieldokument und auch nicht für eine Word-Datei sondern für sehr viele Dateien angewendet werden soll, würde das erfordern, jedes dieser Word-Dokumente mittels VBA Programmierung anzupassen.
Da die Word-Dateien jedoch von Usern erstellt werden, die keine VBA Kenntnisse besitzen, ist das ausgeschlossen.
Ergänzende Info:
Die ersten 10 Zeichen des Namens der Zwischendatei entsprechen dem Suchkriterium in der Zieldatei. Da es sich hier um eine "hochzählende" ID handelt, kann für jeden Eintrag in der Zieldatei eine Zwischendatei erzeugt werden.
Anwender, die nun die Hyperlinks verwenden/eintragen, müssen nur den Pfad zu den Zwischendateien und die Dokumenten-ID des zu findenden Zieleintrags kennen (was erheblich leichter zu vermitteln ist, als die entsprechende VBA-Programmierung).
In der Zieldatei können durchaus mehrere Einträge mit der ID vorhanden sein (alte Stände bleiben zu Nachvollziehbarkeitszwecken weiter unter derselben ID eingetragen), weswegen zusätzlich nach dem Kriterium "released" gefiltert wird. Somit findet der User nur die derzeit gültigen Einträge zur ID. Bei einem Update des Eintrags müssen nicht alle Word-Dokumente angepasst werden.
VG
Anzeige
AW: Problem bei mittels Hyperlink geöffne...
15.01.2020 17:09:10
Phil
Hallo nochmal,
ich habe weiter gesucht und bin auf felgendes gestoßen:
https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/end-statement
Dort findet sich folgender Hinweis:
[!HINWEIS] Mit der End -Anweisung wird die Codeausführung abrupt beendet, ohne das Unload-, QueryUnload- oder Terminate-Ereignis oder beliebigen anderen Visual Basic-Code aufzurufen. Code, den Sie in den Unload-, QueryUnload- und Terminate-Ereignissen von Formularen und Klassenmodulen platziert haben, wird nicht ausgeführt. Aus Klassenmodulen erstellte Objekte werden zerstört, Dateien, die mit der Open -Anweisung geöffnet wurden, werden geschlossen, und der vom Programm verwendete Speicherplatz wird freigegeben. In anderen Programmen vorhandene Objektverweise werden für ungültig erklärt.
Da liegt also das Problem. Nun brauche ich nur einen Weg, das Sub ohne den unerwünschten Effekt zu beenden.
VG
Anzeige
AW: Problem bei mittels Hyperlink geöffne...
20.01.2020 16:39:28
Phil
Hallo,
ich habe das Problem nun über das Öffnen der Zieldatei in einer neuen Excel-Instanz gelöst.

Private Sub Workbook_Open()
Dim m_name As String
Dim m_pfad As String
Dim appExcel As Excel.Application
'Name und Pfad definieren
m_pfad = "Ordner von Zieldatei"
m_name = "Zieldatei"
Set appExcel = CreateObject("Excel.application")
With appExcel
.Visible = True
.Workbooks.Open Filename:=m_pfad + m_name
.Workbooks(m_name).Activate
'hier Filter setzen etc.
End With
End Sub
VG

22 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige