Clever-Excel-Forum

Normale Version: Set This Workbook
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo!

Ich habe eine Datei mit vielen Userformen und Modulen erstellt. Was auch Funktioniert, solange alles in der gleichen Datei abläuft.
Bei der Umstellung auf zwei Dateien, 1.Datei wo Userform geöffnet wird und der Code abläuft, 2.Datei wo werte eingetragen werden, geht einiges nicht mehr und Excel hängt sich auf.

Nun bin ich auf der Suche nach einer Lösung.

Beim Start der 1. Datei wird eine User Form geöffnet und die 1.Datei minimiert, soweit so gut.
Jetzt soll mir eine Variable gesetzt werden die auf die 1.Datei hinweist, bevor ich die 2.Datei öffnen lasse.

Da habe ich mein Problem!

In einen Modul (Allgemein) wurden die Variablen (WkSh_QB )als Public deklariert. So das sie mir in allen Modulen zu Verfügung stehen,
solange wie die 1.Datei offen ist.

Ich benötige jetzt für die Quelldatei (1. Datei) die Variable und wo muss sie gesetzt werden?  

Noch einige Infos:
Beim öffen der 1.Datei steht in DieseArbeitsmappe der Code
Code:
Private Sub Workbook_Open()
  Application.WindowState = xlMinimized
 
  NeueStartSeite.Show vbModeless
End Sub

In der Userform habe ich es hiermit versucht
Code:
Private Sub UserForm_Initialize()
'Set WkSh_QB = ThisWorkbook
End Sub
Dann hängt sich Excel auf. Ich weiß nicht wo ich die Variable nach dem öffnen der Userform setzen soll!

Im Modul Allgemein sind die Variablen so angelegt

Code:
Public WkSh_ZB As Workbook   ' das Ziel-Tabellenblatt - das Ergebnis
Public WkSh_QB As Workbook   ' das Quell-Tabellenblatt - die Herkunft


Wo muss diese Zeile eingetragen werden, nach dem öffnen der UF?
Code:
'Set WkSh_QB = ThisWorkbook
Ich weiß ihr hättet am liebsten eine Beisiel Datei!
Aber das Projekt ist sehr groß und ich bekomme auf die schnelle kein Beispiel hin.
Vieleicht kann aber doch einer schon so helfen!
Vielen Dank

Verwendet werden Excel 2007 und 2013
Hallöchen,

nimm mal

Set WkSh_QB = Application.ThisWorkbook
Hallo!
Danke für die Antwort.
Das hatte ich auch schon mal ausprobiert!

Excel hat sich dann nicht bei 2007 sondernd bei 2013 aufgehangen.
Ich glaube ohne es zu wissen das man den befehl irgendwie nach der UF öffen setzten muss oder soll.
Hallöchen,

Du kannst den Befehl auch in DieseArbeitsmappe ins Workbook_Open setzen.
Oder Du nimmst ihn in den Code wo Du das userform aufrufst.
Hallo Michael,

wozu brauchst Du diese Variable (die mit WkSh_QB auch noch missverständlich benannt ist) ???

Gruß Uwe
Hallo Uwe!

Die Variable wird dafür benötigt damit die anschliesenden code's in meinen Projekt wissen wo sie was Schreiben oder lesen sollen.
Das die Variable so heißt habe ich aus dem netz. Es könnte, wenn ich mir das nochmal recht übberlege auch eine Constante sein.
Ich benötige das zum lesen und schreiben. Ein stäniges hin und her zwischen Quell Datei und Ziel Datei.

Was ich immer noch nicht verstehen kann, ist wenn es mit Excel 2007 geht, das sich Excel 2013 aufhängt oder auch umgekehrt
Hallo Michael,

ThisWorkbook ist doch schon eine Konstante, nämlich der Verweis auf das Workbook, in welchem sich der gerade laufende Code befindet.

Gruß Uwe
Hallo Michael,

Uwe hat ja auf die Benennung hingewiesen. Wenn Du später nur mit einem Blatt aus ThisWorbook arbeiten willst, dann nimm das gleich direkt.
Set WkSh_QB = ThisWorkbook.Sheets("MeineTabelle")

Hast Du es mal an den anderen Stellen programmiert?

Ansonsten noch zwei allgemeine Hinweise.

Wenn ich für mehrere Versionen programmiere, tue ich das in der Regel in der niedrigsten und in den höheren teste ich dann nur noch. Änderungen mach ich wieder in der niedrigsten.

Bei einigen Projekten habe ich mir eine xlsx mit den nötigen Tabellen und Daten, aber ohne die ganzen Codes usw., als "Master.xlsx" erstellt. Diese liegt schreibgeschützt auf meiner Platte. In einer zweiten Datei, z.B. der "Anwendung_001.xlsm", die natürlich auch die Tabellen und Daten enthält, programmiere und teste ich. Wenn alles passt, übernehme ich die codes usw. in die Master.xlsx und speichere die dann für mich als "Anwendung_002.xlsm" für den produktiven Einsatz - ins Netz lege ich sie wieder als "Anwendung.xlsm"
Das hat unter anderem zwei Vorteile. Zum einen bleibt die Dateigröße niedrig - in der Master habe ich immer nur Code, der darin nicht geändert wurde. Excel merkt sich beim Ändern einiges und bläht dadurch die Dateien auf. Zum anderen gibt es dadurch kaum "seltsame" Fehler, z.B. dass die Anwendung ohne Grund einfach irgendwo stehen bleibt und nur mit F5 weiterläuft und andere Kleinigkeiten.

Wenn der Anwender in der "Anwendung.xlsm" Daten speichern muss, muss ich die natürlich vor der Arbeit in meine "Master.xlsx" holen. Wenn's geht, trenne ich in solchen Fällen aber auch gerne die Anwendung von den Userdaten - eventuell machst Du das mit Deinen 2 Dateien genau so Smile