Ausschliesen Per MID

zyclop

Erfahrenes Mitglied
So mein Projekt geht Schritt für Schritt vorwärts *gedankengang: wo wäre ich wohl ohne Tutorials.de* Antwort: Am ....:rtfm:

Zu meinem Problem. Ich habe ja eine Routine welche Datensätze in ein Flexgrid ausliest, nun habe ich aber das Problem das Ordner ausgeschlossen werden sollen. Darum habe ich eine Routine eingebaut welche diese Überprüft - diese Funktioniert auch dank ein paar netten Jungs hier.

ÜBERPRÜFUNG

Code:
                If chkAnOrdner(0).Value = 1 Then
                'If Überprüfung - Auschschliessung der Obersten Verzeichnisse
                If LCase(Mid(objsubfolder.Name, 1, 3)) <> "an_" Then
                End If
                End If
                Else
                If chk_samOrdner(1).Value = 1 Then
                If LCase(Mid(objsubfolder.Name, 1, 4)) <> "_sam" Then
                MsgBox ("SAM ORDNER")
                Else
                End If
                End If

Mein Problem ist: Wenn diese If Abfrage beendet ist kommt der Code welche die Daten einträgt. Da ich aber in diesem Fall, falls chkAnOrdner = 1 soll der Ordner an_etc nicht hinein geschrieben werden aber Dateien und Ordner welche sich im Ordner befinden schon. Kompliziert? Ich weiss nicht wie ich es besser erklären soll.

Hier der Code der ganzen Routine

Visual Basic:
'Rekursive Subprozedur zur Ordnerüberprüfung
Private Sub pSubScan(ByVal strPath As String)

'Objekt zuweisung
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPath)

'Schlaufe zur Ordner Indexierung
For Each objsubfolder In objFolder.subfolders
    strPath = objsubfolder.Path
    
    'Schlaufen einleitung
    If objFSO.FolderExists(strPath) Then
       
        'If CDate(dDatumLastmodified) < CDate(dDatumNow) Then
        If DateDiff("d", objsubfolder.datelastmodified, Date) >= intAelterals Then
        
                If chkAnOrdner(0).Value = 1 Then
                'If Überprüfung - Auschschliessung der Obersten Verzeichnisse
                If LCase(Mid(objsubfolder.Name, 1, 3)) <> "an_" Then
                End If
                End If
                Else
                If chk_samOrdner(1).Value = 1 Then
                If LCase(Mid(objsubfolder.Name, 1, 4)) <> "_sam" Then
                MsgBox ("SAM ORDNER")
                Else
                End If
                End If
                
                 'Counter für die Schlaufe
                MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
                lonZeileZaehler = lonZeileZaehler + 1
            
                'Eintrag der Attribute für die Ordner in die Tabelle
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 1) = objsubfolder.Name
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 2) = objsubfolder.datelastmodified
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 3) = objsubfolder.DateCreated
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 4) = objsubfolder.Size
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 5) = objsubfolder.Path
                
                'Refresh der Anzeige, damit der User nicht denkt das Programm funktioniert nicht
                MSFlexGrid1.Refresh
                'End If
            'End If
        End If
            
            'Schlaufe zur Datei Indexierung
            For Each objdatei In objFolder.Files
            
            'Wenn der Datumsunterschied grösser als (Anzahl = Variable) Tage ist, dann
               If DateDiff("d", objsubfolder.datelastmodified, Date) >= intAelterals Then
                
                    'Counter für die Schlaufe
                    MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
                    lonZeileZaehler = lonZeileZaehler + 1
                    
                    'Eintrag der Attribute für die Dateien in die Tabelle
                    MSFlexGrid1.TextMatrix(lonZeileZaehler, 1) = objdatei.Name
                    MSFlexGrid1.TextMatrix(lonZeileZaehler, 2) = objdatei.datelastmodified
                    MSFlexGrid1.TextMatrix(lonZeileZaehler, 3) = objdatei.DateCreated
                    MSFlexGrid1.TextMatrix(lonZeileZaehler, 4) = objdatei.Size
                    MSFlexGrid1.TextMatrix(lonZeileZaehler, 5) = objdatei.Path
                    
                    'Refresh der Anzeige, damit der User nicht denkt das Programm funktioniert nicht
                    MSFlexGrid1.Refresh
                   Else
                   
                  End If
              Next
              
            'Rekursiver Aufruf
            pSubScan (strPath)
End If
Next
End Sub

Versteht ihr was ich meine? i hope it
 
Habe es jetzt mal mit GOTOs gelöst. Ist ja aber nicht sauber hat jemand ne ahnung wie ich das am besten mache?

Code:
        'If CDate(dDatumLastmodified) < CDate(dDatumNow) Then
        If DateDiff("d", objsubfolder.datelastmodified, Date) >= intAelterals Then
                
                'Wert wird in Variable gespeichert um ihn in einer externen Funktion zu verwenden
                strOrdnerName = objsubfolder.Name
                
                'Aufruf der Ausschliessen Funktion
                pSubAuschliessen (lonStatusNichtBeruecksichtigen)
                If lonStatusNichtBeruecksichtigen = 0 Then
                GoTo ende
                
                'Counter für die Schlaufe
                MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
                lonZeileZaehler = lonZeileZaehler + 1
            
                'Eintrag der Attribute für die Ordner in die Tabelle
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 1) = objsubfolder.Name
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 2) = objsubfolder.datelastmodified
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 3) = objsubfolder.DateCreated
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 4) = objsubfolder.Size
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 5) = objsubfolder.Path
                
                'Refresh der Anzeige, damit der User nicht denkt das Programm funktioniert nicht
                MSFlexGrid1.Refresh
                'End If
            'End If
        End If
ende:

Code:
Private Sub pSubAuschliessen(ByVal lonStatusNichtBeruecksichtigen As Long)

'Wenn CheckBox Aktiv ist, dann
If chkAnOrdner(0).Value = 1 Then

'If Überprüfung - Auschschliessung der Obersten Verzeichnisse
If LCase(Mid(strOrdnerName, 1, 3)) <> "an_" Then

lonStatusNichtBeruecksichtigen = 1
Else

lonStatusNichtBeruecksichtigen = 0
End If
End If

If chk_samOrdner(1).Value = 1 Then

If LCase(Mid(strOrdnerName, 1, 4)) <> "_sam" Then

lonStatusNichtBeruecksichtigen = 1
Else

lonStatusNichtBeruecksichtigen = 0
End If
End If

End Sub
 
Wenn es dir nur darum geht das goto nicht zu verwenden mach es so:
Visual Basic:
     'Aufruf der Ausschliessen Funktion
                pSubAuschliessen (lonStatusNichtBeruecksichtigen)
               ' hier geändert 
                If not lonStatusNichtBeruecksichtigen   Then
                 
                
                'Counter für die Schlaufe
                MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
                lonZeileZaehler = lonZeileZaehler + 1
            
                'Eintrag der Attribute für die Ordner in die Tabelle
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 1) = objsubfolder.Name
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 2) = objsubfolder.datelastmodified
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 3) = objsubfolder.DateCreated
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 4) = objsubfolder.Size
                MSFlexGrid1.TextMatrix(lonZeileZaehler, 5) = objsubfolder.Path
                
                'Refresh der Anzeige, damit der User nicht denkt das Programm funktioniert nicht
                MSFlexGrid1.Refresh
                End If
Grüsse bb
 
So führt er es aber ja auch aus weil es kein else gibt...ich habe es geändert nun funktioniert fast alles wie es soll...ausser das wenn ich die Checkboxen deaktiviere es keinen unterschied macht...also übergeht er die Abfrage irgendwie...weisst du warum
 
Zuletzt bearbeitet:
So führt er es aber ja auch aus weil es kein else gibt

Versteh ich jetzt nicht weil den Inhalt innerhalb der Bedingung
Visual Basic:
    If not lonStatusNichtBeruecksichtigen   Then
wird ja nur ausgeführt wenn die Rückgabe lonStatusNichtBeruecksichtigen <> 0 ist aber nagut mir solls egal sein wenns funktioniert.
 
Habs hingekriegt, jetzt habe ich ein Dickes Problem und zwar bei einer zufälligen datei die er bereits gelöscht hat, will er noch mals löschen...wie kann ich das machen

wenn fehler dann ignorieren und nicht das programm schliessen. Ich hab das Projekt hochgeladen dammit ihr den besseren Einlbick habt...plz help...:mad: :mad: :mad: :mad: :mad: :mad: :mad: :mad: :mad: :mad:



Vieleicht findet jemand auch gleich den Fehler oder Verbesserungsvorschläge
 
Zuletzt bearbeitet:
im Kopf der Löschfunktion
Visual Basic:
On Error Goto Fehler

am Ende der funktion VOR dem End Sub !

Visual Basic:
Exit sub
Fehler: 
  If err.number =   then' Fehlernr für filenot found '-- Habe kein basic auf dem rechner mom.
   err.clear
  resume next 
  end if 
end sub

Grüsse bb
 
Zurück