Sunteți pe pagina 1din 26

FileSystemObject in VBA Explained inShare FileSystemObject also called as FSO, provides an easy object based model to access computers

s file system. You simply have to create an instance of FileSystemObject in VBA and then you can generate files, read files, delete files, iterate though foldersand do many other operations on your computers file system. The FileSystemObject is present inside the Microsoft Scripting Runtime Library i.e. Scrrun.dll. This DLL supports the creation and manipulation of files using TextStream object and this is the reason why FSO doesnt supports operation on binary files. Uses of File System Object: FileSystemObject can be used for multiple tasks such as:

Creating, opening, reading, writing and deleting text files. Creating, altering and deleting folders. Iterating files and folders. Copying and moving files or folders. Checking if a location (file path) exists or not.

Accessing FileSystemObject: The FileSystemObject comprises of several object collections and each of these object collections contain information about a specific aspect of file system. These collections are: Object Description This object allows you to get information about a drive attached to your system. For instance it can tell you the space available in a drive, its logical name etc. Note that the drive object that we are referring here doesnt necessarily means the hard disk, it can be a CD-ROM, Flash drive, RAM or even a logically connected drive via LAN. This object allows you to create, delete, move or query a folder hierarchy. This object allows you to create, delete, move or query a File. TextStream object allows you to read or write text files.

Drive

Folder File TextStream

So, diagrammatically a FileSystemObject can be shown as:

Please note that FSO communicates with most of the above objects indirectly. It just directly contains the object collection for Drives. Each Drive object in the Drives collection contains a chain of Folder objects. And each Folder object contains a File collection. To make it more meaningful, lets say it this way: A FileSystemObject contains three main methods to fetch (read) specific information about Drives, Folders or Files, these methods are GetDrive, GetFolder andGetFile respectively. Now lets say you need to find the file size of a particular file, so you will create an instance of the GetFile method and then fetch its size property. Note: GetDrive, GetFolder and GetFile are not the only methods inside FSO, I have just used them to explain things. In the below section we will see all the methods contained inside FileSystemObject. FSO Methods: Below table gives details about various FileObjectSystem methods and the tasks they perform:

Method GetDrive, GetFolder and GetFile CreateFolder and CreateTextFile DeleteFile and DeleteFolder

Description These methods are used for fetching information about Drive, Folders and Files respectively. Helps in creating new folders or files.

Helps in deleting exiting files or folders.

CopyFile and CopyFolder

These methods help in copying files or folders from one location to another. These methods help in moving files or folders from one location to another.

MoveFile and MoveFolder

Creating a FileSystemObject in VBA: In this section we will deal with two things:

Creating a reference of Microsoft Scripting Runtime Library i.e. Scrrun.dll Creating an FSO Object.

Creating a reference of Microsoft Scripting Runtime Library: To create a reference of Microsoft Scripting Runtime Library follow the below steps:

First of all open the VBA editor by pressing Alt + F11.

Next, navigate to Tools > Reference as shown above.

This will open a references window. Here select and chec k the entry Microsoft Scripting Runtime and click OK.

Now the reference to Microsoft Scripting Runtime Library has been added.

Creating a FSO Object: Creating a FSO object is simple, follow the below steps to do this:

In the VBA editor navigate to Insert > Module.

Now in the module window type Public FSO As New FileSystemObject. This will create an object of FileSystemObject with the name FSO.

After this you can simply access the FileSystemObjects methods using the FSO object. 6 Practical Examples of accessing FileSystemObject to perform different tasks: Now lets move to some practical examples of FSO: Example 1: Use FSO to find the total free space of a drive. Below is the code to do this: view plaincopy to clipboardprint? 1. 'Creating a FileSystemObject 2. Public FSO As New FileSystemObject 3. Sub DiskSpace() 4. Dim drv As Drive 5. Dim Space As Double 6. Set drv = FSO.GetDrive("C:") ' Creating the the Drive object 7. Space = drv.FreeSpace 8. Space = Space / 1073741824 'converting bytes to GB 9. Space = WorksheetFunction.Round(Space, 2) ' Rounding 10. MsgBox "C: has free space = " & Space & " GB" 11. End Sub Explanation: In this code first we have created a Drive object using GetDrive Method and then we have used its FreeSpace property to fetch the free space. Finally we have displayed the free space using a message box. Note that there are two properties to fetch the free space of a drive i.e. drv.FreeSpace anddrv.AvailableSpace. Example 2: Check if a Folder exists or not. If the folder doesnt exists then create that folder. Below is the code: view plaincopy to clipboardprint? 1. 'Creating a FileSystemObject 2. Public FSO As New FileSystemObject 3. Sub ChkFolder() 4. Dim Fldr_name As String 5. Fldr_name = InputBox("Enter the path of the folder to check :") 6. If Len(Fldr_name) > 0 Then 7. If FSO.FolderExists(Fldr_name) = True Then 8. MsgBox "Folder Exists!"

9. Else 10. FSO.CreateFolder (Fldr_name) 11. MsgBox ("Folder Created!") 12. End If 13. Else 14. MsgBox "Wrong Input" 15. End If 16. End Sub Explanation: In the code we have used an InputBox function to get the path of folder from the user. After this using If statement along with FolderExists method we have checked whether that folder is present or not. If the folder is not present then we create that folder using the CreateFolder method. Note: CreateFolder method will only create a single folder at a time. So, if you supply an argument C:\Folder1\Folder2\Folder3 to it then it will only create the Folder3 inside Folder2. But if Folder2 doesnt exist then it will throw a path not found error. Example 3: Write a code using FSO to copy a Folder from one location to another. view plaincopy to clipboardprint? 1. Below is the code to accomplish this: 2. 'Creating a FileSystemObject 3. Public FSO As New FileSystemObject 4. Sub CopyFolder() 5. FSO.CopyFolder "C:\Source-Folder\", "D:\Destination-Folder\", True 6. MsgBox "Copying Done!" 7. End Sub Explanation: In the code we have used the CopyFolder method of FSO, this method accepts three arguments:

Source Path Destination path A Boolean argument to specify Overwrite Existing.

Example 4: Using FileSystemObject fetch the Temp directory, System folder and Windows folder. To do this we can use the below code: view plaincopy to clipboardprint? 1. 'Creating a FileSystemObject 2. Public FSO As New FileSystemObject 3. Sub GetFolderpath() 4. Dim Windows_Fldr As String

5. Dim System_Fldr As String 6. Dim Temp_Fldr As String 7. Windows_Fldr = FSO.GetSpecialFolder(0) 8. System_Fldr = FSO.GetSpecialFolder(1) 9. Temp_Fldr = FSO.GetSpecialFolder(2) 10. MsgBox ("Windows folder path = " & Windows_Fldr & vbNewLine & _ 11. "System folder path = " & System_Fldr & vbNewLine & _ 12. "Temp folder path = " & Temp_Fldr) 13. End Sub

Explanation: In the code we have used the GetSpecialFolder method of FSO, this method accepts a single numerical argument i.e. 0-2.

FSO.GetSpecialFolder(0) Fetches the path of Windows Folder. FSO.GetSpecialFolder(1) Fetches the path of System Folder. FSO.GetSpecialFolder(2) Fetches the path of Local Temporary folder.

Example 5: Create a text file, write some content to it, then read the file and finally delete the file. Below is the code to accomplish this: view plaincopy to clipboardprint? 1. 'Creating a FileSystemObject 2. Public FSO As New FileSystemObject 3. Sub CreateFile() 4. Dim txtstr As TextStream 5. Dim FileName As String 6. Dim FileContent As String 7. Dim File As File 8. FileName = "C:\TestDirectory\File.txt" 'File to be created 9. 'Creating a file and writing content to it 10. FileContent = InputBox("Enter the File Content") 11. If Len(FileContent) > 0 Then 12. Set txtstr = FSO.CreateTextFile(FileName, True, True)

13. txtstr.Write FileContent 14. txtstr.Close 15. End If 16. ' Reading from the file that we have just created 17. If FSO.FileExists(FileName) Then 18. Set File = FSO.GetFile(FileName) 19. Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault) 20. MsgBox txtstr.ReadAll 21. txtstr.Close 22. ' Finally Deleting the File 23. File.Delete (True) 24. End If 25. End Sub Explanation: This code first creates a text file, adds content to it, then reads it, displays it using a message box and finally deletes that file. Example 6: Write a VBA Code that can iterate all the files present inside a folder and also fetches their size and modified date. Following code can accomplish this task: view plaincopy to clipboardprint? 1. 'Creating a FileSystemObject 2. Public FSO As New FileSystemObject 3. Sub ListFiles() 4. 'Declaring variables 5. Dim objFolder As Folder 6. Dim objFile As File 7. Dim strPath As String 8. Dim NextRow As Long 9. 'Specify the path of the folder 10. strPath = "C:\Users\Aniee\Desktop\ExcelTrick\ " 11. 'Create the object of this folder 12. Set objFolder = FSO.GetFolder(strPath) 13. 'Check if the folder is empty or not 14. If objFolder.Files.Count = 0 Then 15. MsgBox "No files were found...", vbExclamation 16. Exit Sub 17. End If 18. 'Adding Column names for A, B, and C 19. Cells(1, "A").Value = "File Name" 20. Cells(1, "B").Value = "Size" 21. Cells(1, "C").Value = "Modified Date/Time" 22. 'Find the next available row 23. NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1 24. 'Loop through each file in the folder

25. For Each objFile In objFolder.Files 26. 'List the name, size, and date/time of the current file 27. Cells(NextRow, 1).Value = objFile.Name 28. Cells(NextRow, 2).Value = objFile.Size 29. Cells(NextRow, 3).Value = objFile.DateLastModified 30. 'Find the next row 31. NextRow = NextRow + 1 32. Next objFile 33. End Sub Explanation: In this code we have created a Folder object and then we are iterating all its files using For Each loop. From the file object we are fetching the Name, Size and DateLastModified properties and finally we are writing them to the active worksheet. So, this was all about FileSystemObject and how to use it in VBA. Do share your comments related to the topic.

File Handling And FSO Object


Tips >> Visual Basic The File System Object (FSO) enables you to manipulate the files, folders and drives as well as read and write to sequential files. Before using the FSO, you have to add the "Microsoft Scripting Runtime Library" to the current project by selecting "Project","References" from the menu bar. Alternatively you can use the CreateObject function to create the reference

at run-time.

Set fso = CreateObject("Scripting.FileSystemObject")

EXAMPLE PROGRAMS: The following example programs illustrate how to use the File System Object.

Listing Setting

subdirectories

Recursively Attributes

Loading subdirectories into the TreeView control

FILE SYSTEM OBJECT: There 1. File. 2. Folder. 3. Drive. 4. TextStream. 5. Random Access Files. The FileSystemObject is used to manipulate the files, folders and directories. The following is a list of some of the methods avaiable to the FileSystemObject. are five types of File System Object.

File System Object Methods Method CopyFile CopyFolder CreateFolder CreateTextFile DeleteFile DeleteFolder DriveExists FileExists Description Used to copy an existing file. Used to copy an existing folder. Used to create a folder. Used to create a text file. Used to delete a file. Used to delete a folder. Used to determine whether a drive exists. Used to determine whether a file exists.

FolderExists

Used to determine whether a folder exists.

GetAbsolutePathName Used to return the full path name. GetDrive GetDriveName GetFile GetFileName GetFolder Used to return a specified drive. Used to return the drive name. Used to return a specified file. Used to return the file name. Used to return a specified folder.

GetParentFolderName Used to return the name of the parent folder. GetTempName MoveFile MoveFolder OpenTextFile Used to create and return a string representing a file name. Used to move a file. Used to move a folder. Used to open an existing text file.

The FSO File Object

The following uses some of the FSO File's properties to display information about a file.

Private Sub displayFileInfo(ByVal fileName As String) Dim fso As New FileSystemObject Dim fileSpec As File Dim strInfo As String Set fileSpec = fso.GetFile(fileName) strInfo = fileSpec.Name & vbCrLf strInfo = strInfo & "Created: "

strInfo = strInfo & fileSpec.DateCreated & vbCrLf strInfo = strInfo & "Last Accessed: " strInfo = strInfo & fileSpec.DateLastAccessed & vbCrLf strInfo = strInfo & "Last Modified: " strInfo = strInfo & fileSpec.DateLastModified MsgBox strInfo, vbInformation, "File Information" Set fileSpec = Nothing End Sub

The Copy, Delete, Move, and openAsTextStream methods are available for the FSO File object.

The FSO Folder Object

The following uses some of the FSO Folder's properties to display information about a folder.

Private Sub displayFolderInfo(ByVal folderName As String) Dim fso As New FileSystemObject Dim folderSpec As Folder Dim strInfo As String Set folderSpec = fso.GetFolder(folderName) strInfo = folderSpec.Name & vbCrLf strInfo = strInfo & "Created: " strInfo = strInfo & folderSpec.DateCreated & vbCrLf strInfo = strInfo & "Size: " strInfo = strInfo & folderSpec.Size MsgBox strInfo, vbInformation, "Folder Information" Set folderSpec = Nothing End Sub

The Copy, CreateTextFile, Delete, and Move methods are available for the FSO Folder object.

THE FSO DRIVE OBJECT

The following example iterates through the Drives collection and writes the drive name for each drive found.
Dim fso As New FileSystemObject Dim connectedDrives As drives, drv As Drive Dim strInfo As String, driveName As String Set connectedDrives = fso.drives On Error Resume Next For Each drv In connectedDrives strInfo = strInfo & drv.DriveLetter & ": " ' Check if the drive is shared If drv.DriveType = 3 Then driveName = drv.ShareName Else driveName = drv.VolumeName End If strInfo = strInfo & driveName strInfo = strInfo & " Free space: " & drv.FreeSpace If drv.IsReady Then strInfo = strInfo & " ready" & vbCrLf Else strInfo = strInfo & " not ready" & vbCrLf End If Next drv MsgBox strInfo, vbInformation, "Connected Drives" Set connectedDrives = Nothing Set fso = Nothing

The FSO TextStream Object The FSO TextStream object is used to read and write to sequential text files.

WRITING TEXT FILES When writing to a file, you can either create a new file, overwrite an existing file or append text to the end of an existing file. The CreateTextFile method is used to create a text file and return a reference to a TextStream object. The FSO File object'sOpenAsTextStream method may be used to open a TextStream ForAppending, ForReading or ForWriting. The Write method is used to write a string, the WriteBlankLine method is used to write blank lines and the WriteLine method is used to write a line of text ending with a newline character.

fsoStream.Write "Hello" fsoStream.WriteBlankLines 2 fsoStream.WriteLine "First line in the text file."

The FSO TextStream CreateTextFile Method The following example creates a text file using the CreateTextFile method. The CreateTextFile method takes as parameters the filename to be created and a Boolean value indicating whether the file should be overwritten if it exists. The default value is True.

Dim fso As New FileSystemObject Dim fsoStream As TextStream ' Create a text file, and return a reference to a TextStream Set fsoStream = fso.CreateTextFile("c:\junk\junk.txt", True) ' Write to the file fsoStream.WriteLine "First line in the text file." fsoStream.WriteBlankLines 2 fsoStream.WriteLine "Line after two blank lines." fsoStream.Close Set fsoStream = Nothing

Set fso = Nothing

APPENDING TO THE END OF A TEXTSTREAM

To append to a file, open the TextStream using the ForAppending parameter. Text written to the file is appended to the end.

Dim fso As New FileSystemObject Dim f As File Dim fsoStream As TextStream Set f = fso.GetFile("c:\junk\junk.txt") Set fsoStream = f.OpenAsTextStream(ForAppending) ' Append lines to the file fsoStream.WriteLine "Appending line to the text file" fsoStream.Close Set fsoStream = Nothing Set fso = Nothing

READING TEXT FILES The FSO File object's OpenAsTextFile(ForReading) is used to open a text file for reading. The Read, ReadAll and ReadLinemethods are used to read from the text file. The Read method takes as a parameter the number of characters to be read. The ReadAll method reads the whole text file. This is not advisable for large files as it's a

waste of memory.

The ReadLine method reads one line of text from the file. The AtEndOfStream property may be used to test for the end of file, and the AtEndOfLine property may be used to for the end of a line.

singleChar = fsoStream.Read(1) wholeFile = fsoStream.ReadAll lineText = fsoStream.ReadLine

The Skip(n) method may be used to skip n characters, and the SkipLine method is used to skip a whole line.

READING EXAMPLE:

To read a file, open the TextStream using the ForReading parameter.

Dim fso As New FileSystemObject Dim f As File Dim fsoStream As TextStream Dim strLine As String Set f = fso.GetFile("c:\junk\junk.txt") Set fsoStream = f.OpenAsTextStream(ForReading) ' Read the file line by line, printing the results to the Form Do While Not fsoStream.AtEndOfStream strLine = fsoStream.ReadLine Debug.Print strLine Loop fsoStream.Close Set fsoStream = Nothing Set f = Nothing Set fso = Nothing

Example Programs

The following examples all use the FSO Object.


Listing subdirectories Recursively Setting Attributes Loading subdirectories into the TreeView control List subdirectories recursively

The following example iterates through directories recursively writing the name to a

MultiLine TextBox. The number of directories found and the total size is written as a summary at the end.

Option Explicit Private Sub dirFiles_Change() Dim fso As New FileSystemObject, startFolder As Folder Dim numFolders As Integer Dim strStart As String, strSummary As String strStart = dirFiles.Path ' Avoid root directories as it's likely to run out of memory If Len(dirFiles.Path) > 3 Then txtDisplay.Text = "" Set startFolder = fso.GetFolder(strStart) numFolders = displayFolder(strStart, True) strSummary = numFolders & " Folders, " strSummary = strSummary & "Total size: " & Format(startFolder.Size, "#,##0") txtDisplay.Text = txtDisplay.Text & vbCrLf & strSummary Else txtDisplay.Text = "" End If Set startFolder = Nothing Set fso = Nothing End Sub Private Function displayFolder(ByVal folderName As

String, ByVal firstTime As Boolean) As Integer Dim fso As New FileSystemObject Dim rootFolder As Folder, currentFolder As Folder, subFolder As Folder Static folderCount As Integer Set rootFolder = fso.GetFolder(folderName) If firstTime = True Then folderCount = 0 End If txtDisplay.Text = txtDisplay.Text & rootFolder & vbCrLf folderCount = folderCount + 1 For Each currentFolder In rootFolder.SubFolders txtDisplay.Text = txtDisplay.Text & currentFolder & vbCrLf folderCount = folderCount + 1 For Each subFolder In currentFolder.SubFolders folderCount = folderCount + displayFolder(subFolder.Path, True) Next subFolder Next currentFolder displayFolder = folderCount Set rootFolder = Nothing Set fso = Nothing End Function

SETTING

ATTRIBUTES:

The following example sets the file attributes for all files meeting a specified file pattern in

a directory.

Option Explicit Private Sub cmdAttributes_Click() Dim fso As New FileSystemObject Dim f As File Dim counter As Integer, attValue As Integer For counter = 0 To filList.ListCount - 1 Set f = fso.GetFile(filList.Path & "\" & filList.List(counter)) attValue = 0

If chkAttributes(0).Value = 1 Then attValue = 32 End If If chkAttributes(1).Value = 1 Then attValue = 1 End If If chkAttributes(2).Value = 1 Then attValue = 2 End If f.Attributes = attValue Next counter End Sub Private Sub dirList_Change() filList.Path = dirList.Path End Sub Private Sub drvDrive_Change() On Error GoTo driveError retryDrive: dirList.Path = drvDrive.Drive Exit Sub driveError: Dim response As Integer, description As Integer description = vbExclamation + vbRetryCancel response = MsgBox(Err.description, description, "Drive Error") If response = vbRetry Then Resume retryDrive End If End Sub Private Sub txtPattern_GotFocus() txtPattern.SelStart = 0 txtPattern.SelLength = Len(txtPattern.Text) End Sub Private Sub txtPattern_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 filList.Pattern = txtPattern.Text End If End Sub

Loading

subdirectories

into

the

TreeView

control

The following example lists all of the directories in the C Drive in a TreeView control.

When the "Select Files" CommandButton is clicked, the nodes with a check in them are added to the Selection TextBox.

Option Explicit Private Sub cmdSelect_Click() Dim x As Node txtSelection.Text = "" For Each x In tvwFileSystem.Nodes If x.Checked Then txtSelection.Text = txtSelection.Text & x.Key & vbCrLf End If Next x End Sub Private Sub Form_Activate() Dim fso As New FileSystemObject, startFolder As Folder, subFolder As Folder tvwFileSystem.ImageList = imlImages tvwFileSystem.Checkboxes = True Set startFolder = fso.GetFolder("C:\") For Each subFolder In startFolder.SubFolders addFolder CStr(subFolder) Next subFolder End Sub Private Sub tvwFileSystem_Collapse(ByVal Node As MSComctlLib.Node) Node.Image = "closed" End Sub Private Sub tvwFileSystem_Expand(ByVal Node As MSComctlLib.Node) Node.Image = "open" End Sub Private Sub addFolder(ByVal folderName As String) Dim fso As New FileSystemObject Dim rootFolder As Folder, currentFolder As Folder, subFolder As Folder Dim strParentName As String

Set rootFolder = fso.GetFolder(folderName) If Not rootFolder.IsRootFolder Then strParentName = rootFolder.ParentFolder If Len(strParentName) > 3 Then tvwFileSystem.Nodes.Add strParentName, tvwChild, rootFolder, rootFolder.Name, closed" Else tvwFileSystem.Nodes.Add , tvwNext, rootFolder, rootFolder.Name, "closed" End If End If For Each currentFolder In rootFolder.SubFolders tvwFileSystem.Nodes.Add CStr(rootFolder), tvwChild, currentFolder, currentFolder.Name, "closed" For Each subFolder In currentFolder.SubFolders addFolder subFolder.Path Next subFolder Next currentFolder End Sub

RANDOM ACCESS FILES: Visual Basic uses fixed length records in order to implement random access files. Data may be inserted into the file without destroying any other data in the file. Data may also be amended or deleted without having to rewrite the entire file, which is the case with sequential files. USER DEFINED TYPES: A user defined type is a collection of variables that create a new type, which may be thought of as a record. They are commonly used to define fixed length records that may be used in random access files. The following is an example of a user defined type in Visual Basic.

Private Type clientRecord accountNumber As Integer strSurname As String * 15 strForename As String * 15 balance As Currency End Type

The variables declared within the type are members of the type. String variables are given a fixed length in order that the record is a fixed length. Members of the record are accessed using the dot operator as in the following example.

Dim cr As clientRecord cr.accountNumber = 100 Debug.Print cr.accountNumber

Note: Fixed length strings are not supported in VB.Net.

OPENING RANDOM ACCESS FILES: Random access files may be opened as "read only", "write only" or "read and write". If no mode is specified, the default is read and write.

Open filename For Random Access Read Write As #1 Len = recordLength

The As clause specifies a file number that will be used as a handle to reference the file. The FreeFile can be used to get the next free file number.

Dim fileNum As Integer fileNum = FreeFile Open filename For Random As #fileNum Len = recordLength

Reading and Writing to Random Access Files Get is used to read a record a record from a text file into a user defined record, and Put is used to write a user defined record to a file. The Get function takes as parameters the file handle, the record number, and the user defined record. The following example gets record 8 from file handle 1 and places it in a user defined

record.

Get #1, 8, userRecord

The Put function takes as parameters the file handle, the record number, and the user defined type. The following example write the data stored in the user defined type to record 4 from file

handle 1.

Put #1, 4, userRecord

RANDOM

ACCESS

FILE

EXAMPLE

The following example uses a user-defined type for a random access file. If the file does

not exist, 100 blank records are written to the file.

Option Explicit Private Type clientRecord accountNumber As Integer strSurname As String * 15 strForename As String * 15 balance As Currency End Type Private Sub Form_Activate() Dim strFilename As String Dim recordLength As Long Dim cr As clientRecord recordLength = LenB(cr) On Error GoTo userCancelled cdlOpen.CancelError = True ' Get a valid filename Do cdlOpen.ShowOpen strFilename = cdlOpen.filename Loop While cdlOpen.FileTitle = "" ' Open the file for read and write Open strFilename For Random Access Read Write As #1 Len = recordLength Get #1, 1, cr If cr.accountNumber = 0 Then initialiseFile End If populateFields 1 Exit Sub userCancelled: ' The user chose to cancel, so end the program End End Sub Private Sub cmdFirst_Click() updateRecord populateFields 1

End Sub Private Sub cmdLast_Click() updateRecord populateFields 100 End Sub Private Sub cmdNext_Click() If Val(lblAccountNumber.Caption) < 100 Then updateRecord populateFields Val(lblAccountNumber.Caption + 1) Else MsgBox "At last record", vbInformation, "Random Access Files" End If End Sub Private Sub cmdPrevious_Click() If Val(lblAccountNumber.Caption) > 1 Then updateRecord populateFields Val(lblAccountNumber.Caption - 1) Else MsgBox "At first record", vbInformation, "Random Access Files" End If End Sub Private Sub Form_Unload(Cancel As Integer) Dim response As Integer response = MsgBox("Are you sure", vbQuestion + vbYesNo, "Exit Program") If response = vbNo Then Cancel = True Else updateRecord Close #1 End If End Sub Private Sub initialiseFile() Dim counter As Integer Dim blankRecord As clientRecord ' write 100 blank records to the file For counter = 1 To 100 blankRecord.accountNumber = counter Put #1, counter, blankRecord

Next counter MsgBox "File initialised", vbInformation, "Random Access Files" End Sub Private Sub populateFields(ByVal recNo As Integer) Dim cr As clientRecord Get #1, recNo, cr lblAccountNumber.Caption = cr.accountNumber txtForename.Text = cr.strForename txtSurname.Text = cr.strSurname txtBalance.Text = cr.balance txtForename.SetFocus End Sub Private Sub updateRecord() Dim cr As clientRecord cr.accountNumber = Val(lblAccountNumber.Caption) cr.strForename = txtForename.Text cr.strSurname = txtSurname.Text cr.balance = Val(txtBalance.Text) Put #1, Val(lblAccountNumber.Caption), cr End Sub Private Sub txtBalance_GotFocus() txtBalance.SelStart = 0 txtBalance.SelLength = Len(Trim(txtBalance.Text)) End Sub Private Sub txtForename_GotFocus() txtForename.SelStart = 0 txtForename.SelLength = Len(Trim(txtForename.Text)) End Sub Private Sub txtSurname_GotFocus() txtSurname.SelStart = 0 txtSurname.SelLength = Len(Trim(txtSurname.Text)) End Sub

S-ar putea să vă placă și