Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zellenformatierung Listbox gleiches Format
#1
Hallo Gemeinde!
Ich habe in einer Zelle die Zahl 4001.1234.30 . 
Um nicht jedes mal die 2 Punkte anzugeben, schreibe ich 4001123430 in die Zelle. 
Die Zelle befindet sich in Spalte A. Die Zelle ist mit 0000"."0000"."00 formatiert. 
So das ich 4001123430 eingebe aber 4001.1234.30 erscheint. Ok. 
Jetzt gibt es eine Listbox die die Spalte ausliest und in der Listbox man einen Eintrag auswählen kann. 
Aber in der Listbox steht dann 4001123430 zur Auswahl ohne die beiden Punkte. 
Also es erscheint nicht in der Listbox 4001.1234.30. 
Wie kann ich das machen das per VBA die beiden Punkte zu sehen sind in der Listbox?
Oder gibt es vertikale Trennlinien in der Listbox?
Danke
Zitieren
#2
Hallo,

nach diesem Prozip ListboxZelle() = Format(ListboxZelle(),"####.####.##")

ListboxZelle() kann auch ein eine ArrayZelle oder die .Cells() sein - was auch immer.

Gruß Uwe
Zitieren
#3
Hallo,

sorry, das passiert manchmal, wenn man eine Antwort mit dem Tablet schreibt und nicht noch mal drüber schaut.

Korrektur:
nach diesem Prinzip ListboxZelle() = Format(ListboxZelle(),"####.####.##")

ListboxZelle() kann auch ein eine ArrayZelle oder die .Cells() sein - was auch immer.

Gruß Uwe
Zitieren
#4
Hi,

du könntest auch deine Listbox mit der Text-Eigenschaft statt der Value-Eigenschaft der betreffenden Zelle befüllen.
Gruß,
Helmut
_____
Office365 auf MacOS und Win10
Zitieren
#5
Moin!
Ja, das ginge per .AddItem-Methode (nicht jedoch per Zuweisung zur .List-Eigenschaft):
Code:
Sub Fill()
Dim Zelle As Range
For Each Zelle In Range("C1:C3")
  ListBox1.AddItem Zelle.Text
Next
End Sub

Ergibt:
[Bild: jlOu5W2.png]

Jetzt kommt ein wichtiges ABER:
In der Zelle steht die ZAHL 1234567890
In der Listbox steht der TEXT "1234.5678.90"

Folglich muss, sollte man Beziehungen zwischen Listbox und Zellinhalt benötigen, der Text wieder in eine Zahl umgewandelt werden:
Code:
CDbl(Replace(ListBox1.Text, ".", ""))

Gruß Ralf
Zitieren
#6
Hallo!
Ich komme jetzt erst dazu zu antworten.
Ich habe die Antworten von Euch versucht umzusetzen.
Komme dabei aber auch nicht richtig weiter.
In der UserForm (Initialize)
Stand ursprünglich:
Code:
Dim ws As Worksheet
Dim letzteZeile As Long
Dim i As Long
Set ws = ThisWorkbook.Sheets("Prüfkontur")
letzteZeile = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To letzteZeile
Me.ListBox1.AddItem ws.Cells(i, "A").Value
Next i
In dem CommandButton in der Userform neben der ListBox steht:
Code:
Private Sub CommandButton1_Click()
'Userform5
'Konturen Zeichnung laden
'Überprüfung ob ein Wert aus der ListBox ausgewählt wurde
If Me.ListBox1.ListIndex <> -1 Then
Dim letzeZeile As Long
Dim wert As String
'Me.ListBox1 = Format(ListBox1(), "####.####.##")
Zeichnungsnummer = Me.ListBox1.Value
'Wert in Tabelle Prüfkontur Spalte A suchen.
letzteZeile = Worksheets("Prüfkontur").Cells(Worksheets("Prüfkontur").Rows.Count, "A").End(xlUp).Row
Dim zeilein_Kontur As Long

zeilein_Kontur = Application.Match(Zeichnungsnummer, Worksheets("Prüfkontur").Range("A1:A" & letzteZeile), 0)
Die Userform wurde abgeändert in :
Code:
Dim ws As Worksheet
    Dim letzteZeile As Long
    Dim i As Long
    Dim rawValue As String
    'Dim formattedValue As String
'Dim formattedValue As Long
    Set ws = ThisWorkbook.Sheets("Prüfkontur")
    letzteZeile = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Leert die ListBox zuerst
    Me.ListBox1.Clear

    For i = 2 To letzteZeile
        rawValue = ws.Cells(i, "A").Value
        rawValue = CStr(rawValue)
        formattedValue = Left(rawValue, 4) & "." & Mid(rawValue, 5, 4) & "." & Right(rawValue, 2)
        Me.ListBox1.AddItem formattedValue
    Next i
Die Listbox liefert jetzt die gewünschten Punkte an der richtigen Stelle.
Allerdings kommt jetzt der Fehler Typen unverträglich. (13) In dem CommandButton. Bei:
zeilein_Kontur = Application.Match(Zeichnungsnummer, Worksheets("Prüfkontur").Range("A1:A" & letzteZeile), 0) 
Was muss ich da abändern?
Vielen Dank
Zitieren
#7
(29.06.2024, 17:47)Frank-Kan schrieb: Ich habe die Antworten von Euch versucht umzusetzen.
Hmmmh!
Davon sehe ich leider nichts …  Sad
Weder sehe ich das Füllen per .Text-Eigenschaft noch wurde mein wichtiger Hinweis berücksichtigt.
Zitat:Jetzt kommt ein wichtiges ABER:
In der Zelle steht die ZAHL 1234567890
In der Listbox steht der TEXT "1234.5678.90"

Folglich muss, sollte man Beziehungen zwischen Listbox und Zellinhalt benötigen, der Text wieder in eine Zahl umgewandelt werden
Deshalb kommt der Laufzeitfehler 13
Man kann halt Äpfel nicht mit Birnen vergleichen (.Match).
Auch dazu habe ich vorausschauend bereits eine Lösung angeboten.

Wenn ich mit Application.Match arbeite, deklariere ich die Variable grundsätzlich als Variant!
Das hat den Vorteil, dass auch ein Fehler aufgenommen werden kann, wenn nichts gematcht wurde.
Prüfung erfolgt dann mittels
If Not IsNumeric(Variable) Then …
Alternativ kann man auch die Range.Find-Methode nutzen und sie einer Range-Variablen zuweisen.
Die zugehörige Prüfung:
If Not Variable Is Nothing Then …

Gruß Ralf

P.S.:
Ich schreibe heute noch eine Überarbeitung Deiner Code-Fragmente.
Zitieren
#8
Hallo Ralf. 
Danke für deine Antwort.
Ich sollte nichts auf die Schnelle machen....
Zitieren
#9
Zunächst das "etwas" geschrumpfte _Initalize()
Code:
Private Sub UserForm_Initialize()
Dim i&
With Worksheets("Prüfkontur")
  For i = 2 To .Cells(2 ^ 20, 1).End(xlUp).Row
    ListBox1.AddItem .Cells(i, 1).Text
  Next
End With
End Sub

Der Suchbutton:
Code:
Private Sub CommandButton1_Click()
Dim Fund As Variant
If ListBox1.ListIndex > -1 Then
  Fund = _
    Application.Match(CDbl(Replace(ListBox1.Text, ".", "")), _
    Worksheets("Prüfkontur").Columns("A"), 0)
  If Not IsError(Fund) Then
    MsgBox ListBox1.Text & " befindet sich in Zeile: " & Fund
  End If
End If
End Sub
Übungsdatei im Anhang.


Angehängte Dateien
.xlsm   Userform.xlsm (Größe: 23,64 KB / Downloads: 1)
Zitieren
#10
Vielen Dank Klaus für deine Mühe und die Datei, das funktioniert.
Jetzt nur noch der Praxis anpassen.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions