Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1708to1712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schließen Quelldatei nach Load Befehl

Schließen Quelldatei nach Load Befehl
21.08.2019 10:49:22
Markus
Option Explicit
Sub Load()
'Auto-Aktualisierung und Screenupdates auschalten
Application.AutoRecover.Enabled = False
Application.ScreenUpdating = False
'Passwortabfrage zur Bedienung des Buttons
Dim strKey As String
strKey = InputBox(prompt:="Bitte geben Sie das Passwort ein:", Title:="Passworteingabe")
If strKey  "Laborlogistik" Then
MsgBox prompt:="Das Passwort ist nicht korrekt.", Buttons:=vbOKOnly, Title:="Fehler"
Exit Sub
Else
End If
Dim WBZiel As Workbook, ExportDatei As Variant
Dim WBQuelle As Workbook, WSZiel As Worksheet
Dim lZeile As Long
On Error GoTo Fehler
Set WBZiel = ThisWorkbook
'Blattschutz von Ergebnisdatei aufheben
Dim shKey As String           'Password für Blattschutz (alle Blätter gleich!!)
shKey = "Laborlogistik"
'alle Sheets durchgehen und Blattschutz aufheben
Dim wsCounter As Worksheet
For Each wsCounter In WBZiel.Worksheets
wsCounter.Unprotect shKey
Next
'Spalten in Ergebnisdatei(Stammdaten) leeren
Sheet5.Range("A2:AD1000").Clear
'DateiÖffnen Dialog anbieten
ExportDatei = Application.GetOpenFilename()
'öffnen der ausgewählten Datei
Set WBQuelle = Workbooks.Open(ExportDatei)
'Blattschutz aller Tabellenblätter der Quelldatei aufheben
For Each wsCounter In WBQuelle.Worksheets
wsCounter.Unprotect shKey
Next
'kopieren des Blattinhaltes und Schließen der Quell-Datei
With WBQuelle
.Sheets("Chemikalien").Range("A5:ad5000").SpecialCells(xlCellTypeConstants).Copy WBZiel. _
Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1).End(xlUp).row + 1)
.Sheets("Labormaterialien").Range("A5:ad1000").SpecialCells(xlCellTypeConstants).Copy  _
WBZiel.Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1).End(xlUp).row + 1)
End With
'Schließen der ausgewählten Datei
Workbooks("Stammdatenblatt.xlsm").Close SaveChanges:=False
'Blattschutz für Ergebnisdatei wiederherstellen
For Each wsCounter In WBZiel.Worksheets
wsCounter.Protect shKey, True, True, True
Next
'Nach Ausführung wieder in das erste Tabellenblatt springen
Sheet1.Activate
Application.ScreenUpdating = True
Application.AutoRecover.Enabled = True
Fehler:
Exit Sub
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schließen Quelldatei nach Load Befehl
21.08.2019 10:54:23
Markus
zur Erläuterung meines Problems:
Nach dem Öffnen und Kopieren von Daten einer Quelldatei schließt das Problem trotz mehrerer versuchter Varianten (Workbooks.Close, ActiveWorkboot.Close, WBQuelle.close) die Quelldatei nicht. Darüber hinaus wird der Blattschutz nicht in der Zieldatei wieder gesetzt.
Der Bereich auf den ich mich beziehe ist folgender:
'Schließen der ausgewählten Datei
Workbooks("Stammdatenblatt.xlsm").Close SaveChanges:=False
'Blattschutz für Ergebnisdatei wiederherstellen
For Each wsCounter In WBZiel.Worksheets
wsCounter.Protect shKey, True, True, True

Vielen Dank für eure Hilfe im Voraus!
Gruß Markus
Anzeige
AW: Schließen Quelldatei nach Load Befehl
21.08.2019 14:09:40
Torsten
Hallo Markus,
also zum Schliessen der Datei: Ich vermute, dass die zu schliessende Datei die Quelldatei ist? Warum machst du dann nicht weiter mit der Variablen?
With WBQuelle
.Sheets("Chemikalien").Range("A5:ad5000").SpecialCells(xlCellTypeConstants).Copy WBZiel.  _
_
Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1).End(xlUp). _
row + 1)
.Sheets("Labormaterialien").Range("A5:ad1000").SpecialCells(xlCellTypeConstants).Copy  _
WBZiel.Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1).End( _
xlUp).row + 1)
.Close savechanges:=False
End With

zu dem anderen Problem seh ich keinen Fehler, sollte eigentlich klappen mit dem Blattschutz. Das Aufheben funktioniert ja auch. Lass halt mal die ganzen True dahinter weg.
Gruss Torsten
Anzeige
AW: Schließen Quelldatei nach Load Befehl
21.08.2019 14:58:32
Markus
Hallo Thorsten,
danke für die schnelle Rückmeldung. Ich habs ausprobiert, klappt leider nicht. Ich habe das Gefühl, dass das Programm nach diesem Code nichts mehr macht.
With WBQuelle
.Sheets("Chemikalien").Range("A5:ad5000").SpecialCells(xlCellTypeConstants).Copy WBZiel. _
Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1).End(xlUp).row  _
+ 1)
.Sheets("Labormaterialien").Range("A5:ad1000").SpecialCells(xlCellTypeConstants).Copy  _
WBZiel.Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1).End( _
xlUp).row + 1)
End With
Selbst wenn man den Close-Befehl innerhalb des With schreibt.
Excel bleibt nach dem Öffnen des Stammdatenblattes in diesem Stehen, lässt die Quelle offen und macht nichts mehr.
Gruß Markus
Anzeige
AW: Schließen Quelldatei nach Load Befehl
21.08.2019 15:39:34
Torsten
Und du bekommst auch keine Fehlermeldung?
AW: Schließen Quelldatei nach Load Befehl
21.08.2019 16:15:59
Markus
Nein, ich bekomme keine Fehlermeldung, die Befehle darunter werden einfach nicht ausgeführt.
AW: Schließen Quelldatei nach Load Befehl
22.08.2019 08:42:36
Torsten
Aber die Daten sind kopiert und eingefuegt?
AW: Schließen Quelldatei nach Load Befehl
22.08.2019 08:50:22
Torsten
Noch ne Frage:
Warum benutzt du eigentlich beim Kopieren das "SpecialCells(xlCellTypeConstants)"?
Ich werde dir den Block fuers Kopieren mal umschreiben. Dann tauschst du den mal aus und probierst es nochmal.
Wenn fertig, werde ich den neuen code posten
AW: Schließen Quelldatei nach Load Befehl
22.08.2019 08:57:03
Torsten
Jetzt weiss ich auch, warum du keine Fehlermeldung bekommst. Da ist ja eine Fehlerbehandlung drin. Da ist sicher irgendwo ein Fehler, aber der wird unterdrueckt mit der Zeile
On Error GoTo Fehler

Wenn ein Fehler nach dieser Zeile auftritt, wird der einfach uebergangen und der Code springt zu:
Fehler:
Exit Sub

also wird die Prozedur abgebrochen.
Kommentiere diese On Error Zeile erst mal aus und schau, wo du einen Fehler bekommst.
Anzeige
AW: Schließen Quelldatei nach Load Befehl
22.08.2019 09:09:36
Markus
Guten Morgen,
der Copy-Befehl hat meistens funktioniert, hing meist von der Bearbeitungsversion der Stammdatendatei ab. Also hat definitiv nicht immer geklappt.
Es kommt jetzt der Fehler:
Laufzeitfehler '1004':
Diese Aktion funkioniert nicht bei einer Mehrfachauswahl
In dieser Zeile liegt der Fehler:
.Sheets("Chemikalien").Range("A5:ad5000").SpecialCells(xlCellTypeConstants).Copy.WBZiel.Sheets("Stammdaten").Range ("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1).End(xlUp).row + 1)
Vielen Dank im Voraus!
AW: Schließen Quelldatei nach Load Befehl
22.08.2019 09:07:10
Torsten
So hier mal der veraenderte Code mit ausgeschalteter Fehlerbehandlung. Teste bitte und lass mich wissen, ob Fehlermeldung kommt. Wenn ja welche und welche Zeile beim Debuggen markiert ist. Ich kann es leider nicht ausprobieren. Dazu muesste ich deine Dateien nachbauen, aber dazu hab ich keine Lust und Zeit.

Sub Load()
'Auto-Aktualisierung und Screenupdates auschalten
Application.AutoRecover.Enabled = False
Application.ScreenUpdating = False
'Passwortabfrage zur Bedienung des Buttons
Dim strKey As String
strKey = InputBox(prompt:="Bitte geben Sie das Passwort ein:", Title:="Passworteingabe")
If strKey  "Laborlogistik" Then
MsgBox prompt:="Das Passwort ist nicht korrekt.", Buttons:=vbOKOnly, Title:="Fehler"
Exit Sub
End If
Dim WBZiel As Workbook, ExportDatei As Variant
Dim WBQuelle As Workbook, WSZiel As Worksheet
Dim lZeile As Long
'Fehlerbehandlung auskommentiert, um zu sehen, wo Fehler auftritt
'On Error GoTo Fehler
Set WBZiel = ThisWorkbook
'Blattschutz von Ergebnisdatei aufheben
Dim shKey As String           'Password für Blattschutz (alle Blätter gleich!!)
shKey = "Laborlogistik"
'alle Sheets durchgehen und Blattschutz aufheben
Dim wsCounter As Worksheet
For Each wsCounter In WBZiel.Worksheets
wsCounter.Unprotect shKey
Next
'Spalten in Ergebnisdatei(Stammdaten) leeren
Sheet5.Range("A2:AD1000").Clear
'DateiÖffnen Dialog anbieten
ExportDatei = Application.GetOpenFilename()
'öffnen der ausgewählten Datei
Set WBQuelle = Workbooks.Open(ExportDatei)
'Blattschutz aller Tabellenblätter der Quelldatei aufheben
'eigentlich nicht noetig, da von hier nur kopiert wird
For Each wsCounter In WBQuelle.Worksheets
wsCounter.Unprotect shKey
Next
'kopieren des Blattinhaltes und Schließen der Quell-Datei
With WBQuelle
.Sheets("Chemikalien").Range("A5:ad5000").Copy
WBZiel.Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1) _
.End(xlUp).Row + 1).PasteSpecial xlPasteValues
.Sheets("Labormaterialien").Range("A5:ad1000").Copy
WBZiel.Sheets("Stammdaten").Range("A" & WBZiel.Sheets("Stammdaten").Cells(Rows.Count, 1) _
.End(xlUp).Row + 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End With
'Schließen der ausgewählten Datei
Workbooks(WBQuelle).Close savechanges:=False
'Blattschutz für Ergebnisdatei wiederherstellen
For Each wsCounter In WBZiel.Worksheets
wsCounter.Protect shKey, True, True, True
Next
'Nach Ausführung wieder in das erste Tabellenblatt springen
WBZiel.Sheet1.Activate
Application.ScreenUpdating = True
Application.AutoRecover.Enabled = True
'Fehler:
'Exit Sub
End Sub

Gruss Torsten
Anzeige
AW: Schließen Quelldatei nach Load Befehl
22.08.2019 09:29:10
Markus
Hallo Thorsten,
habe nochmal eine Version genommen, wo der Copy Befehl zumindest aus der 1. Zeile geklappt hat. Dann wurde mir der Fehler angezeigt, dass der beim 2. Copy Befehl keine Werte gefunden hat. Sprich dann war der Fehler beim 2. Copy Befehl, hat dann das Programm beendet.
Mit deinem Code klappt es wunderbar, bis auf der close Befehl:
'Schließen der ausgewählten Datei
Workbooks(WBQuelle).Close savechanges:=False
Dafür habe ich meinen Code jetzt verwendet:
WBQuelle.Close SaveChanges:=False
Damit klappt es.
Vielen Dank!
super...
22.08.2019 09:44:09
Torsten
...dann ist ja alles paletti.
Ja ok, das mit dem Close und WBQuelle hab ich vergeigt. WBQuelle war ja schon als Workbook deklariert.
Aber ist halt so, wenn man nicht ausprobieren kann.
Gruss Torsten
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige