Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten Top
#3
Auch Hallo,

oder vielleicht

Code:
ActiveWorkbook.Close
Gruß Stefan
Win 10 / Office 2016
Antworten 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
Antworten 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
Antworten 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
Antworten 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
Antworten 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. )
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten 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)
Antworten Top
#10
Hallo,
vielen Dank
Auf zur nächsten Hürde!
Gute Nacht
Alooha
Antworten Top


Gehe zu:


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