Clever-Excel-Forum

Normale Version: Werte in Msgbox rechtsbündig ausgeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo!

Ich lasse mir in einer Msgbox Werte untereinander anzeigen. Nachdem diese Werte unterschiedlich lang sind, will ich sie nicht wie standardmäßig linksbündig angezeigt bekommen, sondern rechtsbündig. Ist so etwas überhaupt möglich?
Anbei mein VBA Code:

Code:
Sub JahresstatistikRanking()

    With ThisWorkbook.Worksheets("Jahresstatistik")

    Dim i, WWert As Double, TText As String, Zeile As Integer, Sp As Integer
        Dim Z1 As Integer, LR As Integer, RNG As Range
     
        Z1 = 3 'Erste Datenzeile
        Sp = 7 'Werte in G
     
        LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
        Set RNG = Cells(Z1, Sp).Resize(LR + Z1 + 1, 1)
     
        For i = 1 To 8
            WWert = WorksheetFunction.Large(RNG, i)
            Zeile = WorksheetFunction.Match(WWert, RNG, 0) + Z1 - 1
            TText = TText & Format(Cells(Zeile, 1), "YYYY: ") & " € " & Format(WWert, "#,##0.00") & vbLf
        Next
        MsgBox "Top 8 (berechnet bis Jahresende)" & vbLf & vbLf & TText & String(2, vbNewLine) & _
        "Top 8 (berechnet bis " & Date & ")"
   
    End With

End Sub



Ich hoffe, dass mir jemand helfen kann.

LG
Thomas
Hi,

eine rechtsbündige Ausgabe ist in der Msgbox nicht vorgesehen. Da müsstest Du Dir schon selbst eine basteln, mit einer Textbox z. Bsp.
Ansonsten könntest Du aber mit Tabulatoren arbeiten. Bsp. für die Schleife, indem Du am Anfang oder Ende der Zuweisung von TText noch ein oder mehrere
& vbtab ergänzt. (ungetestet) Dann sähe es zumindest wie eine Auflistung aus.
(31.10.2022, 09:06)Ralf A schrieb: [ -> ]Hi,

eine rechtsbündige Ausgabe ist in der Msgbox nicht vorgesehen. Da müsstest Du Dir schon selbst eine basteln, mit einer Textbox z. Bsp.
Ansonsten könntest Du aber mit Tabulatoren arbeiten. Bsp. für die Schleife, indem Du am Anfang oder Ende der Zuweisung von TText noch ein oder mehrere
& vbtab ergänzt. (ungetestet) Dann sähe es zumindest wie eine Auflistung aus.

Hallo!

Danke für die rasche Antwort. Ich habe es soeben mit "vbtab " probiert, bringt mir aber nichts, er rückt einfach alle um einen Tab Sprung weiter nach rechts.
Die Lösung mit einer Textblox klingt wieder sehr aufwendig.
VBA ist nichts für Faulpelze.
(31.10.2022, 09:09)dertommy schrieb: [ -> ]Die Lösung mit einer Textblox klingt wieder sehr aufwendig.

...tja... dann musst Du mit dem leben, was da ist...
Hallo Thomas,

vielleicht so?

Code:
Sub JahresstatistikRanking()
  Dim i As Long, WWert As Double, TText As String, Zeile As Integer, Sp As Integer
  Dim Z1 As Integer, LR As Integer, RNG As Range
  Dim strZL As String, strZR As String
       
  With ThisWorkbook.Worksheets("Jahresstatistik")
 
    Z1 = 3 'Erste Datenzeile
    Sp = 7 'Werte in G
 
    LR = .Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
    Set RNG = .Cells(Z1, Sp).Resize(LR + Z1 + 1, 1)
 
    For i = 1 To 8
        WWert = WorksheetFunction.Large(RNG, i)
        Zeile = WorksheetFunction.Match(WWert, RNG, 0) + Z1 - 1
        strZL = Format(.Cells(Zeile, 1), "YYYY: ")
        strZR = " € " & Format(WWert, "#,##0.00")
        TText = TText & strZL & String(15 - Len(strZR), "_") & strZR & vbLf
    Next
    MsgBox "Top 8 (berechnet bis Jahresende)" & vbLf & vbLf & TText & String(2, vbNewLine) & _
    "Top 8 (berechnet bis " & Date & ")"
   
  End With
End Sub
(31.10.2022, 10:45)Kuwer schrieb: [ -> ]Hallo Thomas,

vielleicht so?

Code:
Sub JahresstatistikRanking()
  Dim i As Long, WWert As Double, TText As String, Zeile As Integer, Sp As Integer
  Dim Z1 As Integer, LR As Integer, RNG As Range
  Dim strZL As String, strZR As String
       
  With ThisWorkbook.Worksheets("Jahresstatistik")
 
    Z1 = 3 'Erste Datenzeile
    Sp = 7 'Werte in G
 
    LR = .Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
    Set RNG = .Cells(Z1, Sp).Resize(LR + Z1 + 1, 1)
 
    For i = 1 To 8
        WWert = WorksheetFunction.Large(RNG, i)
        Zeile = WorksheetFunction.Match(WWert, RNG, 0) + Z1 - 1
        strZL = Format(.Cells(Zeile, 1), "YYYY: ")
        strZR = " € " & Format(WWert, "#,##0.00")
        TText = TText & strZL & String(15 - Len(strZR), "_") & strZR & vbLf
    Next
    MsgBox "Top 8 (berechnet bis Jahresende)" & vbLf & vbLf & TText & String(2, vbNewLine) & _
    "Top 8 (berechnet bis " & Date & ")"
  
  End With
End Sub

Hallo!

Danke für die rasche Hilfe.
Im Prinzip ist es genau das, was ich gewollt habe. Nur hätte ich gerne nicht zwischen dem Datum und den Werten ein "_" ausgefüllt, weil es nicht gut aussieht. Wie es bei mir genau aussieht, habe ich dir als Dateianhang mitgeschickt.
Wenn ich statt "_" ein " " mache, ist es wieder nicht ganz genau unter einander, aber besser als vorher.
Ich hoffe, dass du mir nochmals helfen kannst.
Hallo,

probiere es mal mit Chr(2). Ist dann nicht ganz so schön ausgerichtet, sobald Tausenderpunkte ins Spiel kommen.

Gruß Uwe
(31.10.2022, 12:30)Kuwer schrieb: [ -> ]Hallo,

probiere es mal mit Chr(2). Ist dann nicht ganz so schön ausgerichtet, sobald Tausenderpunkte ins Spiel kommen.

Gruß Uwe

Wie meinst du das mit Chr(2)?
Wo genau soll ich das statt welchem Code einfügen?
An Stelle von "_" .
Seiten: 1 2