VB6Parse / Library / String / right

VB6 Library Reference

Right Function

Returns a String containing a specified number of characters from the right side of a string.

Syntax

Right(string, length)

Parameters

Return Value

Returns a String containing the specified number of characters from the right side of the string.

Remarks

The Right function extracts a substring from the end of a string. It is commonly used for: - Extracting file extensions - Getting the last N characters of a string - Parsing fixed-width data from the right - Removing prefixes or extracting suffixes Important Notes: - If length is 0, an empty string ("") is returned - If length >= Len(string), the entire string is returned - If string is Null, Right returns Null - If length is negative, a runtime error occurs (Error 5: Invalid procedure call or argument) - The function is 1-based (counts from position 1, not 0) Behavior with Different Length Values:

Length Value Result
0 Empty string ("")
1 to Len(string) Rightmost N characters
> Len(string) Entire string
Negative Runtime error (Error 5)

Typical Uses

  1. File Extensions: Extract file extension from filename
  2. Data Parsing: Extract rightmost fields from fixed-width data
  3. String Validation: Check string endings/suffixes
  4. Number Formatting: Get last digits of numbers
  5. Path Manipulation: Extract filename from path
  6. Text Processing: Remove prefixes, keep suffixes
  7. Data Extraction: Get trailing characters from codes/IDs
  8. String Truncation: Keep only the rightmost portion

Basic Examples

Example 1: Extract File Extension

Dim filename As String
Dim extension As String
filename = "document.txt"
extension = Right(filename, 4)  ' Returns ".txt"

Example 2: Get Last N Characters

Dim accountNumber As String
Dim lastFour As String
accountNumber = "1234567890"
lastFour = Right(accountNumber, 4)  ' Returns "7890"

Example 3: Check String Ending

Dim filename As String
filename = "report.pdf"
If Right(filename, 4) = ".pdf" Then
    MsgBox "This is a PDF file"
End If

Example 4: Extract from Fixed-Width Data

Dim record As String
Dim zipCode As String
record = "John Doe          New York     10001"
zipCode = Right(record, 5)  ' Returns "10001"

Common Patterns

Pattern 1: GetFileExtension

Function GetFileExtension(filename As String) As String
    ' Extract file extension including the dot
    Dim dotPos As Integer
    dotPos = InStrRev(filename, ".")
    If dotPos > 0 Then
        GetFileExtension = Right(filename, Len(filename) - dotPos + 1)
    Else
        GetFileExtension = ""
    End If
End Function

Pattern 2: GetLastNChars

Function GetLastNChars(text As String, n As Long) As String
    ' Safely get last N characters (won't error if string is too short)
    If n <= 0 Then
        GetLastNChars = ""
    ElseIf n >= Len(text) Then
        GetLastNChars = text
    Else
        GetLastNChars = Right(text, n)
    End If
End Function

Pattern 3: EndsWithString

Function EndsWithString(text As String, suffix As String, _
                       Optional caseSensitive As Boolean = True) As Boolean
    ' Check if string ends with a specific suffix
    Dim textEnd As String
    Dim suffixLen As Long
    suffixLen = Len(suffix)
    If suffixLen > Len(text) Then
        EndsWithString = False
        Exit Function
    End If
    textEnd = Right(text, suffixLen)
    If caseSensitive Then
        EndsWithString = (textEnd = suffix)
    Else
        EndsWithString = (UCase(textEnd) = UCase(suffix))
    End If
End Function

Pattern 4: RemovePrefix

Function RemovePrefix(text As String, prefixLen As Long) As String
    ' Remove prefix by keeping rightmost characters
    If prefixLen >= Len(text) Then
        RemovePrefix = ""
    Else
        RemovePrefix = Right(text, Len(text) - prefixLen)
    End If
End Function

Pattern 5: PadLeftToLength

Function PadLeftToLength(text As String, totalLength As Long, _
                        Optional padChar As String = " ") As String
    ' Pad string on the left to reach desired length
    Dim currentLen As Long
    Dim padding As String
    currentLen = Len(text)
    If currentLen >= totalLength Then
        PadLeftToLength = Right(text, totalLength)
    Else
        padding = String(totalLength - currentLen, padChar)
        PadLeftToLength = padding & text
    End If
End Function

Pattern 6: GetFilenameFromPath

Function GetFilenameFromPath(fullPath As String) As String
    ' Extract filename from full path
    Dim slashPos As Integer
    slashPos = InStrRev(fullPath, "\")
    If slashPos > 0 Then
        GetFilenameFromPath = Right(fullPath, Len(fullPath) - slashPos)
    Else
        GetFilenameFromPath = fullPath
    End If
End Function

Pattern 7: TruncateLeft

Function TruncateLeft(text As String, maxLength As Long, _
                     Optional ellipsis As String = "...") As String
    ' Truncate from left, keeping rightmost characters
    Dim textLen As Long
    textLen = Len(text)
    If textLen <= maxLength Then
        TruncateLeft = text
    Else
        TruncateLeft = ellipsis & Right(text, maxLength - Len(ellipsis))
    End If
End Function

Pattern 8: FormatAccountNumber

Function FormatAccountNumber(accountNum As String) As String
    ' Format account number showing only last 4 digits
    Dim lastFour As String
    If Len(accountNum) > 4 Then
        lastFour = Right(accountNum, 4)
        FormatAccountNumber = "****" & lastFour
    Else
        FormatAccountNumber = accountNum
    End If
End Function

Pattern 9: ExtractDomainExtension

Function ExtractDomainExtension(url As String) As String
    ' Extract domain extension (.com, .org, etc.)
    Dim dotPos As Integer
    ' Find last dot
    dotPos = InStrRev(url, ".")
    If dotPos > 0 Then
        ExtractDomainExtension = Right(url, Len(url) - dotPos + 1)
    Else
        ExtractDomainExtension = ""
    End If
End Function

Pattern 10: GetTrailingDigits

Function GetTrailingDigits(text As String) As String
    ' Extract trailing numeric characters
    Dim i As Integer
    Dim digitCount As Integer
    digitCount = 0
    For i = Len(text) To 1 Step -1
        If IsNumeric(Mid(text, i, 1)) Then
            digitCount = digitCount + 1
        Else
            Exit For
        End If
    Next i
    If digitCount > 0 Then
        GetTrailingDigits = Right(text, digitCount)
    Else
        GetTrailingDigits = ""
    End If
End Function

Advanced Usage

Example 1: File Extension Validator

' Comprehensive file extension validation and management
Class FileExtensionValidator
    Private m_validExtensions As Collection
    Public Sub Initialize()
        Set m_validExtensions = New Collection
    End Sub
    Public Sub AddValidExtension(extension As String)
        Dim ext As String
        ' Normalize extension (add dot if missing)
        If Left(extension, 1) <> "." Then
            ext = "." & extension
        Else
            ext = extension
        End If
        On Error Resume Next
        m_validExtensions.Add ext, UCase(ext)
        On Error GoTo 0
    End Sub
    Public Function IsValidFile(filename As String) As Boolean
        Dim ext As String
        Dim dotPos As Integer
        dotPos = InStrRev(filename, ".")
        If dotPos = 0 Then
            IsValidFile = False
            Exit Function
        End If
        ext = Right(filename, Len(filename) - dotPos + 1)
        On Error Resume Next
        Dim temp As String
        temp = m_validExtensions(UCase(ext))
        IsValidFile = (Err.Number = 0)
        On Error GoTo 0
    End Function
    Public Function GetExtension(filename As String) As String
        Dim dotPos As Integer
        dotPos = InStrRev(filename, ".")
        If dotPos > 0 Then
            GetExtension = Right(filename, Len(filename) - dotPos + 1)
        Else
            GetExtension = ""
        End If
    End Function
    Public Function ChangeExtension(filename As String, newExt As String) As String
        Dim dotPos As Integer
        Dim baseName As String
        Dim ext As String
        dotPos = InStrRev(filename, ".")
        If dotPos > 0 Then
            baseName = Left(filename, dotPos - 1)
        Else
            baseName = filename
        End If
        ' Normalize new extension
        If Left(newExt, 1) <> "." Then
            ext = "." & newExt
        Else
            ext = newExt
        End If
        ChangeExtension = baseName & ext
    End Function
    Public Function GetValidExtensions() As String
        Dim ext As Variant
        Dim result As String
        result = ""
        For Each ext In m_validExtensions
            If result <> "" Then result = result & ", "
            result = result & ext
        Next ext
        GetValidExtensions = result
    End Function
End Class

Example 2: Path Parser Module

' Parse and manipulate file paths
Module PathParser
    Public Function GetFilename(fullPath As String) As String
        ' Extract filename from full path
        Dim slashPos As Integer
        slashPos = InStrRev(fullPath, "\")
        If slashPos > 0 Then
            GetFilename = Right(fullPath, Len(fullPath) - slashPos)
        Else
            GetFilename = fullPath
        End If
    End Function
    Public Function GetDirectory(fullPath As String) As String
        ' Extract directory from full path
        Dim slashPos As Integer
        slashPos = InStrRev(fullPath, "\")
        If slashPos > 0 Then
            GetDirectory = Left(fullPath, slashPos - 1)
        Else
            GetDirectory = ""
        End If
    End Function
    Public Function GetFilenameWithoutExtension(fullPath As String) As String
        ' Get filename without extension
        Dim filename As String
        Dim dotPos As Integer
        filename = GetFilename(fullPath)
        dotPos = InStrRev(filename, ".")
        If dotPos > 0 Then
            GetFilenameWithoutExtension = Left(filename, dotPos - 1)
        Else
            GetFilenameWithoutExtension = filename
        End If
    End Function
    Public Function GetExtension(fullPath As String) As String
        ' Get file extension including dot
        Dim filename As String
        Dim dotPos As Integer
        filename = GetFilename(fullPath)
        dotPos = InStrRev(filename, ".")
        If dotPos > 0 Then
            GetExtension = Right(filename, Len(filename) - dotPos + 1)
        Else
            GetExtension = ""
        End If
    End Function
    Public Function CombinePath(directory As String, filename As String) As String
        ' Combine directory and filename
        If Right(directory, 1) = "\" Then
            CombinePath = directory & filename
        Else
            CombinePath = directory & "\" & filename
        End If
    End Function
    Public Function GetParentDirectory(fullPath As String) As String
        ' Get parent directory
        Dim dir As String
        Dim slashPos As Integer
        dir = GetDirectory(fullPath)
        slashPos = InStrRev(dir, "\")
        If slashPos > 0 Then
            GetParentDirectory = Left(dir, slashPos - 1)
        Else
            GetParentDirectory = ""
        End If
    End Function
End Module

Example 3: String Suffix Matcher

' Match and validate string suffixes
Class StringSuffixMatcher
    Private m_caseSensitive As Boolean
    Public Sub Initialize(Optional caseSensitive As Boolean = True)
        m_caseSensitive = caseSensitive
    End Sub
    Public Function EndsWith(text As String, suffix As String) As Boolean
        ' Check if string ends with suffix
        Dim textEnd As String
        Dim suffixLen As Long
        suffixLen = Len(suffix)
        If suffixLen > Len(text) Then
            EndsWith = False
            Exit Function
        End If
        textEnd = Right(text, suffixLen)
        If m_caseSensitive Then
            EndsWith = (textEnd = suffix)
        Else
            EndsWith = (UCase(textEnd) = UCase(suffix))
        End If
    End Function
    Public Function EndsWithAny(text As String, suffixes() As String) As Boolean
        ' Check if string ends with any of the provided suffixes
        Dim i As Integer
        For i = LBound(suffixes) To UBound(suffixes)
            If EndsWith(text, suffixes(i)) Then
                EndsWithAny = True
                Exit Function
            End If
        Next i
        EndsWithAny = False
    End Function
    Public Function RemoveSuffix(text As String, suffix As String) As String
        ' Remove suffix if present
        If EndsWith(text, suffix) Then
            RemoveSuffix = Left(text, Len(text) - Len(suffix))
        Else
            RemoveSuffix = text
        End If
    End Function
    Public Function GetMatchingSuffix(text As String, suffixes() As String) As String
        ' Return the matching suffix, or empty string
        Dim i As Integer
        For i = LBound(suffixes) To UBound(suffixes)
            If EndsWith(text, suffixes(i)) Then
                GetMatchingSuffix = suffixes(i)
                Exit Function
            End If
        Next i
        GetMatchingSuffix = ""
    End Function
    Public Function ReplaceSuffix(text As String, oldSuffix As String, _
                                 newSuffix As String) As String
        ' Replace suffix if present
        If EndsWith(text, oldSuffix) Then
            ReplaceSuffix = Left(text, Len(text) - Len(oldSuffix)) & newSuffix
        Else
            ReplaceSuffix = text
        End If
    End Function
End Class

Example 4: Account Number Formatter

' Format and mask account numbers securely
Class AccountNumberFormatter
    Private m_maskChar As String
    Private m_visibleDigits As Integer
    Public Sub Initialize(Optional maskChar As String = "*", _
                         Optional visibleDigits As Integer = 4)
        m_maskChar = maskChar
        m_visibleDigits = visibleDigits
    End Sub
    Public Function FormatAccountNumber(accountNum As String) As String
        ' Format account number showing only last N digits
        Dim lastDigits As String
        Dim maskedLength As Integer
        If Len(accountNum) <= m_visibleDigits Then
            FormatAccountNumber = accountNum
            Exit Function
        End If
        lastDigits = Right(accountNum, m_visibleDigits)
        maskedLength = Len(accountNum) - m_visibleDigits
        FormatAccountNumber = String(maskedLength, m_maskChar) & lastDigits
    End Function
    Public Function FormatWithSpaces(accountNum As String, _
                                    Optional groupSize As Integer = 4) As String
        ' Format with spaces every N characters
        Dim formatted As String
        Dim i As Integer
        Dim maskedNum As String
        maskedNum = FormatAccountNumber(accountNum)
        formatted = ""
        For i = 1 To Len(maskedNum) Step groupSize
            If i > 1 Then formatted = formatted & " "
            formatted = formatted & Mid(maskedNum, i, groupSize)
        Next i
        FormatWithSpaces = formatted
    End Function
    Public Function GetLastDigits(accountNum As String) As String
        ' Get only the visible digits
        If Len(accountNum) <= m_visibleDigits Then
            GetLastDigits = accountNum
        Else
            GetLastDigits = Right(accountNum, m_visibleDigits)
        End If
    End Function
    Public Function ValidateAccountNumber(accountNum As String, _
                                         minLength As Integer, _
                                         maxLength As Integer) As Boolean
        ' Validate account number length
        Dim numLen As Integer
        numLen = Len(accountNum)
        ValidateAccountNumber = (numLen >= minLength And numLen <= maxLength)
    End Function
    Public Sub SetMaskChar(maskChar As String)
        m_maskChar = maskChar
    End Sub
    Public Sub SetVisibleDigits(visibleDigits As Integer)
        m_visibleDigits = visibleDigits
    End Sub
End Class

Error Handling

The Right function generates runtime errors in specific situations: Error 5: Invalid procedure call or argument - Occurs when length parameter is negative Error 94: Invalid use of Null - Occurs when string parameter is Null Example error handling:

On Error Resume Next
result = Right(userInput, charCount)
If Err.Number <> 0 Then
    MsgBox "Error extracting characters: " & Err.Description
    result = ""
End If
On Error GoTo 0

Best practice for safe usage:

Function SafeRight(text As String, length As Long) As String
    If IsNull(text) Then
        SafeRight = ""
        Exit Function
    End If
    If length < 0 Then
        SafeRight = ""
        Exit Function
    End If
    If length = 0 Then
        SafeRight = ""
    ElseIf length >= Len(text) Then
        SafeRight = text
    Else
        SafeRight = Right(text, length)
    End If
End Function

Performance Considerations

Best Practices

  1. Validate Length: Check that length parameter is valid before calling
  2. Handle Null: Check for Null strings if data source is uncertain
  3. Use with InStrRev: Combine with InStrRev for finding from right
  4. Document Intent: Make clear why extracting from right vs left
  5. Consider Edge Cases: Handle empty strings, length = 0, length > string length
  6. Use for File Extensions: Preferred method for extracting file extensions
  7. Combine with Trim: Often useful to Trim before using Right
  8. Cache String Length: If using Len(string) multiple times, cache it
  9. Avoid Magic Numbers: Use named constants for length values
  10. Test Boundary Conditions: Test with length = 0, 1, Len(string), Len(string)+1
Function Purpose Parameters Use Case
Right Extract from right (string, length) Get last N characters, file extensions
Left Extract from left (string, length) Get first N characters, prefixes
Mid Extract from middle (string, start, [length]) Get substring from any position
InStrRev Find from right (string, substring) Find position searching from right
Len String length (string) Get total length
RTrim Remove right spaces (string) Remove trailing whitespace

Platform and Version Notes

Limitations

← Back to String | View all functions