Returning Portions of a String
This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.
To work with part of a string's contents, you need to parse the string. You can use the InStr or InStrRev function to find the position at which to begin parsing the string. Once you've located that position, you can use the Left, Right, and Mid functions to do the job. The Left and Right functions return a specified number of characters from either the left or right portion of the string. The Mid function is the most flexible of the parsing functions—you can specify a starting point anywhere within the string, followed by the number of characters you want to return.
****Note ****Some of the VBA string functions come in two varieties, one that returns a string, and one that returns a string-type Variant value. The names of the functions that return a string include a dollar sign ("$"); for example, Chr$, Format$, LCase$, Left$, LTrim$, Mid$, Right$, RTrim$, Space$, Trim$, and UCase$. The functions that return a string-type Variant value have no dollar sign; for example, Chr, Format, LCase, Left, LTrim, Mid, Right, RTrim, Space, Trim, and UCase. The string-returning functions are faster; however, you'll get an error if you call them with a value that is Null. The functions that return a string-type Variant value handle Null values without an error. Code examples in this chapter use the string-returning functions where appropriate.
The following procedure parses a file path and returns one of the following portions: the path (everything but the file name), the file name, the drive letter, or the file extension. You specify which part of the string you want to return by passing a constant to the lngPart argument. The lngPart argument is defined as type opgParsePath, which contains custom enumerated constants declared in the modPublicDefs module in VBA.mdb in the ODETools\V9\Samples\ODETools\V9\Samples\OPG\Samples\CH07 subfolder on the Office 2000 Developer CD-ROM.
Note that this procedure uses the InStrRev function to find the last path separator, or backslash (\), in the string. If you used the InStr function, you'd have to write a loop to make sure that you'd found the last one. With the InStrRev function, you know that the first backslash you find is actually the last one in the string, and the characters to the right of it must be the file name.
Function ParsePath(strPath As String, _
lngPart As opgParsePath) As String
' This procedure takes a file path and returns
' the path (everything but the file name), the drive letter,
' or the file extension,
' depending on which constant was passed in.
Dim lngPos As Long
Dim strPart As String
Dim blnIncludesFile As Boolean
' Check that this is a file path.
' Find the last path separator.
lngPos = InStrRev(strPath, "\")
' Determine whether portion of string after last backslash
' contains a period.
blnIncludesFile = InStrRev(strPath, ".") > lngPos
If lngPos > 0 Then
Select Case lngPart
' Return file name.
Case opgParsePath.FILE_ONLY
If blnIncludesFile Then
strPart = Right$(strPath, Len(strPath) - lngPos)
Else
strPart = ""
End If
' Return path.
Case opgParsePath.PATH_ONLY
If blnIncludesFile Then
strPart = Left$(strPath, lngPos)
Else
strPart = strPath
End If
' Return drive.
Case opgParsePath.DRIVE_ONLY
strPart = Left$(strPath, 3)
' Return file extension.
Case opgParsePath.FILEEXT_ONLY
If blnIncludesFile Then
' Take three characters after period.
strPart = Mid(strPath, InStrRev(strPath, ".") + 1, 3)
Else
strPart = ""
End If
Case Else
strPart = ""
End Select
End If
ParsePath = strPart
ParsePath_End:
Exit Function
End Function
This procedure is available in the modStrings module in VBA.mdb in the ODETools\V9\Samples\ODETools\V9\Samples\OPG\Samples\CH07 subfolder on the Office 2000 Developer CD-ROM.
Calling this function as follows from the Immediate window returns "Test.txt":
? ParsePath("C:\Temp\Test.txt", opgParsePath.FILE_ONLY)