Anzeige
Archiv - Navigation
1792to1796
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

Öffnen Schließen von Workbooks

Öffnen Schließen von Workbooks
11.11.2020 20:54:10
Workbooks
Hallo Zusammen,
um in einem geschlossenen Workbook den Adressbereich eines bestimmten Names mit Übergabe des Worksheets auszulesen, habe ich den folgenden Code geschrieben. Dieser funktioniert grundsätzlich, nur je nach Größe und Komplexität der "Datendatei" dauert es doch gefühlt 2-4 Sekunden, die Datei zu verarbeiten. Mein größeres Problem ist aber, dass die geöffnete Datndateii im Hintergrund trotz Close Befehl geöffnet bleibt. Das merkt man, wenn man die Datei, aus der ich den Funktionsaufruf starte, wieder schließe mit Speichern und ich dann gefragt werde, ob ich die "Datendatei" auch speichern möchte.
Meine Frage also:
1) Gehe ich mit dem Lesen eines Namens Adressbereichs korrekt vor?
2) Warum schließt die Datendatei sich nicht wieder?
D&G
Kay
Public Function GetDataRange(sWS As String) As String ' mit Übergabe des Worksheets
Dim sPfad    As String     ' der Pfad (Ordner) der anderen Mappe
Dim sDatei   As String     ' der Name der anderen Mappe
Dim oWB      As Workbook
Dim sArea    As String
sPfad = "D:\Testdaten\"        ' den Pfad-Namen ggf. anpassen mit Abschluss \.
sDatei = "Datendatei.xlsx" ' den Datei-Namen ggf. anpassen.
aArea = ""                  ' Default, falls kein Name DataArea auf dem Woksheet existiert
On Error Resume Next
'  Das Objekt holen bzw. öffnen
Set oWB = GetObject(sPfad & sDatei)
'Liest den gesetzten Bereich des bestimmten Namens "DataArea" aus dem übergebenen Worksheet
sArea = oWB.Worksheets(sWS).Names("DataArea").Value
If Err.Number  0 Then
sArea = "Nicht vorhanden"
Err.Number = 0
End If
'Schließt das Workbook bzw. soll es schließen
oWB.Close
If Err.Number  0 Then MsgBox "Fehler beim WB Schließen"
'Gibt der Funktion den Adressbereich des Names DataArea, sofern gesetzt, zurück
GetDataRange = sArea
End Function

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Öffnen Schließen von Workbooks
11.11.2020 21:06:03
Workbooks
Hallo Kay,
am Ende
set oWB = Nothing 
Aufräumen ist sehr wichtig gerade bei Workbooks/Sheets
Schöne Grüße
Tobias
AW: Öffnen Schließen von Workbooks
12.11.2020 12:21:30
Workbooks
Hallo Tobias,
Danke für den Hinweis. Wenn ich es richtig verstehe, muss ich das Objekt nicht schließen, sondern die Objektvariabel nur "rücksetzen". Denn wenn ich oWB.Close weiterhin vor dem Befehl "set oWB = Nothing" stehen habe, dann bleibt das Phänomen, dass die Datendatei scheinbar geöffnet ist.
Wenn die Funktion dann einmal ausgeführt wurde, muss ich Excel auch komplett schließen, wenn ich ich die Datendatei öffne, da ich sie sonst nicht sehe...Irgendwie alles komisch :-(
Vielleicht haste ja noch eine Idee..
D&G
Kay
Anzeige
AW: Öffnen Schließen von Workbooks
12.11.2020 13:07:18
Workbooks
Hallo Kay,
ich habe das ganze mal ein wenig überarbeitet:
Public Function GetDataRange(sWS As String) As String ' mit Übergabe des Worksheets
Dim sPfad    As String     ' der Pfad (Ordner) der anderen Mappe
Dim sDatei   As String     ' der Name der anderen Mappe
Dim oWB      As Workbook
Dim sArea    As String
Dim pRange   As Name
sPfad = "c:\Testdaten\"          ' den Pfad-Namen ggf. anpassen mit Abschluss \.
sDatei = "Datendatei.xlsx"       ' den Datei-Namen ggf. anpassen.
aArea = ""                       ' Default, falls kein Name DataArea auf dem Woksheet  _
existiert
'On Error Resume Next  "" Then
Set oWB = Workbooks.Open(sPfad & sDatei)
Else
MsgBox ("Dateiname nicht gefunden")
Exit Function
End If
'Überprüft ob "DataArea" vorhanden ist und übergibt falls ja
For Each pRange In oWB.Worksheets(sWS).Names
If pRange.Name = (sWS & "!" & "DataArea") Then
sArea = oWB.Worksheets(sWS).Names("DataArea").Value
End If
Next
'Schließt das Workbook
oWB.Close
'Gibt der Funktion den Adressbereich des Names DataArea, sofern gesetzt, zurück
GetDataRange = sArea
'WB zurücksetzen
Set oWB = Nothing
Schöne Grüße
Tobias
Anzeige
AW: Öffnen Schließen von Workbooks
11.11.2020 21:22:00
Workbooks

Public Function GetDataRange(sWS As String) As String ' mit Übergabe des Worksheets
Dim sPfad    As String     ' der Pfad (Ordner) der anderen Mappe
Dim sDatei   As String     ' der Name der anderen Mappe
Dim oWB      As Workbook
Dim sArea    As String
Dim aArea 'FEHLTE - ABER WOZU IST DIE VARIABLE ÜBERHAUPT DA ?
sPfad = "D:\Testdaten\"        ' den Pfad-Namen ggf. anpassen mit Abschluss \.
sDatei = "Datendatei.xlsx" ' den Datei-Namen ggf. anpassen.
aArea = ""                  ' Default, falls kein Name DataArea auf dem Woksheet existiert
'On Error Resume Next 'WOZU ?
'  Das Objekt holen bzw. öffnen
Set oWB = GetObject(sPfad & sDatei)
'Liest den gesetzten Bereich des bestimmten Namens "DataArea" aus dem übergebenen Worksheet
sArea = oWB.Worksheets(sWS).Range("DataArea").Address ' ADDRESS UND NICHT VALUE
If Err.Number  0 Then
sArea = "Nicht vorhanden"
Err.Number = 0
End If
'Schließt das Workbook bzw. soll es schließen
oWB.Close
If Err.Number  0 Then MsgBox "Fehler beim WB Schließen"
'Gibt der Funktion den Adressbereich des Names DataArea, sofern gesetzt, zurück
GetDataRange = sArea
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige