Userform ListBox Pflichtfeld

Antwort erstellen

Smilies
:D :) :( :o :shock: :? 8-) :lol: :x :P :razz: :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :badgrin: :doubt:
BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet
Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Userform ListBox Pflichtfeld

Re: Userform ListBox Pflichtfeld

Beitrag von Bea267 » 07. Aug 2021, 17:26

Hallo Mathias,
ich meinte einen Rangebereich und diesen hatte ich auch so stehen wie du geschrieben hast. Nur leider an der falschen Stelle, deshalb hatte es nicht funktioniert. Aber jetzt habe ich es, besten Dank 

Hallo Daniel,
das war in dem Falle nicht gemeint aber an anderer Stelle konnte ich es gebrauchen 
Besten Dank für den Code. Verkürzen tu ich gern solange ich noch verstehe was der Code tut.

Vielen lieben Dank für eure Hilfe
Grüße Bea

Re: Userform ListBox Pflichtfeld

Beitrag von slowboarder » 02. Aug 2021, 14:47

Hi
wenn du den Text direkt einem Namen zuweisen willst (so dass dieser nicht auf einen Zellbereich referenziert sondern der Name selber direkt den Text enthält), dann so:
Code: Alles auswählen
ActiveWorkbook.Names.Add Name:="xxx", RefersToR1C1:="=""abcde"""


bzw, das Prüfen der Multi-Listbox geht auch etwas einfacher, ohne zusätzliche Merkvariable.
man kann ausnutzen, dass nach einem vollständigen Schleifendurchlauf der Schleifenzähler immer größer ist als der Schleifenendwert:
Code: Alles auswählen
With Me.ListBox1
    For i = 0 To .ListCount - 1
        If .Selected(i) Then Exit For
    Next i

    If i = .ListCount  Then
        MsgBox "Bitte mindestens einen ""Grund der AV-Änderung"" angegeben!"
        Exit Sub
    End If
End With


Gruß Daniel

Re: Userform ListBox Pflichtfeld

Beitrag von Gast » 02. Aug 2021, 14:28

Moin!
Was meinst du mit definiertem Namen?
Wenn du damit einen Rangebereich meinst, dem ein Name zugeordnet wurde, geht das bspw. so :
Code: Alles auswählen
Worksheets("Blattname").Range("test") = TextBox1.Text

Meinst du eine Variable etc. dann kannst du das ebenso zuweisen.
Eine automatische Zordnung ( wenn sich der Inhalt ändert) an eine bestimmte Variable gibt es m.E. nicht. Das kannst du aber mit den verschiedenen Events der Textbox zuweisen. Bspw. im Exit Event - wenn die Box verlassen wird oder mit dem Change Event, wenn in der Box was geändert wird.
VG

Re: Userform ListBox Pflichtfeld

Beitrag von Bea267 » 01. Aug 2021, 20:25

Hallo Matthias,

besten Dank jetzt funktioniert es :-)
Vielleicht kannst du mir ja noch eine weitere Frage beantworten nach derich mir schon einen Wolf suche :-(
Kann ich den Inhalt einer TextBox an einen definierten Namen übergeben? Ich weiß das es mit ControlSource funktioniert, aber die Werte aus der Tabelle sollen nicht in der TextBox erscheinen.


@Klaus-Dieter
Auch dir Danke für dein Hilfsangebot. Hatte mich auch gerade angemeldet um die Mappe herunter zu laden, als ich die Antwort von Matthias sah

Grüße Bea

Re: Userform ListBox Pflichtfeld

Beitrag von 1Matthias » 01. Aug 2021, 19:22

Moin!
M.W. kann man bei einer LIstbox mit Multiselect Eigenschaft den Listindex nicht nutzen. Siehe auch hier bei den Hinweisen:
https://docs.microsoft.com/de-de/office ... x-property

Du müsstest wohl die Prüfung gleich in einer Schleife durchführen. Analog deines Übertragens unten:
Code: Alles auswählen
Dim treffer As Boolean

With Me.ListBox1
treffer = False
For i = 0 To .ListCount - 1
    If .Selected(i) Then
        treffer = True
        Exit For
    End If
Next i

If Not treffer Then
    MsgBox "Bitte mindestens einen ""Grund der AV-Änderung"" angegeben!"
 Exit Sub
End If
End With


VG

Re: Userform ListBox Pflichtfeld

Beitrag von Klaus-Dieter » 01. Aug 2021, 17:18

Hallo,

wie soll man das anhand des Quelltextes testen? Lade bitte die Datei hoch.

Userform ListBox Pflichtfeld

Beitrag von Bea267 » 01. Aug 2021, 17:16

Hallo zusammen,

ich nutze folgenden Code um Pflichtfelder zu überprüfen. Mein Problem liegt in der MultiSelect ListBox. Wenn ich den Code so habe wie er unten steht erhalte ich eine Meldung wenn nichts ausgewählt wurde, wähle ich dann allerdings den ersten Eintrag der Liste wird er nicht erkannt und es wird weiter geprüft.
Nehme ich "If .ListIndex <= 0 Then" kommt keine Abfrage dafür wird der selektierte Eintrag übertragen.
Was mache ich hier falsch?

Gruß Bea

Code: Alles auswählen
Private Sub cb_Speichern1_Click()
Dim tbCtrl As control
Dim zähler As Integer, i As Integer                                 ' Zähler zum hochzählen der ListBox-Einträge
Const zeile = 8                                                     ' ListBox, erste Zeile
Const spalte = 1                                                    ' ListBox, erste Spalte

GetTab_Meldebogen.Activate                                             
    With Get_Meldebogen
       
    For Each tbCtrl In MultiPage1.Pages(0).Controls
        If Left(tbCtrl.Name, 2) = "tb" Then                                                                 ' Prüfen ob die ersten beiden Zeichen der Textbox mit "tb" beginnen   'UserForm1.Controls
            If tbCtrl.Tag = "PFLICHT" And Trim(tbCtrl.Value) = "" Then                                      ' Prüfen ob TextBox leer und in der Tag-Eigenschaft das Wort "PF" steht
                MsgBox tbCtrl.Name & " darf nicht leer sein!", vbOKOnly + vbCritical, "Pflichtfeld!"
                tbCtrl.BackColor = &HFF00&                                                                  ' Ändern der Hintergrundfarbe
                tbCtrl.SetFocus                                                                             ' Pflichtfeld aktivieren
                Exit Sub                                                                                    ' Sub verlassen
            Else
                If tbCtrl.Value > 0 Then                                                                    ' Prüfen ob die Textboxen größer leer sind
                    tbCtrl.BackColor = &H80000005                                                           ' Hintergrundfarbe auf Standart einstellen
                End If
            End If
        End If
    Next
       
        With UserForm1.ListBox1
            If .ListIndex <= 0 Then
                MsgBox "Bitte mindestens einen ""Grund der AV-Änderung"" angegeben!": Exit Sub
            Else
                For i = 0 To .ListCount - 1
                    If .Selected(i) Then
                        Cells(zeile + zähler, spalte) = .List(i)
                        zähler = zähler + 1
                    End If
                Next i
            End If
        End With

            Cells(2, 4).Value = tb_x                       
            Cells(3, 4).Value = tb_xx                     
            Cells(5, 1).Value = tb_xxx                 
  End With
End Sub

Nach oben