WB dessen Namen aus Zelleninhalt und Variablen zusammengesetzt ist per VBA schließen
#1
Hallo,

ich habe es hingekriegt, ein WB zu öffnen, dessen Name aus 1 Zellwert und einer Variablen  zusammengesetzt ist per VBA zu öffnen:

Code:
Workbooks.Open Filename:=strPfad & "\" & Range("K1") & "\" & Range("K1") & " " & intYear

Aber ich kriege es nicht hin, es auf diese Weise auch wieder zu schließen!

Wie müsste dieser Code aussehen? Ich habe schon mit Workbook und Close herumexperimentiert, aber es will nicht funktionieren.

Mit freundlichen Grüßen
Alooha
Top
#2
Hallo Alloha

als erste faellt mir eine Unstimmigkeit in deinem Code auf - im Sinne doppelt gemoppelt !!
Zitat:Workbooks.Open Filename:=strPfad & "\" & Range("K1") & "\" & Range("K1") & " " & intYear

Range("K1") kommt zweimal vor, da kann was nicht stimmen??  Ansonsten liegt dort schon die Lösung.  Ich mache es so:
Dim Mappe As String
Mappe = Range("K1") & IntYear     (vielleicht kannst du auch Range("K1") weglassen?  zum Tesent kannst du eine MsgBox nehmen
MsgBox Mappe                            '** nur zum Testen, so sieht man den Namen
Workbooks(Mappe).Close

Wenn du es wie nachfolgend machst könnte es schiefgehen, den Fall hatten wir schon im Forum:   Workbooks(Range("K1")).Close
Warum es mit einer Variablen einwandfrei funktioniert kann ich dir nicht sagen, ich weiss es selbst nicht!!  Praxis Erfahrungen!

 mfg  Gast 123
Top
#3
Auch Hallo,

oder vielleicht

Code:
ActiveWorkbook.Close
Gruß Stefan
Win 10 / Office 2016
Top
#4
Hallo,

@"Gast 123":
nein, das ist kein Irrtum (schließlich funktioniert das Oeffnen); der Unterordner in dem die datei sich befindet hat als Namen den Wert aus K1.
So was wie du vorschlägst hatte ich zu versuchen geplant.
Mit deinem Code funktioniert es aber leider nicht.

@"Steffl":
es ist leider nicht das aktive WB
Valete!
Alooha
Top
#5
Hallo

und was passiert wenn du den ganzen String vom Öffnen zum Schliessen nimmst, z.B. so:
Ich frage mich ob ihm vielleicht noch die Dateiendung fehlen könnte, .xlsx oder .xlsm??

MappestrPfad & "\" & Range("K1") & "\" & Range("K1") & " " & intYear
Workbooks(Mappe).Close

mfg  Gast 123
Top
#6
Hallo,
aber den Pfad brauche ich doch nicht zum Schließen!
Ich habe es mit deinem Vorschlag versucht, inklusive Endung, aber ich erhalte die selbe Fehlermessage.
Alooha
Top
#7
Hallo

da bin ich jetzt mit meinem Latein so ziemlich am Ende angelangt!  Vielleicht machen wir aber einen grossen Denkfehler??

Wenn die zu schliessende Mappe nicht die Aktive Mappe ist, und mit Range("K1") ein Wert geladen wird, ohne Excel zu sagen aus welchem Workbook, und aus welcher Tabelle, dann kann ein völlig falscher Wert aus der gerade aktiven Mappe und dem gerade aktven Blatt geladen werden!!

In dem Fall müsste die Variable so geladen werden:   Mappe = ThisWorkvook.Worksheets("Tabellle xx").Range("K1")   (Tabelle selbst angeben)
Prüfe das bitte noch ml nach, ggf mit einer MsgBox was für ein Wert in "Mappe" wirklich drin steht???

mfg  Gast 123
Top
#8
Hallo,

Zitat:... aber den Pfad brauche ich doch nicht zum Schließen!

... nein, den brauchst Du nicht, wenn Du das zu schließende WB aktiv machst.

Und wenn den Wechsel  niemand sehen soll, dann in die Zeile davor
Application.ScreenUpdating = False setzen.
Dann folgt Dein Löschcode
und danach mit Application.ScreenUpdating = True das Ganze abschließt.

( An alle die jenigen, die jetzt schon wieder tief durchatmen, Ich weiß, daß das
in diesem Fall Excel selbst erledigt, aber es eben nicht in jedem Fall automatisch
macht; darum lautet meine Meinung, wehret den Anfängen. Was ausgeschaltet
wird, gehört am Ende eines Programms wieder eingeschaltet und umgekehrt.
Für mich gehört das zu einer sauberen Programmierung. Abgesehen davon kann
es sonst ganz schnell mal ganz böse Überraschungen geben. )
Top
#9
Hallo,

noch eine Variante:

aus (Zitat)

Zitat:
Code:
Workbooks.Open Filename:=strPfad & "\" & Range("K1") & "\" & Range("K1") & " " & intYear



wird

Code:
dim WB as workbook
set wb = Workbooks.Open Filename:=strPfad & "\" & Range("K1") & "\" & Range("K1") & " " & intYear

'hier die Codes
wb.close 0

Bei dieser Variante ist es egal, ob der Focus wechselt.

mfg

(ungeprüft)
Top
#10
Hallo,
vielen Dank
Auf zur nächsten Hürde!
Gute Nacht
Alooha
Top


Gehe zu:


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