Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Textboxinhalt in mehrere Spalten
10.03.2018 09:04:18
Steve
Hallo zusammen,
ich bastel die letzten Jahre immer den Urlaubsplan für ca 50 Personen.
Bisher habe ich alles mit Excel gemacht. Doch nun möchte ich die tabelle mit VBA ein wenig aufpeppen. Ich habe schon ein bisschen mit VBA herumexperimentiert aber mein Lösung noch nicht so wirklich gefunden.
Also: Ich habe einen Bereich, von 50 Zeilen(kollegen) x max 31 Spalten(Monatstage)
Wenn jemand in diesen Bereich eine Zelle anklickt, soll sich eine Textbox öffnen, wo er den Abwesenheitsgrund (Krank, Urlaub, Lehrgang,...) als Kürzel (k,u,lg) reinschreibt. Das Kürzel soll dann in die angeklickte Zelle geschrieben werden.
Schön wäre es natürlich, wenn in einer zweiten Textbox die Dauer der Abwesenheit eingetragen werden kann, so dass (k,u,lg) dann sooft in die Spalten geschrieben wird.
Ich danke euch schonmal im Vorraus ;)

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
eine Bsp-Datei...
10.03.2018 09:13:22
Oberschlumpf
...mit Bsp-Daten könntest du
Hallo Steve
uns per Upload zur Verfügung stellen.
Wir wissen nicht, wie deine Datei aussieht. Aus dem Grund können wir deine Datei auch nicht nachbauen.
Ciao
Thorsten
AW: eine Bsp-Datei...
10.03.2018 09:17:16
Steve
Okay, ich werde euch den Plan mal uploaden, das wird aber wahrscheinlich erst heute abend werden.
AW: Textboxinhalt in mehrere Spalten
10.03.2018 09:22:33
Hajo_Zi
Teil 1
Option Explicit                                     ' Variablendefinition erforderlich
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim RaBereich As Range                          ' Variable für Bereich
Dim RaZelle As Range                            ' Variable für Zelle
Set RaBereich = Range("A1:Ae50")                ' Bereich der Wirksamkeit
Set RaBereich = Intersect(RaBereich, Target)
If Not RaBereich Is Nothing Then
'ActiveSheet.Unprotect ("Passwort")
For Each RaZelle In RaBereich
With RaZelle
.Value = InputBox("Abwesendheisgrund für Zelle " & RaZelle.Address(False, False) _
)
End With
Next RaZelle
'ActiveSheet.protect ("Passwort")
End If
Set RaBereich = Nothing                         ' Variable leeren
End Sub

Gruß Hajo
Anzeige
AW: Textboxinhalt in mehrere Spalten
10.03.2018 09:25:01
Steve
Danke, das probier ich heute nachmittag gleich mal aus
AW: Textboxinhalt in mehrere Spalten
10.03.2018 09:27:00
Hajo_Zi
Beachte ich habe auch vorgesehen das mehrere Zellen gewählt werden können, was Excel ja zulässt.
Gruß Hajo
Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: Textboxinhalt in mehrere Spalten
10.03.2018 16:07:51
Steve
irgendwie geht das nicht er öffnet mir immer die makro-übersicht und will, dass ich ein makro auswähle.
wohin kommt dein code? in "diese Arbeitsmappe" oder in ein Modul? Muss ich die Inputbox noch erstellen?
AW: Textboxinhalt in mehrere Spalten
10.03.2018 16:09:20
Hajo_Zi
nein unter die Tabelle.
Gruß Hajo
Anzeige
AW: Textboxinhalt in mehrere Spalten
10.03.2018 16:40:45
Steve
da kommt die gleiche abfrage nach der makroübersicht
AW: Textboxinhalt in mehrere Spalten
10.03.2018 16:42:43
Hajo_Zi
ich bin dann raus, da Makros nicht mehr relevant. Laut Deinen Download Datei.
Eine XLSX Datei kann kein Makro enthalten.
Gruß Hajo
AW: Textboxinhalt in mehrere Spalten
10.03.2018 16:47:23
Steve
habs an ner test Excel Datei getestet, die makros erlaubt ;)
AW: Inputbox in mehrere Spalten
10.03.2018 09:37:49
hary
Moin
Der Code geht von der aktiven Zelle aus. Evtl. noch den Bereich einbauen.
Sub Eintragen()
Dim Grund As String, Dauer As Long
Grund = Application.InputBox("Bitte Grund eingeben", Type:=2)
If Grund = "Falsch" Then Exit Sub
Dauer = Application.Max(1, Application.InputBox("Bitte Dauer eingeben", Default:=1, Type:=1) _
)
ActiveCell.Resize(1, Dauer) = Grund
End Sub

gruss hary
Anzeige
AW: Textboxinhalt in mehrere Spalten
10.03.2018 09:38:27
Werner
Hallo Steve,
ich habe mal eine kleine Beispielmappe gebastelt. Zum Starten der Userform wird das Doppelklickereignis genutzt. Doppelklick ab Zeiele 2 und ab Spalte B öffnet die Userform.
Da ist jetzt aber noch keine Prüfung drin, ob ein gültiges Datum in die Textbox eingegeben wurde. Zudem müsste noch mit rein, wenn der Abwesenheitstermin in den nächsten Monat geht.
https://www.herber.de/bbs/user/120318.xlsm
Gruß Werner
AW: Textboxinhalt in mehrere Spalten
10.03.2018 16:46:23
Steve
Supi, genau so wollte ich das ;)
kann man die tage für den aktuellen Monat noch als Pulldown-Menü einfügen?
Anzeige
AW: Textboxinhalt in mehrere Spalten
11.03.2018 15:00:53
Werner
Hallo Steve,
kleine Erweiterung:
-Datum laufender Monat wird aus Zeile 1, ab B1 in eine Combobox eingelesen
-Datum der angeklickten Spalte wird in der Combobox vorausgewählt (spart Scrollen)
Hier noch mal der komplette Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row > 1 And Target.Column > 1 Then
Cancel = True
UserForm1.Show
End If
End Sub
Private Sub UserForm_Initialize()
Dim loSpalte As Long
loSpalte = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To loSpalte
If Cells(1, i)  "" Then
Me.ComboBox1.AddItem Cells(1, i)
End If
Next i
Me.AbwesenheitBox.AddItem "U"
Me.AbwesenheitBox.AddItem "UX"
Me.AbwesenheitBox.AddItem "916"
Me.AbwesenheitBox.AddItem "916X"
Me.AbwesenheitBox.AddItem "K"
Me.AbwesenheitBox.AddItem "LG"
'Voreinstellen der Listbox mit dem angeklickten Datum
UserForm1.ComboBox1.ListIndex = ActiveCell.Column - 2
End Sub
Private Sub CommandButton1_Click()
Dim loTage As Long
Cancel = True
loTage = CDate(Me.ComboBox1) - CDate(Cells(1, ActiveCell.Column))
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row, ActiveCell.Column + _
loTage)).Value = Me.AbwesenheitBox
Unload Me
End Sub
Gruß Werner
Anzeige
AW: Textboxinhalt in mehrere Spalten
10.03.2018 17:16:17
Steve
Es würde auch reichen, wenn man die anzahl der tage als text eingibt
AW: Textboxinhalt in mehrere Spalten
10.03.2018 20:27:35
Steve
Hab noch n bissel rumprobiert.
Hab jetzt in der UF1 31 Buttons, die das Datum angeben sollen. Aber der wandelt das Drücken des Buttons nicht in ein Datum um. hab ich was vergessen?
hier der Code:

Option Explicit
Dim DateButton As Date
Private Sub CommandButton1_Click()
Dim loTage As Long
loTage = CDate(Me.DateButton) - CDate(Cells(1, ActiveCell.Column))
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row, ActiveCell.Column +  _
loTage)).Value = Me.AbwesenheitBox & Me.SchichtBox
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub ToggleButton1_Change()
DateButton = "01.03.2018"
End Sub
Private Sub ToggleButton2_Click()
DateButton = "02.03.2018"
End Sub
Private Sub ToggleButton3_Click()
DateButton = "03.03.2018"
End Sub
Private Sub ToggleButton4_Click()
KalenderButton = "04.03.2018"
End Sub
Private Sub UserForm_Initialize()
Me.AbwesenheitBox.AddItem "U"
Me.AbwesenheitBox.AddItem "UX"
Me.AbwesenheitBox.AddItem "916"
Me.AbwesenheitBox.AddItem "916X"
Me.AbwesenheitBox.AddItem "K"
Me.AbwesenheitBox.AddItem "LG"
End Sub

Anzeige
AW: Textboxinhalt in mehrere Spalten
10.03.2018 22:10:06
Gerd
Moin Steve,
ich habe mich nicht "durchgehangelt". Aber statt
DateButton = "02.03.2018"
solltest du wahrscheinlich
DateButton = CDate("02.03.2018")
schreiben.
Gruß Gerd
AW: Textboxinhalt in mehrere Spalten
11.03.2018 13:57:09
Werner
Hallo Steve,
hier mal ein Code zum Einlesen des laufenden Monats (aktives Tabellenblatt) in eine Combobox.
Bin von meiner Beispieldatei ausgegangen, Datum steht in Zeile 1 ab B1. Die Datumswerte werden bei Start der Userform in eine Combobox (Combobox1) eingelesen.
Private Sub UserForm_Initialize()
Dim loSpalte As Long
loSpalte = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To loSpalte
If Cells(1, i)  "" Then
Me.ComboBox1.AddItem Cells(1, i)
End If
Next i
End Sub
Zum Eintragen in die Tabelle dann:
Private Sub CommandButton1_Click()
Dim loTage As Long
loTage = CDate(Me.Colbobox1) - CDate(Cells(1, ActiveCell.Column))
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row, ActiveCell.Column +   _
_
loTage)).Value = Me.AbwesenheitBox & Me.SchichtBox
Unload Me
End Sub
Gruß Werner
Anzeige
sorry Gerd, bin im falschen Zweig gelandet. o.w.T.
11.03.2018 14:56:45
Werner
AW: (Für mich) ist das kein Problem, Werner
11.03.2018 15:03:16
Gerd
Hallo Werner,
habe zwar ein L im Namen, aber deshalb protestiert einer mit anderem Vornamen. :-)
Gruß Gerd
AW: sorry Gerd, bin im falschen Zweig gelandet. o.w.T.
11.03.2018 15:43:38
Steve
Danke Gerd, mit CD("...") hatts geklappt.
hab mal meine Datei jetzt hochgeladen.
https://www.herber.de/bbs/user/120335.xlsm
Deine Idee mit dem Einlesen, des aktiven Monats in die Combobox ist gut. Hat aber den Nachteil, dass man in der Combobox nicht scrollen kann.
Habe jetzt wie gesagt 31 ToggleButtons als "Kalender" Beim Drücken des entsprechenden Buttons sollte eigentlich der Text in das Date_Lbl der UF geschrieben werden, doch irgendwie will der nicht ;(
Was habe ich vergessen?
Kann man deine Idee aufgreifen und die 31 Buttons mit den Tagen des aktuell angezeigten Monats belegen?
Anzeige
Dann nimm halt eine Listbox....
11.03.2018 16:57:58
Werner
Hallo Steve,
...die kannst du dann in der Größe so anpassen, dass der komplette Monat rein passt, ohne dass die Listbox vertikale oder horizontale Scrollbalken braucht. Zum Übertragen könntest du dann das Doppelklick-Ereignis der Listbox nutzen, Doppelklick auf den Datumseintrag überträgt in die Tabelle. So bräuchtest du noch nicht mal einen separaten Button zum Übertragen der Daten.
Hier mal ein Beispielcode:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim loTage As Long
If Me.AbwesenheitBox  "" Then
loTage = CDate(Me.ListBox1) - CDate(Cells(1, ActiveCell.Column))
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row, ActiveCell.Column + _
loTage)).Value = Me.AbwesenheitBox
Unload Me
Else
MsgBox "Bitte Abwesenheitsgrund wählen."
End If
End Sub
Private Sub UserForm_Initialize()
Dim loSpalte As Long
loSpalte = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To loSpalte
If Cells(1, i)  "" Then
Me.ListBox1.AddItem Cells(1, i)
End If
Next i
Me.AbwesenheitBox.AddItem "U"
Me.AbwesenheitBox.AddItem "UX"
Me.AbwesenheitBox.AddItem "916"
Me.AbwesenheitBox.AddItem "916X"
Me.AbwesenheitBox.AddItem "K"
Me.AbwesenheitBox.AddItem "LG"
'Voreinstellen der Listbox mit dem angeklickten Datum
UserForm1.ListBox1.ListIndex = ActiveCell.Column - 2
End Sub
Deine Beispielmappe kann ich mir im Moment nicht herunter laden, kann im Moment hier keine .xlsm herunter laden.
Gruß Werner
Anzeige
AW: Dann nimm halt eine Listbox....
11.03.2018 18:29:33
Steve
Danke euch für die Hilfe. Hab jetzt die Combobox einfach auf 31 Zeilen Länge in den Eigenschaften gesetzt. ;)
Gerne u. Danke für die Rückmeldung. o.w.T.
11.03.2018 18:42:00
Werner

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige