Datei doppelt in VBA-Ansicht!
#1
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
Top
#2
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)
Top
#3
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
Top
#4
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
Top
#5
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#6
(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 = nothing
End 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:
  • Storax
Top
#7
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.
Top
#8
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 Smile
Top
#9
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.
Top
#10
(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!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste