Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Daten aus UserForm in best. Zellbereiche

Betrifft: Daten aus UserForm in best. Zellbereiche von: Andreas
Geschrieben am: 10.09.2014 15:18:27

Hallo Forum,

ich komme mal wieder nicht weiter. Ich habe eine Datei in die ich über verschiedene Userforms Einträge automatisieren möchte.

Per Commandbutton werden die Daten aus dem Userform in ein Formular geschrieben (das soll später noch ausgedruckt werden),
Hier klappt auch schon alles, bis auf einen Punkt.

- Folgende Feldern müssen ausgewählt oder beschrieben sein: Combobox1 - Combobox2 - Combobox4 - Combobox6 - Textbox1 - Textbox3 - Textbox4

Wenn nicht soll ein Warnhinweis erscheinen, dass das Userform vollständig ausgefüllt werden muß.

Als zweites sollen die Daten noch untereinander in ein dem Datum im UserForm übereinstimmende Übersichtstabelle geschrieben werden.

Dabei komme ich bei folgenden Punkten nicht weiter:

- Über Combobox1 wird das Datum ausgewählt - wenn kein entsprechendes Blatt (Übersichtstabelle) vorhanden ist, soll ein Hinweis erscheinen und der Vorgang an dieser Stelle abgebrochen werden.

- wenn die Uhrzeit in Combobox2 kleiner als 12:00 sollen die Inhalte der Felder in die erste freie Zeile in den Zeilen 3 bis 18 in der von A bis Q nichts ("") steht eingetragen werden

- wenn die Uhrzeit in Combobox2 größer als 12:00 sollen die Inhalte der Felder in die erste freie Zeile in den Zeilen 21 bis 45 in der von A bis Q nichts ("") steht eingetragen werden

Leider übersteigt das bei weitem meine Kenntnisse. Bin nur über Recherche und Dank dieses super Forums so weit gekommen.

Danke fürs lesen und die Hilfe!

mfg, Andreas

https://www.herber.de/bbs/user/92569.xlsm

  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: Frank
Geschrieben am: 10.09.2014 16:24:10

Hallo Andreas,

Warnhinweis, dass UF vollständig ausgefüllt sein muss:
- in Private Sub des CommadButton1_Click als erstes prüfen,ob in allen Feldern der UF gültige Werte stehen
- Falls nicht, UF unload. Warnhinweis als MsgBox ausgeben, nach Bestätigung UF neu laden (ggf. vor Unload bereits eingetragene Werte auslesen und bei der Initialisierung eintragen)
Datum checken: ComboBox1 hat ein Change-Ereignis, dem Du Code zuordnen kannst. Hier das eingetragene Datum mit den vorhandenen, zulässigen Werten vergleichen. Falls keine Übereinstimmung gefunden wird - EXIT SUB
Uhrzeit Combobox2: Inhalte welcher Felder? Eintragen in welches Blatt?

Grüsse,
Frank


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: Andreas
Geschrieben am: 10.09.2014 17:11:56

Hallo Frank,

vielen Dank für deine Antwort. Leider verstehe ich von VBA nicht soviel, dass ich deine Tipps umsetzen könnte.

mfg, Andreas


  

Betrifft: Wer hat Dir den Code für die UFgeschrieben? von: Frank
Geschrieben am: 10.09.2014 17:54:08

Hallo Andreas,

die bereits in der Tabelle enthaltenen Codebestandteile hatten mich vermuten lassen, Dein Level "VBA nur mit Recorder" sei ein Understatement. Sorry.
@Yummi: Viel Erfolg!

Grüsse,
Frank


  

Betrifft: AW: Wer hat Dir den Code für die UFgeschrieben? von: Andreas
Geschrieben am: 10.09.2014 18:58:34

Hallo Frank,

Danke für deine Hilfe. Habe den Code durch Recherche und dieses Forum zusammenbekommen. Jetzt komme ich aber leider nicht weiter.

Habe jetzt mal folgendes versucht:

Private Sub ComboBox1_Change()

If bUnterdrücken = False Then
bUnterdrücken = True
ComboBox1.Value = Format(ComboBox1.Value, ("dd.mm.yyyy"))
If SucheBlatt(ComboBox1.Value) = False Then
MsgBox ("Kein Tabellenblatt zum gewählten Datum vorhanden!")
Unload Me
Else
bUnterdrücken = False
'Set wks = ThisWorkbook.Sheets(ComboBox1.Value)
End If
End If
End Sub

Dieser Teil funktioniert super, musste aber den sprung zum Blatt "ComboBox1.Value" auskommentieren weil die Daten ja zuerst in das Blatt "Abholung" eingetragen werden.

siehe:


Private Sub CommandButton1_Click()
  
  Sheets("Abholung").Activate
  Dim Zeile As Long, objControl As Control, intI As Integer, wks As Worksheet
  Zeile = 21
  Set wks = ActiveSheet
  wks.Range("B22:B43").ClearContents
  For intI = 7 To 21
    Set objControl = Me.Controls("Combobox" & Format(intI, "0"))
    If objControl.Text <> "" Then
      Zeile = Zeile + 1
      wks.Cells(Zeile, 2) = objControl.Text
    End If
  Next
  For intI = 6 To 10
    Set objControl = Me.Controls("Textbox" & Format(intI, "0"))
    If objControl.Text <> "" Then
      Zeile = Zeile + 1
      wks.Cells(Zeile, 2) = objControl.Text
    End If
  Next
Range("C11") = ComboBox1.Text 'Datum
Range("F11") = ComboBox2.Text ' Von
Range("G11") = ComboBox3.Text   '"bis oder ab"
Range("H11") = ComboBox4.Text 'Bis
'Range("F13").Value = ComboBox6.List(ComboBox6.ListIndex, 0) 'Dauer
Range("B14").Value = Me.TextBox1.Text 'Name
Range("B20").Value = Me.TextBox2.Text 'Telefon
Range("B16").Value = Me.TextBox3.Text & " " & Me.TextBox4.Text 'Strasse + Nummer
Range("F16") = ComboBox5.Text 'Etage
Range("B18").Value = Me.TextBox5.Text 'Ort
Range("B46").Value = Me.TextBox11.Text 'Bemerkungen

'jetzt erst der Wechsel zum Blatt "ComboBox1.Value"

Sheets(ComboBox1.Value).Activate

Hier müsste dann die Abfrage nach dem Inhalt der Combobox2 hin.
If ComboBox2 < "12:00" Then

WerteEintragen1

Else

WerteEintragen1

End If

End Sub

Funktioniert aber nicht.

Habe deine Funktionen wie folgt angepasst (noch nicht vollständig):
Function WerteEintragen1()
Dim i As Long

    If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 1).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 1).Value = Me.ComboBox2.Value
                Exit For
            End If
        Next i
    End If
    
    If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 2).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 2).Value = Me.ComboBox3.Value
                Exit For
            End If
        Next i
    End If
    
End Function






'wenn > 12:00
Function WerteEintragen2()
Dim i As Long

    If Not wks Is Nothing Then
        For i = 21 To 45
            If wks.Cells(i, 1).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 1).Value = Me.ComboBox2.Value
                Exit For
            End If
        Next i
    End If
    
    If Not wks Is Nothing Then
        For i = 21 To 45
            If wks.Cells(i, 2).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 2).Value = Me.ComboBox3.Value
                Exit For
            End If
        Next i
    End If
End Function

Function CheckVollstaendig() As Boolean

'das für alle Combo und Textboxen hier noch rein

If Me.ComboBox1.Value = "" Then
    CheckVollstaendig = False
End If

If Me.ComboBox2.Value = "" Then
    CheckVollstaendig = False
End If

If Me.ComboBox4.Value = "" Then
    CheckVollstaendig = False
End If

If Me.ComboBox6.Value = "" Then
    CheckVollstaendig = False
End If

If Me.TextBox1.Value = "" Then
    CheckVollstaendig = False
End If

If Me.TextBox3.Value = "" Then
    CheckVollstaendig = False
End If

If Me.TextBox4.Value = "" Then
    CheckVollstaendig = False
End If


'ganz am Ende dann noch
CheckVollstaendig = True
End Function

Wie Kann ich diese aufrufen? Die Funktion der Vollständigkeit müsste gleich nach dem Druck auf Commandbutton1 aufgerufen werden.

Die Funktionen WerteEintragen1 und WerteEintragen2 nach "Sheets(ComboBox1.Value).Activate".

Habe ich das richtig verstanden, dass die Funktion WerteEintragen1 die erste Zeile in den Zeilen 3 bis 18 sucht, bei der die Spalten A bis Q frei sind?

Danke nochmals für die Hilfe!

mfg, Andreas




  

Betrifft: Falscher Adressat von: Frank
Geschrieben am: 10.09.2014 19:28:14

Hallo Andreas,

Du kannst CheckVollstaendig als Variable benutzen, die entweder den Wert WAHR oder den Wert FALSCH hat, je nach Vollständigkeit der ausgefüllten UF.

Also beispielsweise als erste Zeilen des Ereignisses CommandButton1_Click

if not CheckVollstaendig then
   MsgBox "UF erst vollständig ausfüllen!"
end if
Für das Eintragen von Werten musst Du nicht in das entsprechende Blatt mittels Sheets(ComboBox1.Value).Activate
wechseln. Es reicht, dem Zellbezug die komplette Referenz über Mappe und Blatt mitzugeben, z.B. Workbooks("MyWorkbook").Sheets(ComboBox1.Value).Cells(Zeile, Spalte).Value

Grüsse,
Frank


  

Betrifft: AW: Falscher Adressat von: Andreas
Geschrieben am: 10.09.2014 19:44:01

Hallo Frank,

sorry für die Verwechslung und danke für die Hilfe. Das mit dem Blattwechsel ("ComboBox1.Value).Activate") ist so gewollt, da das die Übersicht aller Aufträge eines Tages darstellt.

mfg, Andreas


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: yummi
Geschrieben am: 10.09.2014 16:54:28

Hallo Andreas,

ich hab dir mal ein paar Anregungen und Funktionen geschrieben, die dir hoffentlcih weiter helfen.
Da ich aber nicht weiß wo du was genau machen willst musst du die entsprechenden Aufrufe noch einbauen.

Gruß
yummi

https://www.herber.de/bbs/user/92574.xlsm


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: Andreas
Geschrieben am: 10.09.2014 17:13:06

Hallo Yummi,

vielen Dank für deine Hilfe, ich werd`s mal durchtesten und Rückmeldung geben.

mfg, Andreas


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: Andreas
Geschrieben am: 10.09.2014 19:48:04

Hallo Yammi,

Danke für deine Hilfe. Habe den Code durch Recherche und dieses Forum zusammenbekommen. Jetzt komme ich aber leider nicht weiter.

Habe jetzt mal folgendes versucht:

Private Sub ComboBox1_Change()

If bUnterdrücken = False Then
bUnterdrücken = True
ComboBox1.Value = Format(ComboBox1.Value, ("dd.mm.yyyy"))
If SucheBlatt(ComboBox1.Value) = False Then
MsgBox ("Kein Tabellenblatt zum gewählten Datum vorhanden!")
Unload Me
Else
bUnterdrücken = False
'Set wks = ThisWorkbook.Sheets(ComboBox1.Value)
End If
End If
End Sub
Dieser Teil funktioniert super, musste aber den sprung zum Blatt "ComboBox1.Value" auskommentieren weil die Daten ja zuerst in das Blatt "Abholung" eingetragen werden.

siehe:


Private Sub CommandButton1_Click()
    
    Sheets("Abholung").Activate
    Dim Zeile As Long, objControl As Control, intI As Integer, wks As Worksheet
    Zeile = 21
    Set wks = ActiveSheet
    wks.Range("B22:B43").ClearContents
    For intI = 7 To 21
      Set objControl = Me.Controls("Combobox" & Format(intI, "0"))
      If objControl.Text <> "" Then
        Zeile = Zeile + 1
        wks.Cells(Zeile, 2) = objControl.Text
      End If
    Next
    For intI = 6 To 10
      Set objControl = Me.Controls("Textbox" & Format(intI, "0"))
      If objControl.Text <> "" Then
        Zeile = Zeile + 1
        wks.Cells(Zeile, 2) = objControl.Text
      End If
    Next
  Range("C11") = ComboBox1.Text 'Datum
  Range("F11") = ComboBox2.Text ' Von
  Range("G11") = ComboBox3.Text   '"bis oder ab"
  Range("H11") = ComboBox4.Text 'Bis
  'Range("F13").Value = ComboBox6.List(ComboBox6.ListIndex, 0) 'Dauer
  Range("B14").Value = Me.TextBox1.Text 'Name
  Range("B20").Value = Me.TextBox2.Text 'Telefon
  Range("B16").Value = Me.TextBox3.Text & " " & Me.TextBox4.Text 'Strasse + Nummer
  Range("F16") = ComboBox5.Text 'Etage
  Range("B18").Value = Me.TextBox5.Text 'Ort
  Range("B46").Value = Me.TextBox11.Text 'Bemerkungen
  
  'jetzt erst der Wechsel zum Blatt "ComboBox1.Value"
  
  Sheets(ComboBox1.Value).Activate
  
  

Hier müsste dann die Abfrage nach dem Inhalt der Combobox2 hin.

  If ComboBox2 < "12:00" Then
  
  WerteEintragen1
  
  Else
  
  WerteEintragen1
  
  End If
  
  End Sub




Funktioniert aber nicht.

Habe deine Funktionen wie folgt angepasst (noch nicht vollständig):

Function WerteEintragen1()
Dim i As Long

If Not wks Is Nothing Then
For i = 3 To 18
If wks.Cells(i, 1).Value = "" Then
'eintragen und verlassen
wks.Cells(i, 1).Value = Me.ComboBox2.Value
Exit For
End If
Next i
End If

If Not wks Is Nothing Then
For i = 3 To 18
If wks.Cells(i, 2).Value = "" Then
'eintragen und verlassen
wks.Cells(i, 2).Value = Me.ComboBox3.Value
Exit For
End If
Next i
End If

End Function






'wenn > 12:00
Function WerteEintragen2()
Dim i As Long

If Not wks Is Nothing Then
For i = 21 To 45
If wks.Cells(i, 1).Value = "" Then
'eintragen und verlassen
wks.Cells(i, 1).Value = Me.ComboBox2.Value
Exit For
End If
Next i
End If

If Not wks Is Nothing Then
For i = 21 To 45
If wks.Cells(i, 2).Value = "" Then
'eintragen und verlassen
wks.Cells(i, 2).Value = Me.ComboBox3.Value
Exit For
End If
Next i
End If
End Function

Function CheckVollstaendig() As Boolean

'das für alle Combo und Textboxen hier noch rein

If Me.ComboBox1.Value = "" Then
CheckVollstaendig = False
End If

If Me.ComboBox2.Value = "" Then
CheckVollstaendig = False
End If

If Me.ComboBox4.Value = "" Then
CheckVollstaendig = False
End If

If Me.ComboBox6.Value = "" Then
CheckVollstaendig = False
End If

If Me.TextBox1.Value = "" Then
CheckVollstaendig = False
End If

If Me.TextBox3.Value = "" Then
CheckVollstaendig = False
End If

If Me.TextBox4.Value = "" Then
CheckVollstaendig = False
End If


'ganz am Ende dann noch
CheckVollstaendig = True
End Function



Wie Kann ich diese aufrufen? Die Funktion der Vollständigkeit müsste gleich nach dem Druck auf Commandbutton1 aufgerufen werden.

Die Funktionen WerteEintragen1 und WerteEintragen2 nach "Sheets(ComboBox1.Value).Activate".

Habe ich das richtig verstanden, dass die Funktion WerteEintragen1 die erste Zeile in den Zeilen 3 bis 18 sucht, bei der die Spalten A bis Q frei sind?

Danke nochmals für die Hilfe!

mfg, Andreas


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: yummi
Geschrieben am: 11.09.2014 09:19:13

Halo Andreas,

den Aufruf von WerteEintragen1 bzw 2 machst Du ganz einfach: An die Stelle, wo Du die WErte eintragen willst WerteEintragen1 schreiben und fertig bzw WerteEintragen2.
Man könnte auch eine Funktion mit Übergabeparameter machen.

Am besten du postest deinen aktuellen Code nochmal und machst kommentare im Code was noch nicht geht und wie es gehen soll, dann schau ich mal.

Gruß
yummi


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: Andreas
Geschrieben am: 11.09.2014 12:03:55

Hallo yummi,

erstmal vielen Dank für deine Mühe. Nochmal zum grundsätzlichen Verständnis des Ablaufs:
1. Formular wird ausgefüllt
2. Per Commandbutton wird zu einem Formularblatt gesprungen und die Werte aus der UserForm dort eingetragen - dann wird zu dem Blatt gesprungen dessen Name mit dem Wert aus Combobox1 übereinstimmt - dort werden nochmals alle Daten aus dem UserForm eingefügt (nächste leere Zeile).



Nachfolgend mein Code und die Erläuterungen dazu.



Dieser Code ist zum Vervollständigen der Textbox3 (alles Ok):


Option Explicit
' verliert die Textbox den Focus, merkt sich Excel die Eingabe

Private Const STARTSPALTE = 1
Private Const WORTE_TAB = "Strassen" ' Blatt der Werte die verglichen werden
Private tb_lock As Boolean, tmp$, rng As Range, blocke_autokorrektur As Boolean
Private bUnterdrücken As Boolean
Private wks As Worksheet


Private Sub TextBox3_Change()
Dim ln&
    If blocke_autokorrektur Then
      blocke_autokorrektur = False
      Exit Sub
    End If
    If tb_lock Then Exit Sub
    tb_lock = True
    ln = Len(TextBox3)
        tmp = Finde_Vorschlag(TextBox3.Value)
        If tmp <> vbNullString Then
            With TextBox3
                .Value = tmp
                .SelStart = ln
                .SelLength = Len(TextBox3)
            End With
        End If
    tb_lock = False
End Sub

Private Function Finde_Vorschlag(eingabe$) As String
Dim fa$, fd As Boolean
    If eingabe = " " Or eingabe = vbNullString Then
        Finde_Vorschlag = vbNullString
        Exit Function
    End If
    With Worksheets(WORTE_TAB).Cells
    
        Set rng = .Find(eingabe, LookIn:=xlValues, lookat:=xlPart)
        If Not rng Is Nothing Then
            fa = rng.Address
            Do
              If Left(rng.Value, Len(eingabe)) = eingabe Then
                fd = True
                Exit Do
              End If
              Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> fa
        If Not fd Then
            Finde_Vorschlag = vbNullString
            Exit Function
        Else
            Finde_Vorschlag = .Cells(rng.Row, rng.Column).Value
        End If
     End If
    End With

End Function

Private Sub Textbox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal shift As Integer)
    If KeyCode = 8 Then blocke_autokorrektur = True
    If Len(TextBox3) = 0 Then blocke_autokorrektur = False
End Sub

Hier gehts los:

Private Sub CommandButton1_Click()

Hier müsste die Funktion "CheckVollstaendig()" rein. Also vor oder nach "Sheets("Abholung").Activate" ---- prüfe ob alle in der Funktion angegeben Comboboxen und Textboxen einen Wert haben -- wenn nicht - dann Meldung und zum UserForm zurück -- sonst code weiter ausführen

  Sheets("Abholung").Activate
  
  Dim Zeile As Long, objControl As Control, intI As Integer, wks As Worksheet
  Zeile = 21
  Set wks = ActiveSheet
  wks.Range("B22:B43").ClearContents
    
    For intI = 7 To 21
    Set objControl = Me.Controls("Combobox" & Format(intI, "0"))
    If objControl.Text <> "" Then
      Zeile = Zeile + 1
      wks.Cells(Zeile, 2) = objControl.Text
    End If
  Next
  For intI = 6 To 10
    Set objControl = Me.Controls("Textbox" & Format(intI, "0"))
    If objControl.Text <> "" Then
      Zeile = Zeile + 1
      wks.Cells(Zeile, 2) = objControl.Text
    End If
  Next
Range("C11") = ComboBox1.Text 'Datum
Range("F11") = ComboBox2.Text ' Von
Range("G11") = ComboBox3.Text   '"bis oder ab"
Range("H11") = ComboBox4.Text 'Bis
'Range("F13").Value = ComboBox6.List(ComboBox6.ListIndex, 0) 'Dauer
Range("B14").Value = Me.TextBox1.Text 'Name
Range("B20").Value = Me.TextBox2.Text 'Telefon
Range("B16").Value = Me.TextBox3.Text & " " & Me.TextBox4.Text 'Strasse + Nummer
Range("F16") = ComboBox5.Text 'Etage
Range("B18").Value = Me.TextBox5.Text 'Ort
Range("B46").Value = Me.TextBox11.Text 'Bemerkungen

Sheets(ComboBox1.Value).Activate

Hier müssten jetzt die Funktionen "WerteEintragen1" und "WerteEintragen2" rein.

Ich habe es so probiert, funktioniert aber nicht.

'If ComboBox2 < "12:00" Then

'WerteEintragen1

'Else

'WerteEintragen1

'End If



End Sub

Hier habe ich den Sprung "(ComboBox1.Value)" rausgenommen, Der Sprung erfolgt über den Commandbutton, das klappt auch super, es soll auch auf das Blatt gesprungen werden.

Private Sub ComboBox1_Change()

If bUnterdrücken = False Then
    bUnterdrücken = True
    ComboBox1.Value = Format(ComboBox1.Value, ("dd.mm.yyyy"))
    If SucheBlatt(ComboBox1.Value) = False Then
        MsgBox ("Kein Tabellenblatt zum gewählten Datum vorhanden!")
        Unload Me
    Else
        bUnterdrücken = False
        'Set wks = ThisWorkbook.Sheets(ComboBox1.Value)
    End If
End If
End Sub

Hier mal eine vollständige Funktion "WerteEintragen1". Verstehe ich das richtig: suche in den Zeilen 3 bis 18 die erste freie Zeile in der alle Spalten A bis Q leer ist und schreibe dann Combobox2 in Spalte 1 , Combobox3 in Spalte 2 usw?

Function WerteEintragen1()
Dim i As Long

    If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 1).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 1).Value = Me.ComboBox2.Value
                Exit For
            End If
        Next i
    End If
    
    If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 2).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 2).Value = Me.ComboBox3.Value
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 3).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 3).Value = Me.ComboBox4.Value
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 10).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 10).Value = Me.ComboBox6.List(ComboBox6.ListIndex, 0)
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 4).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 4).Value = Me.Textbox1.Text
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 5).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 5).Value = Me.Textbox2.Text
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 6).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 6).Value = Me.TextBox3.Text
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 7).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 7).Value = Me.TextBox4.Text
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 8).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 8).Value = Me.TextBox5.Text
                Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 9).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 9).Value = Me.ComboBox7.Value & " " & Me.ComboBox8.Value & " " &  _
Me.ComboBox9.Value & " " & 

Me.ComboBox10.Value & " " & Me.ComboBox11.Value & " " & Me.ComboBox12.Value & " " & Me. _
ComboBox13.Value & " " & 

Me.ComboBox14.Value & " " & Me.ComboBox15.Value & " " & Me.ComboBox16.Value & " " & Me. _
ComboBox17.Value & " " & 

Me.ComboBox18.Value & " " & Me.ComboBox19.Value & " " & Me.ComboBox20.Value & " " & Me. _
ComboBox21.Value & " " & 

Me.TextBox6.Text & " " & Me.TextBox7.Text & " " & Me.TextBox8.Text & " " & Me.TextBox9.Text & "  _
" & Me.TextBox10.Text

          Exit For
            End If
        Next i
    End If

If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 16).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 16).Value = "x"
                Exit For
            End If
        Next i
    End If
           
    
End Function

Und hier noch die vollständige Funktion: CheckVollstaendig()

Function CheckVollstaendig() As Boolean

'das für alle Combo und Textboxen hier noch rein

If Me.ComboBox1.Value = "" Then
    CheckVollstaendig = False
End If

If Me.ComboBox2.Value = "" Then
    CheckVollstaendig = False
End If

If Me.ComboBox4.Value = "" Then
    CheckVollstaendig = False
End If

If Me.ComboBox6.Value = "" Then
    CheckVollstaendig = False
End If

If Me.TextBox1.Value = "" Then
    CheckVollstaendig = False
End If

If Me.TextBox3.Value = "" Then
    CheckVollstaendig = False
End If

If Me.TextBox4.Value = "" Then
    CheckVollstaendig = False
End If


'ganz am Ende dann noch
CheckVollstaendig = True
End Function

Und hier noch der restliche Code:

Private Sub UserForm_Initialize()

bUnterdrücken = False
With Me.ComboBox3
.AddItem "bis"
.AddItem "ab"
.ListIndex = 0
End With

With Me.ComboBox1
.RowSource = "Userform!A3:A66"
.ListIndex = -1
End With

With Me.ComboBox2
.RowSource = "Zeit"
.ListIndex = -1
End With

With Me.ComboBox4
.RowSource = "Zeit"
.ListIndex = -1
End With

With Me.ComboBox5
.RowSource = "Etage"
.ListIndex = -1
End With

With Me.ComboBox6
.RowSource = "Dauer"
.ListIndex = -1
End With

With Me.ComboBox7
.RowSource = "Artikel"
.ListIndex = -1
End With
With Me.ComboBox8
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox9
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox10
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox11
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox12
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox13
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox14
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox15
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox16
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox17
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox18
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox19
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox20
.RowSource = "Artikel"
.ListIndex = -1
End With

With Me.ComboBox21
.RowSource = "Artikel"
.ListIndex = -1
End With

End Sub




Private Sub ComboBox2_Change()

ComboBox2.Value = Format(ComboBox2.Value, ("hh:mm"))
End Sub

Private Sub ComboBox4_Change()

ComboBox4.Value = Format(ComboBox4.Value, ("hh:mm"))

End Sub

Danke! mfg, Andreas


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: yummi
Geschrieben am: 11.09.2014 14:41:28

Hallo Andreas,

mit Datei wär leichter, aber ich versuchs mal so zu erklären:
1.)
in dein Commandbutton_click
fragst du als erstes if CheckVollstaendig = true then
das entsprechende else kommt genau vor das end function
else
MsgBox("DAten vervollständigen!!!"
end if

2.) Was geht denn bei dem Aufruf von WErtEintragen1 und WertEintragen2 nicht?
falls es um 12:00 uhr geht und du eine fixe Liste hast dann frag nicht nach 12:00 uhr sondern nach Listindex<=13 (wenn cih mich nicht verzählt habe. bei 12:00 uhr kommt nämlich so wie du es machst 0:00 uhr

3.) WertEintragen:

    If Not wks Is Nothing Then
        For i = 3 To 18
            If wks.Cells(i, 1).Value = "" Then
                'eintragen und verlassen
                wks.Cells(i, 1).Value = Me.ComboBox2.Value
                wks.Cells(i, 2).Value = Me.ComboBox3.Value
                wks.Cells(i, 3).Value = Me.Combobox4.value  'und alle weitere boxen
                Exit For
            End If
        Next i
    End If
    
ich bin davon ausgegangen, dass du eine Zeile immer komplett füllst (deswegen ja CheckVollstaendig), deswegen überprüfe ich nur ob die erste Spalte leer ist.

Du könntest zwar noch vor jedes schreiben prüfen ob die Zelle leer ist aber dann bekommst du evtl einen DS nicht in 1 Zeile, was Du glaube ich nicht willst.

3.) sry bei checkVollstaendig hatte ich noch ein Fehler
Function CheckVollstaendig() As Boolean
Dim cCont As Control
Dim bRet As Boolean

    bRet = True  'Rückgabewert mit ok vorbesetzen
    For Each cCont In Me.Controls    'durchlaufe alle Controls auf dem Userform
        If TypeName(cCont) = "TextBox" Or TypeName(cCont) = "ComboBox" Then   'prüfe nur Text  _
und Comboboxen
            If cCont.Value = "" Then   'kein Eintrag
                bRet = False           'Rückgabewert auf false
            End If
        End If
     Next cCont
CheckVollstaendig = bRet     'Rückgabewert zurückgeben
End Function

Das sollte dir erstmal ein Stück weiterhelfen, hoffe ich

Gruß
yummi

Wenn ich nochmal drauf schauen soll, poste deine Mappe nochmal, kann aber erst morgen wieder schauen.


  

Betrifft: AW: Daten aus UserForm in best. Zellbereiche von: Andreas
Geschrieben am: 12.09.2014 11:12:49

Hallo yummi,

habe deine Tipps noch eingebaut, jetzt funktioniert alles super.

Vielen Dank für deine Geduld und Hilfe!

Nen schönen Tag noch.

mfg, Andreas


 

Beiträge aus den Excel-Beispielen zum Thema "Daten aus UserForm in best. Zellbereiche"