Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Textboxinhalt in mehrere Spalten

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 ;)
Anzeige

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.
Anzeige
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.
Anzeige
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 ;)
Anzeige
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
Anzeige
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?
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
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Textboxinhalt in mehrere Spalten übertragen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Arbeitsblatt oder benutze ein bestehendes.

  2. Aktiviere die Entwicklertools: Wenn diese nicht sichtbar sind, gehe zu Datei > Optionen > Menüband anpassen und aktiviere das Kästchen für "Entwicklertools".

  3. Füge ein neues Modul hinzu: Klicke auf "Visual Basic" in der Entwicklertools-Leiste, dann im Menü Einfügen > Modul.

  4. Füge den VBA-Code ein: Kopiere den folgenden Code in das Modul:

    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim RaBereich As Range
        Dim RaZelle As Range
        Set RaBereich = Range("A1:Ae50")
        Set RaBereich = Intersect(RaBereich, Target)
        If Not RaBereich Is Nothing Then
            For Each RaZelle In RaBereich
                With RaZelle
                    .Value = InputBox("Abwesenheitsgrund für Zelle " & RaZelle.Address(False, False))
                End With
            Next RaZelle
        End If
        Set RaBereich = Nothing
    End Sub
  5. Schließe den VBA-Editor und kehre zurück zu deiner Arbeitsmappe.

  6. Teste den Code: Klicke auf eine Zelle im Bereich A1:Ae50, um die Eingabeaufforderung zu sehen.


Häufige Fehler und Lösungen

  • Makro wird nicht ausgeführt: Stelle sicher, dass du die Datei als .xlsm speicherst, da .xlsx keine Makros unterstützt.
  • Makroübersicht öffnet sich: Überprüfe, ob du den Code im richtigen Modul eingefügt hast. Es sollte im Arbeitsblatt-Modul (nicht in einem allgemeinen Modul) sein.
  • InputBox wird nicht angezeigt: Prüfe, ob die Zelle im definierten Bereich A1:Ae50 ausgewählt ist.

Alternative Methoden

Eine alternative Methode ist die Verwendung einer UserForm zur Eingabe der Abwesenheitsgründe und der Dauer. Du kannst eine UserForm erstellen und die Eingaben über Steuerelemente wie TextBoxen und ComboBoxen erfassen.

Hier ist ein Beispielcode, um eine UserForm zu initialisieren:

Private Sub UserForm_Initialize()
    Me.AbwesenheitBox.AddItem "K" ' Krank
    Me.AbwesenheitBox.AddItem "U" ' Urlaub
    ' Füge weitere Optionen hinzu
End Sub

Praktische Beispiele

  1. Eintragen eines Abwesenheitsgrundes: Wenn du in eine Zelle klickst, öffnet sich ein Eingabefeld, in das du k für krank, u für Urlaub oder lg für Lehrgang eingeben kannst.

  2. Dauer der Abwesenheit: Erweitere den Code, um eine zweite Eingabeaufforderung für die Dauer zu integrieren. Der folgende Code kann dir dabei helfen:

    Dim Dauer As Long
    Dauer = Application.InputBox("Bitte Dauer eingeben", Type:=1)
    ActiveCell.Resize(1, Dauer).Value = Grund

Tipps für Profis

  • Benutze ComboBoxen: Anstelle von InputBoxen kannst du ComboBoxen verwenden, um eine Auswahl zu ermöglichen, was die Eingabefehler reduziert.
  • Datenvalidierung: Setze Datenvalidierung für die Zellen, um sicherzustellen, dass nur gültige Abwesenheitsgründe eingegeben werden.
  • Verwende ToggleButtons: Du kannst ToggleButtons für die Auswahl von Tagen im Monat verwenden, um die Benutzeroberfläche intuitiver zu gestalten.

FAQ: Häufige Fragen

1. Wo sollte ich den VBA-Code einfügen?
Der Code sollte in das Modul der betreffenden Arbeitsmappe eingefügt werden, nicht in ein allgemeines Modul.

2. Wie kann ich die UserForm anpassen?
Du kannst Steuerelemente wie TextBoxen, ComboBoxen und CommandButtons in der UserForm hinzufügen und deren Eigenschaften im Eigenschaftenfenster anpassen.

3. Kann ich den Code anpassen, um mehrere Zellen auf einmal zu bearbeiten?
Ja, du kannst den Code so anpassen, dass mehrere Zellen ausgewählt werden können, und die Eingaben entsprechend in alle ausgewählten Zellen übertragen werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige