Results 1 to 10 of 380

Thread: Appendix Thread. ( Codes for other Threads, etc.) Event Coding Drpdown Data validation

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #11
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,521
    Rep Power
    10

    Some Killing File tests / What order does Dir(with wild cards) find stuff

    Some notes , tests in support of this
    https://www.excelforum.com/excel-pro...-the-file.html
    These are just some notes and tests into what order the Dir( with wild cards ) thing does stuff.


    Introduction
    VBA Dir Function thing ( https://docs.microsoft.com/en-us/off...p/dir-function )
    In the simplest form, ….._
    _____ Dir(Fullpath&FileName, __ )
    _............
    Code:
    Dim IsFileName As String
      IsFileName = Dir("C:\MyFolder\myFileName.xls", __ )
    this basically gives you the file name back if it exists, based on you giving it the full path and File name string, Fullpath&FileName.
    In the above example, if you had the file "myFileName.xls" in the foilder, "MyFolder", then the text "myFileName.xls" would be Placed in variable , IsFileName
    If that file does not exist, then it gives you back nothing, or rather an empty string of sorts “” ( I believe Dir is a throw back to older early computer days, when you typed something like Dir C:_____, and the result was that you got to go to that place which Dir C:_____ represented )
    It seem that in VBA the Dir is mostly used to loop through all files in a single folder*. ( *It does not suit too well for use in coding looking at all files in folders and sub folders ). The suitability of the Dir function for this is based on a couple of things.
    _(i) In Microsoft Windows, Dir supports the use of multiple character (*) and single character (?) wildcards to specify multiple files. ......
    You can use wild cards in the full path and file name string that you give it, so it will look for a file matching your given string. ( So typically you might give a string like “C:\myFolder\*.xl*”, which would look for any excel file: In this bit *.xl* , the first * allows for any file name, and the second * will allow for extensions such as .xls , .xlsm, .xlsx, .. etc… )
    __Dir _____ without arguments
    Code:
      IsFileName = Dir
    _(ii) After you use like Dir(Fullpath&FileName, __ ) once, then any use after of just _ Dir __ without any arguments, will give the next file it finds based on the criteria given by the wild carded full path and file name string you gave in the first use with arguments, or it returns "" if there are no further files meeting the criteria given by the wild carded full path and file name string you gave in the first use with arguments

    What this post is about:
    My interest was sparked by the reference thread ( https://www.excelforum.com/excel-pro...-the-file.html )
    I am interested in finding out which of the files Dir or Dir(Fullpath&FileName, __ )will choose if there are more than 1 file meeting the criteria of a string , Fullpath&FileName , containing wild cards




    Experiments so far
    I made a test folder , named "Folder"
    Folder.JPG : https://imgur.com/l9OwlQi
    Attachment 2213

    I created my files in this order
    _1 “wbCodes.xlsm” --- the main file with all the codes in it. This is in the same Folder as the folder which I named "Folder" ( The main Folder is called “Kill Stuff” : Kill Stuff Folder.JPG : https://imgur.com/hN26AoW )
    After making the main File, I created the folder, "Folder" , and created the following files in it. I created the following three files in the following order,
    _2 “SecondFirstAfterwb.xlsx” --- made first after making “wbCodes.xlsm”
    _3 “ThirdSecondAfterwb.xlsx” --- made second after making “wbCodes.xlsm”
    _4 “AForthThirdAfterwb.xlsx” --- made third after making “wbCodes.xlsm”

    I modified the codes from Alf and sintek from the referenced Thread, thus, ( I am mainly interested in the first part of the routines, as this deals with what the Dir chooses )

    Code:
    Sub zed369() ' sintek
    Dim Path As String, File As String, Cnt As Long
    Dim wb1 As Workbook, wb2 As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    ' sintek's Dir Stuff
    'Application.ScreenUpdating = False
    Set wb1 = ThisWorkbook: Set ws1 = wb1.Sheets("Sheet1")
    Path = ThisWorkbook.Path & "\Folder\": File = Dir(Path & "*.xl*") ' For this example, specific file is in a folder called Folder...same path as macro file...
    Debug.Print "First got by  Dir  is " & File
    Debug.Print
        For Cnt = 1 To 3 - 1 ' -1 because we have three files, but typically the first is got from the first use of Dir , which is typically outside the loop
         File = Dir: Debug.Print " use " & Cnt & " in loop of  Dir   gives " & File
        Next Cnt
    Debug.Print
    Debug.Print
    
    
    ' sintek's way to do stuff
    'Stop ' _____________________________________________________________________________
    'Set wb2 = Workbooks.Open(Path & File): Set ws2 = wb2.Sheets("Tabelle1")
    'With ws2
    '    .UsedRange.Copy ws1.Range("A1")
    'End With
    'wb2.Close
    'Kill Path & File
    'Application.ScreenUpdating = True
    End Sub
    '
    Sub CopyAndKill() ' Alf
    Dim aString As String, Cnt As Long, aStringToOpen As String
    ' Alf's Dir stuff
    'aString = Dir("N:\a_test\")
    aString = Dir("F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsdWbADOMsQueery\Kill Stuff\Folder\")
    Debug.Print "First got by  Dir  is " & aString
    aStringToOpen = "F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsdWbADOMsQueery\Kill Stuff\Folder\" & Dir("F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsdWbADOMsQueery\Kill Stuff\Folder\")
    Debug.Print "First file will be opened using this string  " & vbCrLf & aStringToOpen
    Debug.Print
        For Cnt = 1 To 3 - 1 ' -1 because we have three files, but typically the first is got from the first use of Dir , which is typically outside the loop
         aString = Dir: Debug.Print " use " & Cnt & " in loop of  Dir   gives " & aString
        Next Cnt
    Debug.Print
    Debug.Print
    
    
    'Stop ' __________________________________________________________________
    ' Alf's way to do the stuff
    'Workbooks.Open ("N:\a_test\" & Dir("N:\a_test\"))
    'Sheets("Sheet1").Activate
    'ActiveSheet.UsedRange.Copy
    'ThisWorkbook.ActiveSheet.Range("A1").PasteSpecial Paste:=xlAll
    'Application.CutCopyMode = False
    'Windows(aString).Close
    'Kill ("N:\a_test\" & Dir("N:\a_test\"))
    End Sub
    I get this sort of output ( in the immediate window )
    Code:
     First got by  Dir  is AForthThirdAfterwb.xlsx
    
     use 1 in loop of  Dir   gives SecondFirstAfterwb.xlsx
     use 2 in loop of  Dir   gives ThirdSecondAfterwb.xlsx
    
    
    First got by  Dir  is AForthThirdAfterwb.xlsx
    First file will be opened using this string  
    F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsdWbADOMsQueery\Kill Stuff\Folder\AForthThirdAfterwb.xlsx
    
     use 1 in loop of  Dir   gives SecondFirstAfterwb.xlsx
     use 2 in loop of  Dir   gives ThirdSecondAfterwb.xlsx
    Initially it appears that I get alphabetic order.
    But possibly there could be more to it than that.
    I will look again at this in a few days , possibly on some other computers and systems, and experiment with various settings , etc….




    In the next posts I will use this simplified routine which is only interested in looking at the order in which Dir chooses files.
    Rem 1 gives a few ways to get the string up to and including the Folder in which files are to be searched for, ( in the form below , ‘1b ) , is used to get the folder named “Folder” in the same folder as the workbook in which the routine is placed )
    Rem 2 : As before, an initial use of Dir(C:\somewhers\kjhfkhs.*sdfjkah,___) is made to set the search criteria, followed by the un argumented Dir in a loop which then looks for the next files
    Code:
    Sub DirOrder()
    Dim strWB As String
    Rem 1 get the full string, strWB, for a Folder to use in the  Dir(Fullpath&FileName, __ )        ( strWB=Fullpath&FileName - FileName )
    '1a) use the asking pop up thing, File dialogue folder picker
    '   With Application.FileDialog(msoFileDialogFolderPicker)
    '    .Title = "Folder Select"
    '    .AllowMultiSelect = False
    '        If .Show <> -1 Then
    '         Exit Sub
    '        Else
    '        End If
    '    Let strWB = .SelectedItems(1)  '  & "\"
    '   End With
    '
    '1b) Using a test Folder, named  Folder  in the same Folder as the workbook in which this code is
     Let strWB = ThisWorkbook.Path & "\Folder"
    '1c) Hard code instead
    'Let strWB = "F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsdWbADOMsQueery\Kill Stuff\Folder"
     Debug.Print "Folder used is" & vbCrLf & strWB & vbCrLf & "" & Right(strWB, (Len(strWB) - InStrRev(strWB, "\", -1, vbTextCompare)))
     Debug.Print
     Let strWB = strWB & "\"
    Rem 2 add last file bit for use in the  Dir(Fullpath&FileName, __ ) , but include wild cards...    http://www.excelfox.com/forum/showthread.php/2056-Appendix-Thread-(-Codes-for-other-Threads-HTML-Tables-etc-)?p=11089&viewfull=1#post11089 :  _(i) You can use wild cards in the full path and file name string that you give it, so it will look for a file matching your given string. ( So typically you might give a string like “C:\myFolder\*.xl*”, which would look for any excel file: In this bit *.xl* , the first * allows for any file name, and the second * will allow for extensions such as .xls , .xlsm, .xlsx, .. etc… )      _(ii) After you use like Dir(Fullpath&FileName, __ ) once, then any use after of just _ Dir __ without any arguments, will give the next file it finds based on the string you gave in the first use with arguments
    '2a)  Excel files
     Let strWB = strWB & "*.xls*"
    Dim file As String: Let file = Dir(strWB)
     Debug.Print "First got by  Dir(" & strWB & ")" & vbCrLf & "is             " & file
     Debug.Print
    Dim Cnt As Long
        For Cnt = 1 To 3 - 1 ' -1 because we have three files, but typically the first is got from the first use of Dir , which is typically outside the loop
         file = Dir: Debug.Print "Use " & Cnt & " in loop of unargumented   Dir   gives   " & file
        Next Cnt
     Debug.Print
     Debug.Print
    End Sub
    This would be comparible output ( in the Immedite Window ( http://www.eileenslounge.com/viewtop...247121#p247121 ) ) to the test files anf folder used so far

    HTML Code:
    Folder used is
    F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsdWbADOMsQueery\Kill Stuff\Folder
    Folder
    
    First got by  Dir(F:\Excel0202015Jan2016\ExcelForum\wbSheetMakerClsdWbADOMsQueery\Kill Stuff\Folder\*.xls*)
    is             AForthThirdAfterwb.xlsx
    
    Use 1 in loop of unargumented   Dir   gives   SecondFirstAfterwb.xlsx
    Use 2 in loop of unargumented   Dir   gives   ThirdSecondAfterwb.xlsx
    And here is what it looks like in the explorer window:
    ExpOrder1.JPG : https://imgur.com/OfQfHeH
    Attachment 2224
    Attached Images Attached Images

Similar Threads

  1. Replies: 189
    Last Post: 02-06-2025, 02:53 PM
  2. Replies: 293
    Last Post: 09-24-2020, 01:53 AM
  3. Appendix Thread. Diet Protokol Coding Adaptions
    By DocAElstein in forum Test Area
    Replies: 6
    Last Post: 09-05-2019, 10:45 AM
  4. Restrict data within the Cell (Data Validation)
    By dritan0478 in forum Excel Help
    Replies: 1
    Last Post: 07-27-2017, 09:03 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •