VB6Parse / Library / Resources / loadresstring

VB6 Library Reference

LoadResString Function

Returns a string from a resource (.res) file.

Syntax

LoadResString(index)

Parameters

Return Value

Returns a String: - String containing the text from the resource file - Empty string ("") if resource not found (in some VB versions) - May raise error 32813 if resource not found - Preserves all formatting including line breaks - Unicode strings supported in VB6

Remarks

The LoadResString function loads text from embedded resources:

Typical Uses

  1. Load Error Message
MsgBox LoadResString(1001), vbCritical
  1. Load Form Caption
Me.Caption = LoadResString(2001)
  1. Load Label Text
lblWelcome.Caption = LoadResString(3001)
  1. Load Menu Caption
mnuFile.Caption = LoadResString(4001)
  1. Load Button Caption
cmdOK.Caption = LoadResString(5001)
  1. Load MessageBox Text
MsgBox LoadResString(6001), vbInformation
  1. Load StatusBar Text
StatusBar1.SimpleText = LoadResString(7001)
  1. Load ToolTip Text
cmdSave.ToolTipText = LoadResString(8001)

Basic Examples

Example 1: Loading Messages

' Load various UI strings from resources
Me.Caption = LoadResString(1001)          ' "My Application"
lblTitle.Caption = LoadResString(1002)    ' "Welcome!"
cmdOK.Caption = LoadResString(1003)       ' "OK"
cmdCancel.Caption = LoadResString(1004)   ' "Cancel"

Example 2: Error Messages

' Use resource strings for error messages
If Not fileExists Then
MsgBox LoadResString(2001), vbCritical  ' "File not found"
End If

If accessDenied Then
MsgBox LoadResString(2002), vbCritical  ' "Access denied"
End If

Example 3: Error Handling

On Error Resume Next
Dim msg As String
msg = LoadResString(9999)
If Err.Number = 32813 Then
msg = "String resource not found!"
Err.Clear
End If
MsgBox msg

Example 4: Form Initialization

Private Sub Form_Load()
' Load all UI strings from resources
Me.Caption = LoadResString(1001)
lblName.Caption = LoadResString(1002)
lblAddress.Caption = LoadResString(1003)
cmdSave.Caption = LoadResString(1004)
cmdCancel.Caption = LoadResString(1005)
End Sub

Common Patterns

Pattern 1: SafeLoadResString

Function SafeLoadResString(ByVal resID As Integer, _
Optional ByVal defaultText As String = "") As String
On Error Resume Next
SafeLoadResString = LoadResString(resID)
If Err.Number <> 0 Then
SafeLoadResString = defaultText
Err.Clear
End If
End Function

Pattern 2: LoadFormStrings

Sub LoadFormStrings(frm As Form, ByVal baseID As Integer)
Dim ctrl As Control
Dim id As Integer

On Error Resume Next
frm.Caption = LoadResString(baseID)

id = baseID + 1
For Each ctrl In frm.Controls
If TypeOf ctrl Is Label Or TypeOf ctrl Is CommandButton Then
ctrl.Caption = LoadResString(id)
id = id + 1
End If
Next ctrl
End Sub

Pattern 3: FormatResString

Function FormatResString(ByVal resID As Integer, _
ParamArray args()) As String
Dim template As String
Dim i As Long

template = LoadResString(resID)

For i = LBound(args) To UBound(args)
template = Replace(template, "{" & i & "}", CStr(args(i)))
Next i

FormatResString = template
End Function

Pattern 4: GetErrorMessage

Function GetErrorMessage(ByVal errorCode As Long) As String
Const BASE_ERROR_ID = 10000
On Error Resume Next

GetErrorMessage = LoadResString(BASE_ERROR_ID + errorCode)
If Err.Number <> 0 Then
GetErrorMessage = "Unknown error: " & errorCode
Err.Clear
End If
End Function

Pattern 5: LoadMenuStrings

Sub LoadMenuStrings()
Const MENU_BASE = 4000

mnuFile.Caption = LoadResString(MENU_BASE + 1)      ' "&File"
mnuFileNew.Caption = LoadResString(MENU_BASE + 2)   ' "&New"
mnuFileOpen.Caption = LoadResString(MENU_BASE + 3)  ' "&Open"
mnuFileSave.Caption = LoadResString(MENU_BASE + 4)  ' "&Save"
mnuFileExit.Caption = LoadResString(MENU_BASE + 5)  ' "E&xit"
End Sub

Pattern 6: CachedResString

Dim resStringCache As New Collection

Function CachedLoadResString(ByVal resID As Integer) As String
Dim key As String
On Error Resume Next

key = "RES_" & resID
CachedLoadResString = resStringCache(key)

If Err.Number <> 0 Then
Err.Clear
CachedLoadResString = LoadResString(resID)
resStringCache.Add CachedLoadResString, key
End If
End Function

Pattern 7: ResStringExists

Function ResStringExists(ByVal resID As Integer) As Boolean
On Error Resume Next
Dim s As String
s = LoadResString(resID)
ResStringExists = (Err.Number = 0)
Err.Clear
End Function

Pattern 8: LoadResStringArray

Function LoadResStringArray(ByVal startID As Integer, _
ByVal count As Integer) As String()
Dim result() As String
Dim i As Integer

ReDim result(0 To count - 1)

On Error Resume Next
For i = 0 To count - 1
result(i) = LoadResString(startID + i)
If Err.Number <> 0 Then
result(i) = ""
Err.Clear
End If
Next i

LoadResStringArray = result
End Function

Pattern 9: ShowResMessage

Sub ShowResMessage(ByVal resID As Integer, _
Optional ByVal icon As VbMsgBoxStyle = vbInformation)
On Error Resume Next
Dim msg As String
msg = LoadResString(resID)

If Err.Number = 0 Then
MsgBox msg, icon
Else
MsgBox "Message resource " & resID & " not found", vbCritical
Err.Clear
End If
End Sub

Pattern 10: MultiLineResString

Function MultiLineResString(ByVal resID As Integer) As String
Dim text As String
text = LoadResString(resID)
' Resource strings preserve line breaks
MultiLineResString = text
End Function

Advanced Examples

Example 1: Localization Manager

' Class: LocalizationManager
Private m_cache As Collection
Private m_languageID As Integer

Private Sub Class_Initialize()
Set m_cache = New Collection
m_languageID = 1033 ' Default to English (US)
End Sub

Public Property Let LanguageID(ByVal newLanguage As Integer)
m_languageID = newLanguage
ClearCache
End Property

Public Function GetString(ByVal baseID As Integer) As String
Dim resID As Integer
Dim key As String

On Error Resume Next
resID = baseID + m_languageID
key = "STR_" & resID

GetString = m_cache(key)
If Err.Number <> 0 Then
Err.Clear
GetString = LoadResString(resID)
If Err.Number = 0 Then
m_cache.Add GetString, key
Else
' Fallback to default language
GetString = LoadResString(baseID + 1033)
Err.Clear
End If
End If
End Function

Public Sub LocalizeForm(frm As Form)
Dim ctrl As Control
On Error Resume Next

' Load form caption
frm.Caption = GetString(GetFormBaseID(frm))

' Load control captions
For Each ctrl In frm.Controls
If HasCaption(ctrl) Then
ctrl.Caption = GetString(GetControlID(ctrl))
End If
Next ctrl
End Sub

Private Sub ClearCache()
Set m_cache = New Collection
End Sub

Private Function HasCaption(ctrl As Control) As Boolean
HasCaption = TypeOf ctrl Is Label Or _
TypeOf ctrl Is CommandButton Or _
TypeOf ctrl Is CheckBox Or _
TypeOf ctrl Is OptionButton
End Function

Private Sub Class_Terminate()
Set m_cache = Nothing
End Sub

Example 2: Error Message System

' Module: ErrorMessages
Private Const ERR_BASE = 20000

Public Enum AppError
errFileNotFound = 1
errAccessDenied = 2
errInvalidFormat = 3
errNetworkError = 4
errDatabaseError = 5
End Enum

Public Sub ShowError(ByVal errorType As AppError, _
Optional ByVal additionalInfo As String = "")
Dim msg As String
On Error Resume Next

msg = LoadResString(ERR_BASE + errorType)
If Err.Number <> 0 Then
msg = "Unknown error occurred"
Err.Clear
End If

If Len(additionalInfo) > 0 Then
msg = msg & vbCrLf & vbCrLf & additionalInfo
End If

MsgBox msg, vbCritical, LoadResString(ERR_BASE)
End Sub

Public Function GetErrorText(ByVal errorType As AppError) As String
On Error Resume Next
GetErrorText = LoadResString(ERR_BASE + errorType)
If Err.Number <> 0 Then
GetErrorText = "Unknown error"
Err.Clear
End If
End Function

Example 3: Multi-Language Application

' Form with language selection
Public Enum Language
langEnglish = 0
langSpanish = 1000
langFrench = 2000
langGerman = 3000
End Enum

Private currentLanguage As Language

Private Sub Form_Load()
' Default to English
currentLanguage = langEnglish
LoadLanguage
End Sub

Private Sub cboLanguage_Click()
Select Case cboLanguage.ListIndex
Case 0: currentLanguage = langEnglish
Case 1: currentLanguage = langSpanish
Case 2: currentLanguage = langFrench
Case 3: currentLanguage = langGerman
End Select
LoadLanguage
End Sub

Private Sub LoadLanguage()
Dim baseID As Integer
baseID = 10000 + currentLanguage

On Error Resume Next
Me.Caption = LoadResString(baseID + 1)
lblWelcome.Caption = LoadResString(baseID + 2)
lblInstructions.Caption = LoadResString(baseID + 3)
cmdStart.Caption = LoadResString(baseID + 4)
cmdExit.Caption = LoadResString(baseID + 5)

' Update menu
mnuFile.Caption = LoadResString(baseID + 10)
mnuHelp.Caption = LoadResString(baseID + 11)
End Sub

Example 4: String Template System

' Module: StringTemplates
Private Const TEMPLATE_BASE = 30000

Public Function GetFormattedString(ByVal templateID As Integer, _
ParamArray values()) As String
Dim template As String
Dim result As String
Dim i As Long

On Error Resume Next
template = LoadResString(TEMPLATE_BASE + templateID)
If Err.Number <> 0 Then
GetFormattedString = ""
Err.Clear
Exit Function
End If

result = template
For i = LBound(values) To UBound(values)
result = Replace(result, "{" & i & "}", CStr(values(i)))
Next i

GetFormattedString = result
End Function

Public Function GetWelcomeMessage(ByVal userName As String) As String
' Template: "Welcome, {0}! You have {1} new messages."
GetWelcomeMessage = GetFormattedString(1, userName, GetMessageCount())
End Function

Public Function GetSaveConfirmation(ByVal filename As String) As String
' Template: "Do you want to save changes to {0}?"
GetSaveConfirmation = GetFormattedString(2, filename)
End Function

Private Function GetMessageCount() As Long
' Implementation would return actual message count
GetMessageCount = 5
End Function

Error Handling

' Error 32813: Resource not found
On Error Resume Next
Dim msg As String
msg = LoadResString(9999)
If Err.Number = 32813 Then
MsgBox "String resource not found!"
End If

' Error 48: Error loading from file
msg = LoadResString(1001)
If Err.Number = 48 Then
MsgBox "Resource file is corrupt or missing!"
End If

' Safe loading pattern
Function TryLoadResString(ByVal resID As Integer, _
ByRef outString As String) As Boolean
On Error Resume Next
outString = LoadResString(resID)
TryLoadResString = (Err.Number = 0)
If Err.Number <> 0 Then
outString = ""
End If
Err.Clear
End Function

Performance Considerations

Best Practices

  1. Use constants for string IDs for maintainability
  2. Group by category using ID ranges (1000s for errors, 2000s for menus, etc.)
  3. Cache frequently used strings to improve performance
  4. Always handle errors - resource might not exist
  5. Document string IDs in code or separate file
  6. Use templates with placeholders for dynamic content
  7. Organize by language using ID offsets (English: 0, Spanish: +1000, etc.)
  8. Test all languages before deployment
  9. Provide fallbacks for missing strings
  10. Keep strings updated in sync with code changes
Function Purpose Return Type Data Type
LoadResString Load string from resources String Text strings
LoadResPicture Load image from resources StdPicture Images
LoadResData Load binary data from resources Byte array Binary data
LoadString (API) Windows API alternative String Text strings

LoadResString vs Hardcoded Strings

' Hardcoded - difficult to localize
MsgBox "File not found", vbCritical

' Resource string - easy to localize
MsgBox LoadResString(1001), vbCritical

Advantages of LoadResString: - Easy localization (just replace .res file) - Centralized string management - No code changes needed for translations - Consistent messaging across application

String ID Organization

' Recommended ID ranges
Const STR_APP_BASE = 1000         ' Application strings
Const STR_ERROR_BASE = 2000       ' Error messages
Const STR_MENU_BASE = 3000        ' Menu items
Const STR_DIALOG_BASE = 4000      ' Dialog messages
Const STR_STATUS_BASE = 5000      ' Status messages
Const STR_HELP_BASE = 6000        ' Help text

' Language offsets
Const LANG_ENGLISH = 0
Const LANG_SPANISH = 10000
Const LANG_FRENCH = 20000

Platform Notes

Limitations

← Back to Resources | View all functions