VB6Parse / Library / String / space

VB6 Library Reference

Space Function

Returns a String consisting of the specified number of spaces.

Syntax

Space(number)

Parameters

Return Value

Returns a String containing the specified number of space characters (ASCII 32).

Remarks

The Space function is useful for creating strings with a specific number of spaces, commonly used for: - Formatting output in fixed-width columns - Creating indentation in text - Padding strings to specific lengths - Aligning text in reports or displays - Creating blank lines or spacing in file output

Key characteristics: - Returns a string of space characters (ASCII value 32) - If number is 0, returns an empty string ("") - If number is negative, generates Error 5 (Invalid procedure call or argument) - Non-integer values are rounded to the nearest integer - Maximum practical limit is system memory for string storage

The Space function is related to other string generation functions: - Space(n): Creates n space characters - String(n, character): Creates n repetitions of any character - String(n, charcode): Creates n repetitions of character with given ASCII code

Typical Uses

  1. Column Formatting: Align text in fixed-width columns
  2. Indentation: Create indented text structures
  3. Padding: Pad strings to specific widths
  4. Separation: Add spacing between elements
  5. Report Generation: Format reports with proper alignment
  6. Text Files: Create formatted text file output
  7. Display Alignment: Align data in list boxes or text boxes
  8. Table Creation: Build ASCII tables with proper spacing

Basic Examples

' Example 1: Create a string of 5 spaces
Dim spaces As String
spaces = Space(5)
' Returns "     " (5 spaces)
' Example 2: Pad a string to 20 characters
Dim name As String
Dim paddedName As String
name = "John"
paddedName = name & Space(20 - Len(name))
' Returns "John                " (16 trailing spaces)
' Example 3: Create indented text
Dim level As Integer
Dim text As String
level = 3
text = Space(level * 4) & "Indented text"
' Returns "            Indented text" (12 spaces for 3 levels of 4-space indent)
' Example 4: Format columns in output
Dim item As String
Dim price As String
item = "Apple"
price = "$1.99"
Debug.Print item & Space(20 - Len(item)) & price
' Outputs: "Apple               $1.99"

Common Patterns

Pattern 1: PadRight

Pad string to specified width (right padding)

Function PadRight(text As String, totalWidth As Integer) As String
Dim currentLen As Integer
currentLen = Len(text)

If currentLen >= totalWidth Then
PadRight = text
Else
PadRight = text & Space(totalWidth - currentLen)
End If
End Function

Pattern 2: PadLeft

Pad string to specified width (left padding)

Function PadLeft(text As String, totalWidth As Integer) As String
Dim currentLen As Integer
currentLen = Len(text)

If currentLen >= totalWidth Then
PadLeft = text
Else
PadLeft = Space(totalWidth - currentLen) & text
End If
End Function

Pattern 3: Center

Center text within specified width

Function Center(text As String, totalWidth As Integer) As String
Dim currentLen As Integer
Dim leftPadding As Integer
Dim rightPadding As Integer

currentLen = Len(text)

If currentLen >= totalWidth Then
Center = text
Exit Function
End If

leftPadding = (totalWidth - currentLen) \ 2
rightPadding = totalWidth - currentLen - leftPadding

Center = Space(leftPadding) & text & Space(rightPadding)
End Function

Pattern 4: CreateIndent

Create indentation for nested structures

Function CreateIndent(level As Integer, Optional spacesPerLevel As Integer = 4) As String
If level <= 0 Then
CreateIndent = ""
Else
CreateIndent = Space(level * spacesPerLevel)
End If
End Function

Pattern 5: FormatColumn

Format text in fixed-width column

Function FormatColumn(text As String, width As Integer, _
Optional alignment As String = "LEFT") As String
Select Case UCase(alignment)
Case "LEFT"
FormatColumn = PadRight(text, width)
Case "RIGHT"
FormatColumn = PadLeft(text, width)
Case "CENTER"
FormatColumn = Center(text, width)
Case Else
FormatColumn = text
End Select
End Function

Pattern 6: CreateSeparator

Create separator line with spaces

Function CreateSeparator(leftText As String, rightText As String, _
totalWidth As Integer, _
Optional separator As String = " ") As String
Dim leftLen As Integer
Dim rightLen As Integer
Dim middleSpaces As Integer

leftLen = Len(leftText)
rightLen = Len(rightText)
middleSpaces = totalWidth - leftLen - rightLen

If middleSpaces < 0 Then middleSpaces = 0

CreateSeparator = leftText & String(middleSpaces, separator) & rightText
End Function

Pattern 7: BuildTableRow

Build formatted table row

Function BuildTableRow(columns() As String, widths() As Integer) As String
Dim row As String
Dim i As Integer

row = ""
For i = LBound(columns) To UBound(columns)
If i > LBound(columns) Then row = row & " | "
row = row & PadRight(columns(i), widths(i))
Next i

BuildTableRow = row
End Function

Pattern 8: IndentMultiline

Indent all lines in multiline text

Function IndentMultiline(text As String, spaces As Integer) As String
Dim lines() As String
Dim result As String
Dim i As Integer
Dim indent As String

lines = Split(text, vbCrLf)
indent = Space(spaces)
result = ""

For i = LBound(lines) To UBound(lines)
If i > LBound(lines) Then result = result & vbCrLf
result = result & indent & lines(i)
Next i

IndentMultiline = result
End Function

Pattern 9: CreateBlankLine

Create blank line with specific spacing

Function CreateBlankLine(width As Integer) As String
CreateBlankLine = Space(width)
End Function

Pattern 10: AlignNumber

Right-align number in field

Function AlignNumber(value As Variant, width As Integer, _
Optional decimals As Integer = 2) As String
Dim formatted As String

formatted = Format(value, "0." & String(decimals, "0"))
AlignNumber = PadLeft(formatted, width)
End Function

Advanced Usage

Example 1: TableFormatter Class

Format data in ASCII tables

' Class: TableFormatter
Private m_columnWidths() As Integer
Private m_columnCount As Integer
Private m_alignment() As String

Private Sub Class_Initialize()
m_columnCount = 0
End Sub

Public Sub SetColumns(widths() As Integer, Optional alignments As Variant)
Dim i As Integer

m_columnCount = UBound(widths) - LBound(widths) + 1
ReDim m_columnWidths(LBound(widths) To UBound(widths))
ReDim m_alignment(LBound(widths) To UBound(widths))

For i = LBound(widths) To UBound(widths)
m_columnWidths(i) = widths(i)
If IsMissing(alignments) Then
m_alignment(i) = "LEFT"
Else
m_alignment(i) = alignments(i)
End If
Next i
End Sub

Public Function FormatRow(values() As String) As String
Dim row As String
Dim i As Integer
Dim formattedValue As String

row = ""
For i = LBound(values) To UBound(values)
If i > LBound(values) Then row = row & " | "

formattedValue = FormatCell(values(i), m_columnWidths(i), m_alignment(i))
row = row & formattedValue
Next i

FormatRow = row
End Function

Private Function FormatCell(value As String, width As Integer, _
alignment As String) As String
Dim currentLen As Integer
Dim padding As Integer

currentLen = Len(value)

If currentLen >= width Then
FormatCell = Left(value, width)
Exit Function
End If

padding = width - currentLen

Select Case UCase(alignment)
Case "LEFT"
FormatCell = value & Space(padding)
Case "RIGHT"
FormatCell = Space(padding) & value
Case "CENTER"
Dim leftPad As Integer
Dim rightPad As Integer
leftPad = padding \ 2
rightPad = padding - leftPad
FormatCell = Space(leftPad) & value & Space(rightPad)
Case Else
FormatCell = value & Space(padding)
End Select
End Function

Public Function CreateHeader(headers() As String) As String
Dim header As String
Dim separator As String
Dim i As Integer

header = FormatRow(headers)
separator = ""

For i = LBound(m_columnWidths) To UBound(m_columnWidths)
If i > LBound(m_columnWidths) Then separator = separator & "-+-"
separator = separator & String(m_columnWidths(i), "-")
Next i

CreateHeader = header & vbCrLf & separator
End Function

Public Function GetTotalWidth() As Integer
Dim total As Integer
Dim i As Integer

total = 0
For i = LBound(m_columnWidths) To UBound(m_columnWidths)
total = total + m_columnWidths(i)
Next i

' Add separator widths
total = total + (m_columnCount - 1) * 3  ' " | " between columns

GetTotalWidth = total
End Function

Example 2: ReportGenerator Module

Generate formatted text reports

' Module: ReportGenerator

Public Function GenerateReport(title As String, data() As Variant, _
columnHeaders() As String, _
columnWidths() As Integer) As String
Dim report As String
Dim i As Integer
Dim j As Integer
Dim totalWidth As Integer
Dim titleLine As String

' Calculate total width
totalWidth = 0
For i = LBound(columnWidths) To UBound(columnWidths)
totalWidth = totalWidth + columnWidths(i)
Next i
totalWidth = totalWidth + (UBound(columnWidths) - LBound(columnWidths)) * 3

' Center title
titleLine = CenterText(title, totalWidth)
report = titleLine & vbCrLf
report = report & String(totalWidth, "=") & vbCrLf

' Add header
For i = LBound(columnHeaders) To UBound(columnHeaders)
If i > LBound(columnHeaders) Then report = report & " | "
report = report & PadRight(columnHeaders(i), columnWidths(i))
Next i
report = report & vbCrLf

' Add separator
For i = LBound(columnWidths) To UBound(columnWidths)
If i > LBound(columnWidths) Then report = report & "-+-"
report = report & String(columnWidths(i), "-")
Next i
report = report & vbCrLf

' Add data rows
For i = LBound(data, 1) To UBound(data, 1)
For j = LBound(data, 2) To UBound(data, 2)
If j > LBound(data, 2) Then report = report & " | "
report = report & PadRight(CStr(data(i, j)), columnWidths(j))
Next j
report = report & vbCrLf
Next i

GenerateReport = report
End Function

Private Function CenterText(text As String, width As Integer) As String
Dim textLen As Integer
Dim leftPad As Integer
Dim rightPad As Integer

textLen = Len(text)

If textLen >= width Then
CenterText = text
Exit Function
End If

leftPad = (width - textLen) \ 2
rightPad = width - textLen - leftPad

CenterText = Space(leftPad) & text & Space(rightPad)
End Function

Private Function PadRight(text As String, width As Integer) As String
If Len(text) >= width Then
PadRight = Left(text, width)
Else
PadRight = text & Space(width - Len(text))
End If
End Function

Public Function CreateSummaryLine(label As String, value As String, _
totalWidth As Integer) As String
Dim labelLen As Integer
Dim valueLen As Integer
Dim spacesNeeded As Integer

labelLen = Len(label)
valueLen = Len(value)
spacesNeeded = totalWidth - labelLen - valueLen

If spacesNeeded < 1 Then spacesNeeded = 1

CreateSummaryLine = label & Space(spacesNeeded) & value
End Function

Example 3: CodeFormatter Class

Format source code with indentation

' Class: CodeFormatter
Private m_indentLevel As Integer
Private m_spacesPerIndent As Integer
Private m_output As String

Private Sub Class_Initialize()
m_indentLevel = 0
m_spacesPerIndent = 4
m_output = ""
End Sub

Public Property Let SpacesPerIndent(value As Integer)
If value > 0 Then m_spacesPerIndent = value
End Property

Public Sub IncreaseIndent()
m_indentLevel = m_indentLevel + 1
End Sub

Public Sub DecreaseIndent()
If m_indentLevel > 0 Then
m_indentLevel = m_indentLevel - 1
End If
End Sub

Public Sub AddLine(text As String)
Dim indent As String
indent = Space(m_indentLevel * m_spacesPerIndent)

If m_output <> "" Then m_output = m_output & vbCrLf
m_output = m_output & indent & text
End Sub

Public Sub AddBlankLine()
If m_output <> "" Then m_output = m_output & vbCrLf
End Sub

Public Function GetOutput() As String
GetOutput = m_output
End Function

Public Sub Clear()
m_output = ""
m_indentLevel = 0
End Sub

Public Sub AddBlock(blockStart As String, blockEnd As String, _
lines() As String)
Dim i As Integer

AddLine blockStart
IncreaseIndent

For i = LBound(lines) To UBound(lines)
AddLine lines(i)
Next i

DecreaseIndent
AddLine blockEnd
End Sub

Example 4: ListBoxFormatter Module

Format items for list box display

' Module: ListBoxFormatter

Public Function FormatListItem(item As String, value As String, _
totalWidth As Integer, _
Optional separator As String = " ") As String
Dim itemLen As Integer
Dim valueLen As Integer
Dim separatorLen As Integer
Dim spacesNeeded As Integer

itemLen = Len(item)
valueLen = Len(value)
separatorLen = Len(separator)

spacesNeeded = totalWidth - itemLen - valueLen

If spacesNeeded < 1 Then spacesNeeded = 1

FormatListItem = item & Space(spacesNeeded) & value
End Function

Public Sub PopulateFormattedList(lst As ListBox, items() As String, _
values() As String, width As Integer)
Dim i As Integer

lst.Clear

For i = LBound(items) To UBound(items)
lst.AddItem FormatListItem(items(i), values(i), width)
Next i
End Sub

Public Function CreateTreeItem(text As String, level As Integer, _
Optional expandSymbol As String = "+") As String
Dim indent As String

indent = Space(level * 2)

If level > 0 Then
CreateTreeItem = indent & expandSymbol & " " & text
Else
CreateTreeItem = text
End If
End Function

Public Function AlignCurrency(amount As Double, width As Integer) As String
Dim formatted As String

formatted = FormatCurrency(amount, 2)
AlignCurrency = Space(width - Len(formatted)) & formatted
End Function

Error Handling

The Space function can generate the following errors:

Always validate inputs:

On Error Resume Next
result = Space(count)
If Err.Number <> 0 Then
MsgBox "Error creating spaces: " & Err.Description
End If

Performance Considerations

Best Practices

  1. Validate Count: Ensure space count is non-negative
  2. Use Constants: Define column widths as constants for consistency
  3. Avoid Magic Numbers: Use named constants instead of literal numbers
  4. Handle Edge Cases: Check for zero or negative values
  5. Consider Alternatives: For very large strings, evaluate necessity
  6. Cache Results: Store frequently used space strings
  7. Document Width: Comment expected column widths in code
  8. Test Alignment: Verify output with different data lengths
  9. Use Monospace: Ensure font is monospace for proper alignment
  10. Combine with Format: Use with Format function for numeric alignment
Function Purpose Example Result
Space(n) n spaces Space(5) " "
String(n, " ") n of any character String(5, " ") " "
String(n, 32) n of ASCII char String(5, 32) " "
String(n, "*") n asterisks String(5, "*") "*"

Platform Considerations

Limitations

← Back to String | View all functions