Execute macro with lastest .txt file

JTL9161

Well-known Member
Joined
Aug 29, 2012
Messages
593
Office Version
  1. 365
Platform
  1. Windows
I have a macro that first opens a directory window where I store daily .txt files. I double click on the latest file and the marco imports it into Excel and continues. Been trying to find code that would at the start of the macro open the directory and import the latest .txt file.

Here's what I have now:

Dim FName As String
Dim x As Variant
Dim Path As String
Dim MyFile As String, Cmd As String

ChDrive "L"
ChDir "L:\1A-PHARMACY PB\DAILY REPORTS\01 - JANUARY\FSPRIME"
FName = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If FName = "False" Then Exit Sub
ChDir "L:\1A-PHARMACY PB\DAILY REPORTS"
ActiveWorkbook.Worksheets(1).Activate

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FName, _
Destination:=Range("$A$1"))
.Name = "Sheet1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

Thank you,
James
 

Excel Facts

How to fill five years of quarters?
Type 1Q-2023 in a cell. Grab the fill handle and drag down or right. After 4Q-2023, Excel will jump to 1Q-2024. Dash can be any character.
Do you mean that you want the code to find the latest file without user intervention?

If so how can the file be identified?

By it's name? By it's last modified date? Date created?
 
Upvote 0
Yes. Find the latest file (by last modified date) and import it.
 
Upvote 0
You could try using this function.
Code:
Function GetLastModified(objFolder As Object, Optional strExt = "*") As String
Dim objFile As Object
Dim objLastFile As Object

    For Each objFile In objFolder.Files
    
        If LCase(objFile.Name) Like LCase("*." & strExt) Then
            If objLastFile Is Nothing Then
                Set objLastFile = objFile
            Else
                If objLastFile.DateLastModified < objFile.DateLastModified Then
                    Set objLastFile = objFile
                End If
            End If
        End If
        
    Next objFile
    
    GetLastModified = objLastFile.Path
    
End Function

It requires you to pass it a Folder object and you have the option to specify a file extension, e.g. txt.

So you could use it something like this.
Code:
Dim FSO As Object
Dim objFld As Object
Dim strPath As String
Dim FName As String

    strPath = "L:\1A-PHARMACY PB\DAILY REPORTS\01 - JANUARY\FSPRIME"
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Set objFld = FSO.GetFolder(strPath, "txt")
    
    FName = GetLastModified(objFld)


    ' rest of code to import text file.
 
Upvote 0
sorry..you lost me a little. Do I add both above codes to the start of my macro? When I do I get "expected end sub" error after my DIM's.
 
Upvote 0
No, the first code is a stand-alone function that is separate from your code - it could even go in it's own module.

You would then replace this part of the original code,
Code:
ChDrive "L"
ChDir "L:\1A-PHARMACY PB\DAILY REPORTS\01 - JANUARY\FSPRIME"
FName = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If FName = "False" Then Exit Sub
ChDir "L:\1A-PHARMACY PB\DAILY REPORTS"
with this code.
Code:
Dim FSO As Object
Dim objFld As Object
Dim strPath As String
Dim FName As String

    strPath = "L:\1A-PHARMACY PB\DAILY REPORTS\01 - JANUARY\FSPRIME"
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Set objFld = FSO.GetFolder(strPath, "txt")
    
    FName = GetLastModified(objFld)


    ' rest of code to import text file.
 
Upvote 0
I have never used a FUNCTION before. I've added the code but how do I start it or access it to start running the rest of macro?
 
Upvote 0
James

You don't run the function

You run the code you have with the adjustments I suggested

If you do that the function should be called and return the latest file in the specified directory.
 
Upvote 0
Just got around to trying this. I made the revision as you said and now I am getting a Run Time Error 450 "wrong number of arguments or invalid property assignment" for this line of code: Set objFld = FSO.GetFolder(strPath, "txt")
 
Upvote 0
Oops, that's a typo.:eek:

Should be this, no idea where the ',"txt"' part came from
Code:
    Set objFld = FSO.GetFolder(strPath)
 
Upvote 0

Forum statistics

Threads
1,224,823
Messages
6,181,184
Members
453,020
Latest member
Mohamed Magdi Tawfiq Emam

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top