**************************************************** * * * Kapitel 11: Creating UserForms * * * **************************************************** Eine UserForm ist im wesentlichen ein eigenstaendiges Fenster mit Steuerelementen wie Text-Feldern, Befehls- Knoepfen, Combo-Boxen, List-Boxen und aehnlichen Sachen. Eine detailierte Anleitung zum Erstellen von UserForms, Mausklick fuer Mausklick und mit zahlreichen screenshots, befindet sich im 18. Kapitel von Urtis_ExcelVBA. Im 19. Kapitel ist beschrieben, wie die einzelnen Elemente (also ein Command-Button oder eine List-Box) mit ent- sprechenden VBA-Code versehen werden koennen. Wir schauen uns das Beispiel in week12.xlsm an und tun dann Schritt fuer Schritt das sheet neu erstellen. Der Code zum Auslesen der selektierten Eintraege in den List-Boxen ist in Urtis_ExcelVBA nicht vollstaendig an- gegeben, hier kann man sich etwas im Internet umschauen, etwa mit der Suche "excel vba listbox auswahl auslesen". In den ersten Suchergebnissen findet man dann sofort was man braucht. Der UserForm kann man im Eigenschaftsfenster wieder einen eigenen VBA-Namen geben, etwa "AnmeldeTool". Die UserForm kann dann in einem beliebigen Sub mit dem Befehl AnmeldeTool.Show geoeffnet werden. Es wird dann automatisch das Excel-Ereignis UserForm_Initialize() ausgeloest, hinter dem man dann Code platzieren kann. Wir muessen die List-Boxen initialisieren, kann man etwa so machen: Private Sub UserForm_Initialize() With ListBox1 .Clear .AddItem "Analysis II" .AddItem "Mathematische Strukturen" .AddItem "Numerik I" .AddItem "Punktmechanik" .AddItem "Lineare Optimierung" .AddItem "Einfuehrung in Matlab" End With With ListBox2 .Clear .AddItem "Partielle Differentialgleichungen" .AddItem "Stochastik II" .AddItem "Numerik II" .AddItem "Starrkoerperbewegung" .AddItem "Einfuehrung in die Kontrolltheorie" .AddItem "Excel/VBA" .AddItem "Finanzinstrumente" .AddItem "Rechnerimplementierung mathematischer Methoden" .AddItem "Mathematik in historischer Betrachtung" .AddItem "Test (erzwinge Scrollbar..)" .AddItem "Test (erzwinge Scrollbar..)" End With End Sub Der Anmelde-Button auf der UserForm ist ein AxtiveX-Button, der loest also Ereignisse aus. Entsprechenden Code kann man dann also hinter dem CommandButton1_Click() Event platzieren. Das koennte hier dann etwa folgender- massen aussehen: Private Sub CommandButton1_Click() Dim name As String name = TextBox1.Text If name = "" Then MsgBox "Geben Sie Ihren Namen ein" Exit Sub End If Dim VL1() As String 'die ausgewaehlten Vorlesungen pro Liste Dim VL2() As String Dim n1 As Long, n2 As Long 'Anzahl der ausgew. VLs pro Liste (pro Semester) Dim k As Long 'finde alle ausgewaehlten Veranstaltungen: n1 = 0 For k = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(k) Then n1 = n1 + 1 ReDim Preserve VL1(1 To n1) VL1(n1) = ListBox1.List(k) End If Next k n2 = 0 For k = 0 To ListBox2.ListCount - 1 If ListBox2.Selected(k) Then n2 = n2 + 1 ReDim Preserve VL2(1 To n2) VL2(n2) = ListBox2.List(k) End If Next k If n1 + n2 = 0 Then MsgBox "Sie haben keine Veranstaltungen ausgewaehlt" Exit Sub End If 'schreibe Namen des Users in das Anmelde-Excelsheet 'fuer die ausgewaehlten Veranstaltungen: Dim ncol As Long, m As Long Dim current As String Dim rowcurrent As Long ncol = 0 While sh1.Cells(1, ncol + 1) <> "" ncol = ncol + 1 Wend For m = 1 To ncol current = sh1.Cells(1, m) 'Liste1 (2.Semester) For k = 1 To n1 If VL1(k) = current Then rowcurrent = sh1.Cells(Rows.Count, m).End(xlUp).Row + 1 sh1.Cells(rowcurrent, m) = name End If Next k 'Liste2 For k = 1 To n2 If VL2(k) = current Then rowcurrent = sh1.Cells(Rows.Count, m).End(xlUp).Row + 1 sh1.Cells(rowcurrent, m) = name End If Next k Next m MsgBox "Ihre Daten wurden uebermittelt." Unload Me End Sub