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
Hallo,
nach diesem Prozip ListboxZelle() = Format(ListboxZelle(),"####.####.##")
ListboxZelle() kann auch ein eine ArrayZelle oder die .Cells() sein - was auch immer.
Gruß Uwe
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
Hi,
du könntest auch deine Listbox mit der Text-Eigenschaft statt der Value-Eigenschaft der betreffenden Zelle befüllen.
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:
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
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
(29.06.2024, 17:47)Frank-Kan schrieb: [ -> ]Ich habe die Antworten von Euch versucht umzusetzen.
Hmmmh!
Davon sehe ich leider nichts …
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.
Hallo Ralf.
Danke für deine Antwort.
Ich sollte nichts auf die Schnelle machen....
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.
Vielen Dank Klaus für deine Mühe und die Datei, das funktioniert.
Jetzt nur noch der Praxis anpassen.