Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Prüfung ob Datei bereits offen!
#1
Hallo liebe Excelgemeinde,


würde gerne beim Betätigen des Buttons "Löschen" mit folgenden Code zuerst prüfen ob die Datei "DB.xlsm" im Netzwerk bereits offen ist, wenn ja dann MsgBox"Bitte versuchen Sie es später noch einmal!", wenn nicht, dann den Code weiterlaufen lassen!!

Code:
Private Sub cmdLöschen_Click()
    Dim var
   Dim rngLoeschWert As Range
   'falls aus der Listbox kein Element gewählt ist verlasse die Sub
   If lstAttribute.ListIndex = -1 Then
       MsgBox "Bitte Attribut auswählen!"
   Exit Sub
   End If
    var = MsgBox("Sind Sie sicher, dass Sie den Begriff " & lstAttribute.Value & " aus der Kategorie " & " " & ComboBox1.Value & " " & "löschen möchten? ", vbYesNo)
     If var = 7 Then
         Exit Sub
         Else
   Set DB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "DB.xlsm", ReadOnly:=False, Password:="", WriteResPassword:="")
      'suchen des Wertes in der betreffenden Spalte
   Set rngLoeschWert = DB.Worksheets("Attribute").Columns(rngUberschriften.Column).Find(lstAttribute.Value, LookIn:=xlValues, lookat:=xlWhole)
   If Not rngLoeschWert Is Nothing Then
      'und lösche ihn und schiebe die weiteren nach oben
      rngLoeschWert.Delete xlShiftUp
   End If
   End If
    lstAttribute.RemoveItem lstAttribute.ListIndex
    DB.Close SaveChanges:=True
        Datensync
    ThisWorkbook.Save
End Sub

Wie muss der Code dann aussehen?


Vielen Dank im Voraus
VG
Alexandra
to top
#2
Hallo Alexandra,

wenn Du auf Schreibschutz einer Excel-Datei nach dem Öffnen prüfen würdest, dann geht das über die ReadOnly-Eigenschaft vom Workbook:

ActiveWorkbook.ReedOnly

Dafür öffnest Du die Mappe kurz im Hintergrund, prüfst die Eigenschaft und schließt sie bei Bedarf wieder.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top
#3
Hallo Andre,


vielen Dank für dein Beitrag!
Ich dachte eher an sowas:

Code:
Option Explicit

Public Enum XL_FILESTATUS
    XL_UNDEFINED = -1
    XL_CLOSED
    XL_OPEN
    XL_DONTEXIST
End Enum

Public Function FileStatus(xlFile As String) As XL_FILESTATUS

On Error Resume Next

Dim File%: File = FreeFile

Err.Clear

Open xlFile For Binary Access Read Lock Read As #File
Close #File

Select Case Err.Number
    Case 0: FileStatus = XL_CLOSED
    Case 70: FileStatus = XL_OPEN
    Case 76: FileStatus = XL_DONTEXIST
    Case Else: FileStatus = XL_UNDEFINED
End Select

End Function

Sub PrüfungDateiOffen()
Dim strFile As String

strFile = "C:\Users\rabe\Downloads\DB.xlsm"

If FileStatus(strFile) = XL_CLOSED Then
    Return
    'Workbooks.Open Filename:=strFile
    Else
    MsgBox "Datenbank wird bereits bearbeitet, bitte versuchen Sie es später noch einmal!"
Exit Sub
End If

End Sub

Das funktioniert ganz gut, ABER...
Habe diesen Code in ein Modul4 rein und "PrüfungDateiOffen" am Anfang meines "Lösch" Codes eingefügt allerdings kommt zwar die Meldung "Datenbank wird bereits bearbeitet..." aber der Löschcode läuft weiter wenn ich auf OK klicke!

Woran liegt das?

Vielen Dank
VG
Alexandra
to top
#4
Hallo Alexandra,

wenn Dein Makro so

Code:
Sub DeinMakro()

'Variablendekleration

PrüfungDateiOffen

' weiterer Löschcode

End Sub

ist es klar, das der Code weitergemacht wird. Du mußt entweder den Code in deinen LöschCode integrieren oder aus der Sub eine Function mit einem Rückgabewert machen und den in deinem Löschcode prüfen.
Gruß Stefan
Win 7 / Office 2007
to top
#5
Hallo Alexandra,

das Du so einen code möchtest, hab ich nicht erwartet Blush Der code ist zwar top, aber der andere wäre einfacher 17 Im Prinzip wird die Datei mit der Function ja auch geöffnet und dann wieder geschlossen. Wenn Du sie brauchst, machst Du sie ein zweites mal auf. Wenn Du den Workbook - Status wie von mir vorgeschlagen anhand der offenen Datei prüfst, brauchst Du sie nicht ein zweites mal zu Öffnen.

Das Öffnen als Binärdatei hat den Vorteil, dass die ganzen Excel-Aktionen wie Berechnen oder Aktualisieren nicht ausgeführt werden, wodurch das schneller gehen sollte. Andererseits könnte man die Aktionen vor dem Öffnen deaktivieren und wenn die Datei offen bleiben soll, dann per code nachholen.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top
#6
Hallo Andre,

danke für dein Antworten!

Zitat:oder aus der Sub eine Function mit einem Rückgabewert machen und den in deinem Löschcode prüfen.


Wie würde denn so etwas aussehen in mein Code?


Vielen Dank
VG
Alexandra
to top
#7
Hallo Alexandra,

das mit Sub -> Function habe ich geschrieben und nicht André und gemeint habe ich es so

Code:
Option Explicit
Public Enum XL_FILESTATUS
    XL_UNDEFINED = -1
    XL_CLOSED
    XL_OPEN
    XL_DONTEXIST
End Enum

Public Function FileStatus(xlFile As String) As XL_FILESTATUS

On Error Resume Next

Dim File%: File = FreeFile

Err.Clear

Open xlFile For Binary Access Read Lock Read As #File
Close #File

Select Case Err.Number
    Case 0: FileStatus = XL_CLOSED
    Case 70: FileStatus = XL_OPEN
    Case 76: FileStatus = XL_DONTEXIST
    Case Else: FileStatus = XL_UNDEFINED
End Select

End Function

Function PrüfungDateiOffen() As Boolean
Dim strFile As String

PrüfungDateiOffen = True
strFile = "C:\Users\rabe\Downloads\DB.xlsm"

If FileStatus(strFile) = XL_CLOSED Then
    Return
    'Workbooks.Open Filename:=strFile
    Else
    MsgBox "Datenbank wird bereits bearbeitet, bitte versuchen Sie es später noch einmal!"
Exit Function

End If
PrüfungDateiOffen = False
End Function
Sub DeinMakro()

'Variablendekleration

If PrüfungDateiOffen Then Exit Sub

' weiterer Löschcode

End Sub
Gruß Stefan
Win 7 / Office 2007
to top
#8
Hallo Stefan,


entschuldige, ich habe schon Augenkrebs Smile


Ich habe dein Code jetzt eingebaut, wenn die Datei offen ist, dann kommt die Meldung und es passt alles!
Wenn die Datei aber geschlossen ist, dann kommt eine Fehlermeldung "Laufzeitfehler 3" Return ohne Gosub!

Was heißt den das?

Vielen dank
VG
Alexandra
to top
#9
Hallo Alexandra,

kommentier diese Codezeile aus.
Gruß Stefan
Win 7 / Office 2007
[-] Folgende(r) 1 Benutzer sagt Danke an Steffl für diesen Beitrag:
cysu11
to top
#10
Hallo Stefan,


suuuuuper, jetzt funktioniert es! 97

Ein Frage habe ich noch! Smile

Code:
Private Sub cmdLöschen_Click()
    Dim var
   Dim rngLoeschWert As Range
   If PrüfungDateiOffen Then Exit Sub
   'falls aus der Listbox kein Element gewählt ist verlasse die Sub
   If lstAttribute.ListIndex = -1 Then
       MsgBox "Bitte Attribut auswählen!"
   Exit Sub
   End If
    var = MsgBox("Sind Sie sicher, dass Sie den Begriff " & lstAttribute.Value & " aus der Kategorie " & " " & ComboBox1.Value & " " & "löschen möchten? ", vbYesNo)
     If var = 7 Then
         Exit Sub
         Else
   Set DB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & "DB.xlsm", ReadOnly:=False, Password:="", WriteResPassword:="")
      'suchen des Wertes in der betreffenden Spalte
   Set rngLoeschWert = DB.Worksheets("Attribute").Columns(rngUberschriften.Column).Find(lstAttribute.Value, LookIn:=xlValues, lookat:=xlWhole)
   If Not rngLoeschWert Is Nothing Then
      'und lösche ihn und schiebe die weiteren nach oben
      rngLoeschWert.Delete xlShiftUp
   End If
   End If
    lstAttribute.RemoveItem lstAttribute.ListIndex
    DB.Close SaveChanges:=True
        'Datensync
    ThisWorkbook.Save
End Sub

Mit dem Löschcode lösche ich über meine Eingabedatei "Userform" aus der Datei "DB.xlsm"(diese benutze ich als Datenbank und wird nur zum beschreiben kurz aufgemacht und dann wieder geschlossen!) bestimmte Werte!
Nun funktioniert es auch dank deiner Hilfe SUPER, das was mit aber garnicht gefällt, ist, dass wenn ich den Code Löschen ausführe, dann ja die Datei DB.xlsm geöffnet wird und das ja alles zu sehen ist was da passiert! Das ist sehr unschön!
Gibt es eine Möglichkeit, dass das alles im Hintergrund passiert, so dass man das alles nicht sieht?

Vielen lieben Dank
VG
Alexandra
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Bedingte Formatierung offen / erledigt cuba 9 60 02.12.2016, 14:40
Letzter Beitrag: cuba
  VBA: Wenn Datei offen dann schließen mit Speicherabfrage Kash 1 61 15.11.2016, 23:24
Letzter Beitrag: AlterDresdner
  Excel Datei exportieren zu einer XML Datei FaDos 4 279 15.09.2016, 15:56
Letzter Beitrag: FaDos
  mp3 Prüfung gfritz74 4 174 23.06.2016, 14:04
Letzter Beitrag: gfritz74
  Zeile nach Prüfung in anderen AB übertragen + negative überspringen msilva 2 280 22.05.2016, 19:12
Letzter Beitrag: msilva
  Dienstplan: Prüfung mehrere Bedingungen Fackel87 5 540 22.04.2016, 20:28
Letzter Beitrag: shift-del
  Prüfung ob Wert vorhanden El Toup 2 279 16.03.2016, 11:42
Letzter Beitrag: El Toup
  Verschiedene Dateien öffen! cysu11 5 408 13.02.2016, 14:09
Letzter Beitrag: cysu11
  Neue Excel Datei in 2. Arbeitsmappse / Datei öffnen trance-master 3 863 17.10.2015, 22:03
Letzter Beitrag: Käpt'n Blaubär
  Kopieren nach Prüfung Hille 7 560 08.10.2015, 15:45
Letzter Beitrag: Hille

Gehe zu:


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