Textboxe und Comboboxe prüfen
#1
Hallo liebe Excelgemeinde,


habe schone wieder eine Frage :)

Mit folgendem Code(Codeteil):
Code:
Dim ctrElement As Control
   For Each ctrElement In Me.Controls
   If TypeName(ctrElement) = "TextBox" Then
                     If ctrElement.Value = "" Then
       MsgBox "Bitte alle Pflichtfelder ausfüllen!" ', 48
       Controlsgelb
       ctrElement.SetFocus
              Exit Sub

     End If
   End If
Next

prüfe ich ob alle meine TextBoxen in meiner Userform befüllt sind! Soweit so gut!

Ich möchte aber dass alle meine Textboxe und meine Comboboxen geprüft werden aber mit jeweils Ausnahmen und zwar TextBox 1,2, 57, 58, 59 und Combobox 2 und 3 sollen nicht geprüft werden!


Vielen lieben Dank schon im Voraus
VG
Alexandra
Top
#2
Hallo Alexandra,

ich favorisiere für solche Sachen die "Select Case-Anweisung".

Code:
Dim ctrElement As Control
  For Each ctrElement In Me.Controls
    Select Case ctrElement.Name
      Case "TextBox1", "TextBox2", "TextBox57", "TextBox58", "TextBox59", "ComboBox2", "ComboBox3"
      Case Else
        If ctrElement.Value = "" Then
          MsgBox "Bitte alle Pflichtfelder ausfüllen!" ', 48
          Controlsgelb
          ctrElement.SetFocus
          Exit For
        End If
    End Select
  Next ctrElement

Gruß Uwe
Top
#3
Hallo Uwe,


vielen Dank für deine Antwort!

Leider bekomme ich da immer eine Fehlermeldung! Laufzeitfehler 438! Objekt unterstützt diese Eigenschaft oder Methode nicht!

Woran liegt das?

Hier mein ganzer Code:

Code:
Private Sub cmdÄnderungenSpeichern_Click()                  'Änderungen speichern
Dim var
Dim rngID As Range
Dim sSearch As String
var = MsgBox("Sind Sie sicher, dass Sie die Änderungen zum Artikel" & " " & TextBox3.Value & " " & "speichern möchten? ", vbYesNo)
     If var = 7 Then
         Exit Sub
         Else
         Dim ctrElement As Control
   For Each ctrElement In ArtikelDB.Controls
     Select Case ctrElement.Name
       Case "TextBox1", "TextBox2", "TextBox57", "TextBox58", "TextBox59" ', "ComboBox2", "ComboBox3"
       Case Else
         If ctrElement.Value = "" Then
           MsgBox "Bitte alle Pflichtfelder ausfüllen!" ', 48
           Controlsgelb
           ctrElement.SetFocus
           Exit For
         End If
         End Select
         Next
    sSearch = TextBox3 'Eintrag an die Variable übergeben
    Set rngID = ThisWorkbook.Sheets("produkte").Columns("C:C").Find(What:=sSearch, LookAt:=xlWhole, LookIn:=xlValues) 'In Spalte A nach dem Wert in der Variable suchen und festhalten
    End If
     With ThisWorkbook.Sheets("produkte")
         ArtikelDB.TextBox58.Text = Environ("Username") & " " & Date & " " & Time
     For y = 1 To 29
         .Cells(rngID.Row, y) = ArtikelDB.Controls("Textbox" & y).Value
     Next y
     For y = 30 To 33
         .Cells(rngID.Row, y) = CCur(ArtikelDB.Controls("Textbox" & y))
     Next y
     For y = 34 To 51
         .Cells(rngID.Row, y) = ArtikelDB.Controls("Textbox" & y).Value
     Next y
     For y = 52 To 55
         .Cells(rngID.Row, y) = CCur(ArtikelDB.Controls("Textbox" & y))
     Next y
     For y = 56 To 58
         .Cells(rngID.Row, y) = ArtikelDB.Controls("Textbox" & y).Value
     Next y
End With
Dim Datensatz As Long
Application.ScreenUpdating = True
Datensatz = ThisWorkbook.Sheets("produkte").Cells(Rows.Count, 3).End(xlUp).Row
lstArtikel.Clear
   For i = 2 To Datensatz
      If ThisWorkbook.Sheets("produkte").Cells(i, 3).Value <> "" Then _
         ArtikelDB.lstArtikel.AddItem (ThisWorkbook.Sheets("produkte").Cells(i, 3).Value) ' & "  -  " & (ThisWorkbook.Sheets("produkte").Cells(i, 4).Value)
   Next
   lstArtikel.Enabled = True
   lstArtikel.SetFocus
   cmdArtikelSuchen_Click
   MsgBox "Änderungen zum Artikel" & " " & TextBox3.Value & " " & "wurden erfolgreich gespeichert"
OriginalColor
ControlsOnlyView
End Sub


Vielen Dank
VG
Alexandra
Top
#4
Hallo Alexandra,

Du hast leider nicht mitgeteilt, an welcher Stelle genau eine Fehlermeldung kommt.
Darum ins Blaue:

Code:
Dim ctrElement As Control
  For Each ctrElement In Me.Controls
    If TypeName(ctrElement) = "TextBox" Or TypeName(ctrElement) = "ComboBox" Then
      Select Case ctrElement.Name
        Case "TextBox1", "TextBox2", "TextBox57", "TextBox58", "TextBox59", "ComboBox2", "ComboBox3"
        Case Else
          If ctrElement.Value = "" Then
            MsgBox "Bitte alle Pflichtfelder ausfüllen!" ', 48
            'Controlsgelb
            ctrElement.SetFocus
            Exit For
          End If
      End Select
    End If
  Next ctrElement

Gruß Uwe
[-] Folgende(r) 2 Nutzer sagen Danke an Kuwer für diesen Beitrag:
  • cysu11, Wilfried Höttl
Top
#5
Hallo Uwe,


habe es hinbekommen!


Vielen lieben Dank :)
LG
Alexandra
Top
#6
Hallo zusammen,


habe nochmals den anschließenden Code eingeschaltet und irgendwie funktioniert dieser hier nicht:

Code:
Sub Controlsgelb()                                      'Textboxen färben wenn leer beim Anlegen oder Ändern eines Datensatzes
  Dim ctrElement As Control
   For Each ctrElement In Me.Controls
      If TypeName(ctrElement) = "TextBox" Or TypeName(ctrElement) = "Combobox" Then
            If ctrElement.Value = "" Then
                ctrElement.BackColor = &HC0FFFF
            Else
            ctrElement.BackColor = &HE0E0E0
            End If
    End If
   Next ctrElement
End Sub

Es werden nur die TextBoxen gelb, aber die Comboboxen nicht!! Weiß jemand warum, was muss ich da ändern!?

Vielen Dank im Voraus
LG
Alexandra
Top
#7
Hallo Alexandra,

ohne weitere Maßnahmen ist die Groß-/Kleinschreibung zu beachten.
Wenn Du ... = "ComboBox" Then
schreibst, funktioniert es schon.

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • cysu11
Top
#8
Hallo Uwe,


oh Mann, so einfach?!
Jetzt funktioniert es natürlich!! :)


Vielen lieben Dank
LG
Alexandra
Top
#9
Hallo zusammen,


noch eine Frage zu diesem Code:

Code:
Dim ctrElement As Control
   For Each ctrElement In Me.Controls
   If TypeName(ctrElement) = "TextBox" Or TypeName(ctrElement) = "ComboBox" Then
                     If ctrElement.Value = "" Then
       Controlsgelb
              MsgBox "Bitte alle Pflichtfelder ausfüllen!"
       ctrElement.SetFocus
    Exit Sub
   End If
   End If
Next

Hier wird jede TextBox oder Combobox geprüft! Wie müsste es aussehen, wenn TextBox 60 und TextBox 68 nicht berücksichtig werden sollen!


Vielen dank
VG
Alexandra
Top
#10
Hallo Alexandra,

ok, ist ein wenig warm, deswegen kann man einiges übersehen, aber weiter oben hatte Uwe für
einen solchen Fall schon eine Lösung aufgezeigt.

Hier jetzt mit den gegebenen Vorgaben:

Code:
Sub Controlsgelb()                                      'Textboxen färben wenn leer beim Anlegen oder Ändern eines Datensatzes
  Dim ctrElement As Control
   For Each ctrElement In Me.Controls
      If TypeName(ctrElement) = "TextBox" Or TypeName(ctrElement) = "ComboBox" Then
         Select Case ctrElement.Name
            Case Is = "TextBox1", "TextBox2"
            Case Else
               If ctrElement.Value = "" Then
                   ctrElement.BackColor = &HC0FFFF
               Else
               ctrElement.BackColor = &HE0E0E0
               End If
         End Select
      End If
   Next ctrElement
  
End Sub


Hallo noch mal,

ich sehe gerade, dass Hajo mit Deinem Case Else wieder Probleme bekommen hat.
Die Lösung für das dortige Problem ist relativ einfach.
Karins Lösung ist doch sehr einfach und gut, hatte es anfangs falsch gedeutet. ist halt warm, ne..:19:

So gehst auch:
Du hast ein allgemeines Modul, in welchem Du eine Public Variable benennst, so z.B:
Code:
Option Explicit
Public aktiveForm As Object

In jeder der Userformen schreibst Du im Activate Ereignis, folgendes:

Zitat:Private Sub UserForm_Activate()
Set aktiveForm = Me
.....

Und die Ereignisse in ThisWorkbook sehen dann so aus:
Code:
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
   aktiveForm.Show
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
   aktiveForm.Hide
End Sub

Für alle interessierten, die Frage von Alexandra ist hier zu finden:

schaut mal hier
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • cysu11
Top


Gehe zu:


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