Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Schließen von xls-Dateien

Betrifft: Schließen von xls-Dateien von: Carsten
Geschrieben am: 13.09.2004 16:33:32

Guten Tag,

ich habe eine Liste mit xls-Dateien, die über ein Makro geschlossen werden sollen. Es kann jedoch sein, das nur einige aus der Liste geöffnet sind. Wie kann ich vorher also auslesen, welche meiner Dateien offen sind und nur diese schließen?

Viele Grüße,
Carsten

  


Betrifft: AW: Schließen von xls-Dateien von: OttoH
Geschrieben am: 13.09.2004 16:36:19

HAllo Carsten,

schau' mal hier, ob das hilft: https://www.herber.de/mailing/001297h.htm

Gruß OttoH


  


Betrifft: AW: Schließen von xls-Dateien von: Carsten
Geschrieben am: 14.09.2004 12:07:26

Hallo OttoH,

zunächst danke für den Hinweis. Wie kann ich aber prüfen, ob mehrere Dateien offen sind? Wie kann ich im genannten Code "sFile" mit verschiedenen Dateinamen belegen? Sicher mit einer Schleife, weiß aber nicht genau wie?

Gruß,
Carsten


  


Betrifft: AW: Schließen von xls-Dateien von: OttoH
Geschrieben am: 14.09.2004 17:09:54

Hallo Carsten,

probiere mal folgenden Code aus:
Die Dateinamen stehen in A1 bis A6

Option Explicit

Function WkbExists(sFile As String) As Boolean
   Dim wkb As Object
   On Error Resume Next
   Set wkb = Workbooks(sFile)
   If Err = 0 And Not wkb Is Nothing Then
      WkbExists = True
   End If
   On Error GoTo 0
End Function


Sub Aufruf()
   Dim sFile As String
   Dim i As Integer
   
For i = 1 To 6
   sFile = Cells(i, 1)
   
   If WkbExists(sFile) Then
      MsgBox "Mappe " & sFile & " ist offen!"
   Else
      MsgBox "Mappe " & sFile & " ist geschlossen!"
   End If
Next i

End Sub


Wenn mehr als 6 Dateien da sind, muss der Zähler for i=1 to xxx angepasst werden.


Gruß OttoH


  


Betrifft: AW: Schließen von xls-Dateien von: Carsten
Geschrieben am: 15.09.2004 11:04:36

Hallo OttoH,

danke für die Info. Das funktioniert sicher so. Ich möchte die Dateinamen aber nicht in einem Tabellenblatt hinterlegen, sondern im Code. Bezogen auf das Beispiel habe ich es so gelöst:

Sub Aufruf()
   Dim sFile As String
  
   sFile = "Dateiname1"   
   If WkbExists(sFile) Then
      MsgBox "Mappe " & sFile & " ist offen!"
   Else
      MsgBox "Mappe " & sFile & " ist geschlossen!"
   End If
  
   sFile = "Dateiname2"   
   If WkbExists(sFile) Then
      MsgBox "Mappe " & sFile & " ist offen!"
   Else
      MsgBox "Mappe " & sFile & " ist geschlossen!"
   End If

   sFile = "Dateiname3"   
   If WkbExists(sFile) Then
      MsgBox "Mappe " & sFile & " ist offen!"
   Else
      MsgBox "Mappe " & sFile & " ist geschlossen!"
   End If

   ...

End Sub


So geht es auch. Aber das scheint mir nicht professioniell genug zu sein. Ich würde es lieber mit einer Schleife machen. Meinetwegen so:


Sub Aufruf()
   Dim sFile As String
   Dim i As Integer

   sfile(1)=Dateiname1
   sfile(2)=Dateiname2
   ...
   sfile(n)=Dateinamen
   
For i = 1 To n
   If WkbExists(sFile(i)) Then
      MsgBox "Mappe " & sFile(i) & " ist offen!"
   Else
      MsgBox "Mappe " & sFile(i) & " ist geschlossen!"
   End If
Next i
End Sub


Aber das geht so nicht. Bringt immer einen Fehler. Wie kann ich das machen?

Gruß, Carsten


  


Betrifft: AW: Schließen von xls-Dateien von: OttoH
Geschrieben am: 15.09.2004 13:08:18

Hallo Carsten,

bau mal die DIM-Anwei´sung um: DIM sFile(10) as string
Die 10 muß je nach Anzahl der DAteien hochgesetzt werden.

Gruß OttoH


  


Betrifft: AW: Schließen von xls-Dateien von: Carsten
Geschrieben am: 15.09.2004 14:46:06

Hallo OttoH,

vielen Dank. Hat mir sehr geholfen. Ich hätte allerdings vermutet, das die Variable sfile in der Function... ebenso geändert werden muß. Aber da kann ja sonst was stehen.

Habe noch eine Frage: Ich möchte in einem Formular mit verschiedenen Checkboxes über eine Schaltfläche alle aktivieren. Habe es bisher so gelöst:

Sub alle_aktivieren ()

 checkbox1 = true
 checkbox2 = true
 ...
 checkboxn = true

End Sub


Auch das möchte ich gern über eine Schleife machen. Habe es wie beim ersten Problem versucht (über "dim checkbox(10) as string" - aber das geht nicht). Kannst du mir helfen?

Gruß,
Carsten