Registriert seit: 27.04.2014
Version(en): Privat: Office Home & Business 2019 / Arbeit: MS365
Hallo liebe Excelgemeinde,
ich habe eine Frage an die Experten! :)
Hat jemand eine Idee, wieso manche Dateien .xlsm manchmal in VBA-Editor doppelt erscheinen? Ich schließe die betroffenen Datei und trotzdem ist diese noch einmal in VBA-Editor als geöffnet angezeigt?
Wenn das Passiert, dann funktionieren z.B. die Worksheet_Change- Ereigniss nicht mehr!
Woran kann das liegen und wie kann ich das abstellen?
Danke
VG
Alexandra
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Alexandra,
hast Du eventuell
- codeverweise auf die Datei
- Application.OnTime in der Datei laufen
- ...
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 27.04.2014
Version(en): Privat: Office Home & Business 2019 / Arbeit: MS365
Hallo Andre,
nein keine Codeverweis und auch nicht Application.OnTime!
Das kommt auch nur manchmal vor so, dass ich es auch nicht rekonstruieren kann!
VG
Alexandra
Registriert seit: 25.04.2016
Version(en): 2013
08.09.2017, 15:57
(Dieser Beitrag wurde zuletzt bearbeitet: 08.09.2017, 15:57 von Storax.)
Ich kann so etwas wie folgt rekonstruieren
Zitat:Option Explicit
Dim wb As Excel.Workbook
Sub TesterA()
Set wb = Workbooks.Open("Datei.xlsm")
wb.Close False
End Sub
Da ist zwar klar, wo der Fehler liegt, aber meistens ist so ein Programmierfehler in diese Richtung die Ursache
Registriert seit: 29.09.2015
Version(en): 2030,5
08.09.2017, 17:31
(Dieser Beitrag wurde zuletzt bearbeitet: 08.09.2017, 17:31 von snb.)
Hast du schon gekuckt : Menüliste / View / unhide
Man kann eine Datei 'unsichtbar' öffnen, z.B so:
Code:
GetObject "G:\OF\beispeil.xlsx"
oder unsichtbar machen:
Code:
Sub M_snb()
ThisWorkbook.IsAddin = Not ThisWorkbook.IsAddin
End Sub
Registriert seit: 16.08.2017
Version(en): Alle
(08.09.2017, 15:57)Storax schrieb: Ich kann so etwas wie folgt rekonstruieren
Da ist zwar klar, wo der Fehler liegt, aber meistens ist so ein Programmierfehler in diese Richtung die Ursache
Das ist eines der wirklich interessanten Beispiele warum entsetten wichtig sein kann.
Wird die Objektvariable in der Prozedur deklariert, wird sie automatisch entsettet.
Ist es aber im Modul dann
Option Explicit
Dim wb As Workbook
Sub safda()
Set wb = Workbooks.Add
wb.Close False
set wb = nothingEnd Sub
Ist das entsetten wichtig. (Gehört sich auch, aufzuräumen)
Interessant ist auch, das halt in VBA das Projekt sehr lange lebt obwohl es ja abgearbeitet ist.
Denn sonst müsste auch die Modul Variable automatisch im Abfall landen.
Tolles Beispiel Storax!
Folgende(r) 1 Nutzer sagt Danke an Jeanie für diesen Beitrag:1 Nutzer sagt Danke an Jeanie für diesen Beitrag 28
• Storax
Registriert seit: 25.04.2016
Version(en): 2013
08.09.2017, 19:39
(Dieser Beitrag wurde zuletzt bearbeitet: 08.09.2017, 19:40 von Storax.)
Danke fürs Lob.
"Entsetten" ist nicht nötig, wenn der Scope lokal ist, wie Du auch schon geschrieben hast.
Aber natürlich wichtig und richtig für mein Beispiel. Da sollte man das machen!
Hier aber ein Beispiel bzw. ein
Link, wo das "Entsetten" nichts bringt. Da musst Du anders aufräumen.
Registriert seit: 16.08.2017
Version(en): Alle
Der Link ist ganz interessant aber auch inhaltlich nicht ganz neu.
Ein VBA Projekt ist nunmal etwas anderes als eine "echte" Anwendung.
Und das Beispiel dort ist sehr gekünstelt.
Anständige Programmierer würden sowas eh nicht tun.
Und globale oder Modulweite Objektvariablen (die man mal aus Faulheit benutzt) müssen halt sauber entsorgt werden.
Vor vielen vielen Jahren gab es schon in VB6 einen großen Streit, wann Variablen wie entsorgt werden und die meisten meinten sogar, dass man Prozedurvariablen entsetten muss. Aber wie gesagt, dass ist schon lange gefühlte 100000 Jahre her.
Aber alte VB Progger räumen fast standardmäßig hinter sich auf
Registriert seit: 25.04.2016
Version(en): 2013
So gesehen ist mein Beispiel auch etwas künstlich, aber Objekt Variabeln auf Nothing setzen ist i.a. nicht nötig.
Hier jemand mit mehr Autorität als ich zu dem Thema.
Registriert seit: 16.08.2017
Version(en): Alle
(08.09.2017, 20:03)Storax schrieb: So gesehen ist mein Beispiel auch etwas künstlich, aber Objekt Variabeln auf Nothing setzen ist i.a. nicht nötig.
Dem widerspreche ich aus Vorsicht für angehende Weltmeisterprogrammierer.
Es gibt unendlich viele Situationen in welchen das entsetten ganz wichtig ist (auch unendlich viele wo nicht)
Das hat nicht immer mit Garbage etwas zu tun sondern auch mit Programmlogik : Check auf nothing.
Aber ich denke, dass jetzt dieser Thread überbeansprucht ist.
Ein schönes Wochenende noch!