Formatieren von Zeichenfolgen zum Right-Justify beim Aufrufen des Druckens durch eine Anwendung

In diesem Artikel wird das Formatieren von Zeichenfolgen in Right-Justify erläutert, wenn eine Anwendung das Drucken aufruft.

Originalversion des Produkts:   Visual Basic
Ursprüngliche KB-Nummer:   217012

Zusammenfassung

Es gibt verschiedene Möglichkeiten, Zeichenfolgen mithilfe der Format-Funktion rechtsbündig zu rechtfertigen:

  • Verwenden Sie das @ Zeichen.

  • Verwenden Sie die RSet Funktion.

  • Verwenden Sie Problemumgehungen für die Format$ Funktion.

Verwenden des @-Zeichens

Hinweis

Diese Technik ist nur bei monospace Schriftarten wie Courier New.

  1. Formatieren Sie die Zahl in eine Zeichenfolge mit numerischen Konvertierungszeichen, z. B. $##0,00.

  2. Formatieren Sie die resultierende Zeichenfolge mit einer Formatzeichenfolge, die aus einer Anzahl von @-Zeichen besteht, die dem gewünschten Format entsprechen, z. B. @@@@@.@

Im folgenden Codebeispiel werden mehrere Zahlen mit sieben @-Zeichen und einem Sieben-Zeichen-Format ($##0,00) formatiert.

 Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|"
 Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|"
 Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|"

Die Ausgabe ist;

|  $1.50|
| $12.50|
|$123.50|

Verwenden der RSet-Funktion

Bei Verwendung in Verbindung mit RSetfunktioniert die Formatfunktion bei Zeichenfolgen mit fester Länge. Das folgende Codebeispiel veranschaulicht die Verwendung von RSet:

 x = (Format$(123.5, "$##0.00"))
 Print "x" & x & "x"
 RSet x = (Format$(1.5, "$##0.00"))
 Print "x" & x & "x"

Die Ausgabe lautet:

x$123.50x 
x $1.50x

Problemumgehungen mithilfe der Format$-Funktion

Hinweis

Diese Techniken sind nur bei monospace Schriftarten wirksam, z Courier New. B. .

Die Format$-Funktion rechtfertigt keine Zeichenfolgen mit der rechten Maustaste, wenn sie mit dem #-Symbol verwendet wird. Im ersten Codebeispiel wird die Len-Funktion verwendet, um zu bestimmen, wie viele Leerzeichen links von der Zeichenfolge, die die Zahl darstellt, hinzugefügt werden müssen, um die Zeichenfolge nach rechts zu rechtfertigen:

 required = 8 ' longest number expected
 a = 1.23
 b = 44.56
 num1$ = Format$(a, "#0.00")' this converts the number to a string
 num2$ = Format$(b, "#0.00")' with 2 decimal places and a leading zero
 'Debug.Print num2$
 If (required - Len(num1$)) > 0 Then
 num1$ = Space$(required - Len(num1$)) + num1$
 End If

If (required - Len(num2$)) > 0 Then
 num2$ = Space$(required - Len(num2$)) + num2$
 End If
' test output
 Print num1$
 Print num2$

Die Ausgabe lautet:

 1.23
44.56

Das zweite Format$-Beispiel wird mit Genehmigung seines Autors Karl Peterson erneut gedruckt. Seine LPad-Funktion verwendet die Right$-Funktion:

Private Function LPad(ValIn As Variant, nDec As Integer, _
 WidthOut As Integer) As String
'
' Formatting function left pads with spaces, using specified
' number of decimal digits.
'
 If IsNumeric(ValIn) Then
     If nDec > 0 Then
         LPad = Right$(Space$(WidthOut) & _
         Format$(ValIn, "0." & String$(nDec, "0")), _
         WidthOut)
     Else
         LPad = Right$(Space$(WidthOut) & Format$(ValIn, "0"), WidthOut)
     End If
 Else
     LPad = Right$(Space$(WidthOut) & ValIn, WidthOut)
 End If
End Function

Schritt-für-Schritt-Beispiel

  1. Starten Sie ein neues Visual Basic Standard EXE-Projekt. Form1 wird standardmäßig erstellt.

  2. Fügen Sie Form1 vier CommandButton-Steuerelemente hinzu. Positionieren Sie sie ganz rechts im Formularfenster.

  3. Fügen Sie den folgenden Code zum Abschnitt "Allgemeine Deklarationen" von Form1 hinzu:

    Option Explicit
    
    Private Sub Command1_Click()
        Me.Print "|" & Format$(Format$(1.5, "$##0.00"), "@@@@@@@") & "|"
        Me.Print "|" & Format$(Format$(12.5, "$##0.00"), "@@@@@@@") & "|"
        Me.Print "|" & Format$(Format$(123.5, "$##0.00"), "@@@@@@@") & "|"
    End Sub
    
    Private Sub Command2_Click()
        Dim x As String
        x = (Format$(123.5, "$##0.00"))
        Me.Print "x" & x & "x"
        RSet x = (Format$(1.5, "$##0.00"))
        Me.Print "x" & x & "x"
    End Sub
    
    Private Sub Command3_Click()
        Dim required As Integer
        Dim a As Single
        Dim b As Single
        Dim num1$, num2$
    
        required = 8 ' longest number expected
        a = 1.23
        b = 44.56
        num1$ = Format$(a, "#0.00")' this converts the number to a string
        num2$ = Format$(b, "#0.00")' with two decimal places and a leading zero
        'Debug.Print num2$
        If (required - Len(num1$)) > 0 Then
            num1$ = Space$(required - Len(num1$)) & num1$
        End If
    
        If (required - Len(num2$)) > 0 Then
            num2$ = Space$(required - Len(num2$)) & num2$
        End If
        ' test output
        Me.Print num1$
        Me.Print num2$
    End Sub
    
    Private Sub Command4_Click()
        Dim xstring As String
        xstring = LPad(2.3, 2, 7)
        Me.Print "K" & xstring & "K"
        End Sub
    
        Private Sub Form_Load()
        Command1.Caption = "@"
        Command1.Font.Size = 18
        Command2.Caption = "Rset"
        Command3.Caption = "Format$"
        Command4.Caption = "VBPJ"
        Me.Font.Name = "Courier New"
    End Sub
    
    Private Function LPad(ValIn As Variant, nDec As Integer, _
    WidthOut As Integer) As String
    '
    ' Formatting function left pads with spaces, using specified
    ' number of decimal digits.
    '
        If IsNumeric(ValIn) Then
            If nDec > 0 Then
                LPad = Right$(Space$(WidthOut) & _
                Format$(ValIn, "0." & String$(nDec, "0")), _
                WidthOut)
            Else
                LPad = Right$(Space$(WidthOut) & Format$(ValIn, "0"), WidthOut)
            End If
        Else
            LPad = Right$(Space$(WidthOut) & ValIn, WidthOut)
        End If
    End Function
    
  4. Führen Sie das Programm aus, klicken Sie auf die Befehlsschaltflächen, und beobachten Sie die Ergebnisse.