• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

alfabetische volgorde wijzigen naar datum laatst gewijzigd.

Status
Niet open voor verdere reacties.

gober

Gebruiker
Lid geworden
12 feb 2016
Berichten
133
Onderstaande code zorgt ervoor dat bestanden uit een bepaalde directory en subdirectories opgehaald wordt en geplaatst wordt in kolom B.
Dat werkt prima. De bestanden worden echter op alfabetische volgorde geplaatst. Het laatst aangemaakt bestand wordt dus onderaan geplaatst. Ik wil echter graag een lijst die de laatst aangemaakte file dus bovenaan plaatst.
of alfabetische volgorde andersom (grootste getal bovenaan). heb echter geen idee waarin ik dat zoeken moet in onderstaande code.


Code:
Public RowIndex As Integer
Public iStartDepth As Integer
Public iMaxDepth As Integer

Sub Recurse()

Dim sDirname As String
Sheets(5).tbDirectory.Text = Range("factuur!T2")
sDirname = Sheets(5).tbDirectory.Text

If Right(sDirname, 1) = "\" Then sDirname = Left(sDirname, Len(sDirname) - 1)

Application.ScreenUpdating = False

'Read the level of start folder
iStartDepth = CharCount(CStr(sDirname), "\")

'Reset the formatting
Columns("B:B").Select
Selection.Font.Bold = False
Selection.Font.Bold = True

Cells.Select
Selection.ClearContents
Selection.Hyperlinks.Delete
Selection.Font.Underline = xlUnderlineStyleNone
Selection.Font.ColorIndex = 0
Selection.EntireRow.Hidden = False
Call UngroupRows


Range("a1").Select

RowIndex = 1
Call RecurseFolderList(sDirname & "\")

Call GroupRows

Range("a1").Select

Application.ScreenUpdating = True

MsgBox "Lijst gemaakt van: " & RowIndex - 1 & " bestanden uit: " & iMaxDepth & " Map(pen)"


End

End Sub



Public Function RecurseFolderList(FolderName As String) _
    As Boolean

On Error Resume Next
Dim fso, f, fc, fj, f1
Dim iNameStart As String
Dim iDepth As Integer


 Set fso = CreateObject("Scripting.FileSystemObject")
 
If Err.Number > 0 Then
    RecurseFolderList = False
    Exit Function
End If
 
On Error GoTo 0
If fso.FolderExists(FolderName) Then

    Set f = fso.GetFolder(FolderName)
    Set fc = f.Subfolders
    Set fj = f.Files
    'For each subfolder in the Folder
     For Each f1 In fc
        'Do something with the Folder Name

            'Range("Type").Cells(RowIndex, 1) = " "
            
            iNameStart = InStrRev(f1, "\", -1, vbTextCompare)
            iDepth = CharCount(CStr(f1), "\") - iStartDepth
            If iDepth > iMaxDepth Then iMaxDepth = iDepth
            
            Range("Type").Cells(RowIndex, iDepth) = Mid(f1, iNameStart + 1, Len(f1) - iNameStart)
                        
            RowIndex = RowIndex + 1
            
          'Then recurse this function with the sub-folder to get any'
         ' sub-folders
        RecurseFolderList (f1)
        
     Next
    
       'For each folder check for any files
       For Each f1 In fj

            'Range("Type").Cells(RowIndex, 1) = " "
            
            iNameStart = InStrRev(f1, "\", -1, vbTextCompare)
            iDepth = CharCount(CStr(f1), "\") - iStartDepth
            If iDepth > iMaxDepth Then iMaxDepth = iDepth
                        
            Range("Type").Cells(RowIndex, iDepth).Select
            
            Selection = Mid(f1, iNameStart + 1, Len(f1) - iNameStart)
            
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=CStr(f1)
                        
            RowIndex = RowIndex + 1
           
       Next
    
    Set f = Nothing
    Set fc = Nothing
    Set fj = Nothing
    Set f1 = Nothing

Else
    RecurseFolderList = False
End If

Set fso = Nothing

End Function



Public Function CharCount(OrigString As String, _
  Chars As String, Optional CaseSensitive As Boolean = False) _
  As Long

'**********************************************
'PURPOSE: Returns Number of occurrences of a character or
'or a character sequencence within a string

'PARAMETERS:
    'OrigString: String to Search in
    'Chars: Character(s) to search for
    'CaseSensitive (Optional): Do a case sensitive search
    'Defaults to false

'RETURNS:
    'Number of Occurrences of Chars in OrigString

'EXAMPLES:
'Debug.Print CharCount("FreeVBCode.com", "E") -- returns 3
'Debug.Print CharCount("FreeVBCode.com", "E", True) -- returns 0
'Debug.Print CharCount("FreeVBCode.com", "co") -- returns 2
''**********************************************

Dim lLen As Long
Dim lCharLen As Long
Dim lAns As Long
Dim sInput As String
Dim sChar As String
Dim lCtr As Long
Dim lEndOfLoop As Long
Dim bytCompareType As Byte

sInput = OrigString
If sInput = "" Then Exit Function
lLen = Len(sInput)
lCharLen = Len(Chars)
lEndOfLoop = (lLen - lCharLen) + 1
bytCompareType = IIf(CaseSensitive, vbBinaryCompare, _
   vbTextCompare)

    For lCtr = 1 To lEndOfLoop
        sChar = Mid(sInput, lCtr, lCharLen)
        If StrComp(sChar, Chars, bytCompareType) = 0 Then _
            lAns = lAns + 1
    Next

CharCount = lAns

End Function

Sub UngroupRows()

On Error GoTo EndSub

For i = 1 To 50
    Rows.Ungroup
Next

EndSub:

End Sub

Sub GroupRows()

Call UngroupRows

Dim iStart As Integer
Dim iEnd As Integer
Dim bGroup As Boolean

'RowIndex = 400
'iMaxDepth = 2

iStart = Range("Type").Row + 1

'Level 1 grouping (simple)
For i = 2 To RowIndex
    
    If Range("Type").Cells(i, 1) <> Empty Or i = RowIndex Then
        'End of group
        iEnd = Range("Type").Cells(i, 1).Row - 1
        
        Rows(iStart & ":" & iEnd).Group
        iStart = iEnd + 2
        
    End If

Next


'Deeper levels grouping
bGroup = False

For j = 2 To iMaxDepth 'Column
    For i = 2 To RowIndex 'Row
    
         
        'Find end of group (row with value on column or previous column
        If bGroup = True Then
            
            For x = j To 1 Step -1
                If Range("Type").Cells(i, x) <> Empty Or i = RowIndex Then
                    'End of group
                    iEnd = Range("Type").Cells(i, x).Row - 1
                    
                    Rows(iStart & ":" & iEnd).Group
                    bGroup = False
                    Exit For
                End If
            Next
            
        End If
                
        'Find start of group (corner)
        If bGroup = False And Range("Type").Cells(i, j) <> Empty And Range("Type").Cells(i + 1, j + 1) <> Empty Then
            iStart = Range("Type").Cells(i, j).Row + 1
            bGroup = True
        End If
    
    Next
Next



End Sub
 
Kan je niet gewoon een macro opnemen van de door jou gewenste sorteeractie en de code onderaan je bestaande code zetten
 
Ik heb het bestand geupload. Ben met beide methoden bezig geweest. tot op heden nog niet gelukt.
bestanden sorteren van z naar a is mij tot op heden niet gelukt. Denk omdat het komt omdat het hyperlinks betreft.



Bekijk bijlage sorteren.xlsm
 
Weinig gedaan met de suggestie zo te zien:

Code:
Private Sub CommandButton1_Click()
    sn = Filter(Split(CreateObject("wscript.shell").exec("cmd /c Dir ""D:\test\*.*"" /b /a-d /o-d").stdout.readall, vbCrLf), ".")
    cells(1).resize(Ubound(sn)+1)=application.transpose(sn)
End Sub
 
@ snb wel geprobeerd, maar liep snel vast.

weer jouw suggestie geprobeerd. Deze werkt, echter niet als hyperlink.
Den er verder meegegaan en met behulp van een hulpkolom een hyperlink er van gemaakt.
Dat werkt.
Windows komt echter dan elke keer met een beveilingsvraag. Dat je geen onbekende bestanden moet openen want die kunnen virussen bevatten. enz enz enz.

Er zijn echter meerdere wegen die naar rome leiden. Misschien heeft iemand nog een andere suggestie.
Daarom markeer ik de vraag nog niet als opgelost.
 
Kijk eens naar de formulering van je oorspronkelijke vraag: daar staat niets over hyperlinks.
Als je niet formuleert wat je wil is een aangedragen suggestie nooit 'goed' en een verspilling van de tijd van vrijwillige helpers.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan