Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Eintrag über UF in Monatsblätter vornehmen

Eintrag über UF in Monatsblätter vornehmen
06.01.2017 19:43:54
Wolfgang
Hallo,
das beigefügte Tool fand ich unter Recherche als Adressverwaltung.
Ich würde es gerne für Veranstaltungsplanungen umfunktionieren und habe daher die Überschriften entsprechend geändert. Wäre denkbar, über das UF die jeweiligen Monatsblätter anzusteuern und je nach Beginndatum den Eintrag bzw. die Änderung/Löschung unter der entsprechenden Monatstabelle vorzunehmen (z.B. Beginn 12.07.17, dann Eintrag ab A2 folgende in Tabelle Juli vorzunehmen)? Wäre weiterhin anstelle der Textbox7 eine Listbox (Pulldown) denkbar?
Danke schon jetzt für die Rückmeldungen. Gruß - Wolfgang
https://www.herber.de/bbs/user/110383.xls

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eintrag über UF in Monatsblätter vornehmen
07.01.2017 11:09:29
fcs
Hallo Wolfgang,
die Verteilung der Daten auf die Monate würde umfangreiche Änderungen erfordern. Insbesondere Änderungen am Von-Datum mit Monatswechsel wären kompliziert abzuarbeiten.
Die Verschiebung von "Ergebnis" nach Spalte I und Auswahl per Combobox hab ich dir eingebaut.
https://www.herber.de/bbs/user/110390.xls
Es wird einfacher, wenn man die Daten im Blatt "Daten" als Tabelle verwaltet.
Dann kann man in einer weitern Spalte den Monat per Formel berechnen und es sind Auswertungen oder auch einfaches Filtern möglich.
LG
Franz
Anzeige
AW: Eintrag über UF in Monatsblätter vornehmen
07.01.2017 11:53:36
Wolfgang
Hallo Franz,
herzlichen Dank für Deine schnelle Rückmeldung und Aufbereitung des Tools. Ich finde die Änderung sehr gelungen und Du hast Recht, es ist auch überschaubarer.
Ich habe noch eine Kleinigkeit versucht, die mir nicht gelingt. Wäre denkbar, die Spalte J entsprechend der Monate zu sortieren? - dann wäre es für mich perfekt, weil ich dann ja auf einer Tabelle bereits den Überblick in den Monaten hätte. Wenn ich das Tabellenblatt markiere, ist die Schaltfläche Sortieren nicht mehr aktiv.
Danke Dir schon jetzt wieder.
Herzliche Grüße - Wolfgang
habe noch mit Makrorekorder getestet - so OK?
08.01.2017 11:59:32
Wolfgang
Hallo Franz,
ich habe mir eine zweite Mappe mit den zu sortierenden Spalten nachgebaut und konnte die Sortierung somit mit Makrorekorder aufzeichnen. Funktioniert, so meine ich, auch soweit. Wärst Du so nett, noch vielleicht einen Blick darauf zu werfen, ob Dir da noch etwas auffällt bzw. noch verändert werden könnte/müsste?
Ich würde den Code für die Sortierung nach Eintrag von neuen Daten laufen lassen.
Danke Dir schon jetzt recht herzlich!
Gruß - Wolfgang
Code mit Makrorekorder
Sub Datum_sortieren()
Application.ScreenUpdating = False
Cells.Select
ActiveWorkbook.Worksheets("Daten").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Daten").Sort.SortFields.Add Key:=Range("F2:F260"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Daten").Sort.SortFields.Add Key:=Range("H2:H260"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Daten").Sort
.SetRange Range("A1:J260")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Application.ScreenUpdating = True
End Sub
Bisherige Codes aus dem UF
Option Explicit
Dim rngFind As Range
Dim rngID As Range
Dim Bol As Boolean
Private Sub CommandButton3_Click()
Dim letzte_Zeile As Long
With Worksheets("Daten")
' Datensatz neu speichern
letzte_Zeile = .Range("A65536").End(xlUp).Offset(1, 0).Row
.Cells(letzte_Zeile, 1) = .Cells(letzte_Zeile - 1, 1) + 1
.Cells(letzte_Zeile, 2) = TextBox1.Text
.Cells(letzte_Zeile, 3) = ComboBox1.Text
.Cells(letzte_Zeile, 4) = TextBox2
.Cells(letzte_Zeile, 5) = TextBox3.Text
If Me.TextBox4 = "" Then
.Cells(letzte_Zeile, 6).ClearContents
Else
.Cells(letzte_Zeile, 6) = CDate(TextBox4.Text)
End If
If Me.TextBox5 = "" Then
.Cells(letzte_Zeile, 7).ClearContents
Else
.Cells(letzte_Zeile, 7) = CDate(TextBox5.Text)
End If
.Cells(letzte_Zeile, 8) = TextBox6.Text
.Cells(letzte_Zeile, 9) = Me.ComboBox2.Text
End With
ClearAll
UserForm_Initialize
ComboBox1.SetFocus
Unload Me
End Sub
Private Sub CommandButton5_Click()
If ComboBox1.Text = "" Then
'UserForm schließen
Bol = False
Unload UserForm1
Exit Sub
Else
If MsgBox("Den angezeigten Datensatz speichern ?", 36, "Sicherheitsabfrage") = vbYes Then
CommandButton3_Click
End If
Bol = False
Unload UserForm1
End If
End Sub
Private Sub CommandButton2_Click()
' Datensatz ändern
If Not rngID Is Nothing Then
'rngID.Value = ComboBox1.Text
rngID.Offset(0, 1).Value = TextBox1.Text
rngID.Offset(0, 3).Value = TextBox2.Text
rngID.Offset(0, 4).Value = TextBox3.Text
If Me.TextBox4 = "" Then
rngID.Offset(0, 5).ClearContents
Else
rngID.Offset(0, 5).Value = CDate(TextBox4.Text)
End If
If Me.TextBox5 = "" Then
rngID.Offset(0, 6).ClearContents
Else
rngID.Offset(0, 6).Value = CDate(TextBox5.Text)
End If
rngID.Offset(0, 7).Value = TextBox6.Text
rngID.Offset(0, 8).Value = Me.ComboBox2.Text
Else
rngFind.Value = ComboBox1.Text
rngFind.Offset(0, -1).Value = TextBox1.Text
rngFind.Offset(0, 1).Value = TextBox2.Text
rngFind.Offset(0, 2).Value = TextBox3.Text
If Me.TextBox4 = "" Then
rngFind.Offset(0, 3).ClearContents
Else
rngFind.Offset(0, 3).Value = CDate(TextBox4.Text)
End If
If Me.TextBox5 = "" Then
rngFind.Offset(0, 4).ClearContents
Else
rngFind.Offset(0, 4).Value = CDate(TextBox5.Text)
End If
rngFind.Offset(0, 5).Value = TextBox6.Text
rngFind.Offset(0, 6).Value = Me.ComboBox2.Text
End If
ClearAll
UserForm_Initialize
ComboBox1.SetFocus
Unload Me
End Sub
Private Sub CommandButton4_Click()
Dim a As Integer
Dim msg
Dim letzte_Zeile As Long
'Datensatz löschen
letzte_Zeile = Worksheets("Daten").Range("A65536").End(xlUp).Row
If Not rngID Is Nothing Then
a = rngID + 1
Else
a = Range(rngFind.Address).Row
End If
If MsgBox(" Datensatz wirklich löschen ?", vbYesNo) = vbNo Then
Exit Sub
Else
Range(Cells(a, "B"), Cells(a, "J")).Delete shift:=xlShiftUp
Cells(letzte_Zeile, "A").ClearContents
End If
ClearAll
UserForm_Initialize
ComboBox1.SetFocus
Unload Me
End Sub
Private Sub CommandButton1_Click()
Dim sSearch As String
Dim firstAddress
Dim i As Integer
'Datensatz suchen
If ComboBox1.Text = "" Then
MsgBox "Geben Sie bitte einen Suchbegriff ein !"
Exit Sub
Else
sSearch = ComboBox1.Text
Set rngFind = Columns("C:C").Find(what:=sSearch, lookat:=xlWhole, LookIn:=xlValues)
If rngFind Is Nothing Then
If MsgBox("Dieser Datensatz existiert noch nicht !" & vbCrLf & vbCrLf & "  Möchten Sie ihn  _
jetzt neu anlegen ?", vbQuestion + vbYesNo, "Nachfragen") = vbNo Then
ComboBox1.Text = ""
ComboBox1.SetFocus
Exit Sub
Else
ComboBox1.SetFocus
End If
Else
i = 0
firstAddress = rngFind.Address
Do
ListBox1.AddItem
ListBox1.List(i, 0) = rngFind.Offset(0, -2).Value
ListBox1.List(i, 1) = rngFind.Offset(0, -1).Value
ListBox1.List(i, 2) = rngFind
ListBox1.List(i, 3) = rngFind.Offset(0, 1).Value
ListBox1.List(i, 4) = rngFind.Offset(0, 2).Value
ListBox1.List(i, 5) = rngFind.Offset(0, 3).Value
ListBox1.List(i, 6) = rngFind.Offset(0, 4).Value
Set rngFind = Columns("C:C").FindNext(rngFind)
i = i + 1
Loop While Not rngFind Is Nothing And rngFind.Address  firstAddress
End If
End If
If ListBox1.ListCount = 1 Then
TextBox1.Text = rngFind.Offset(0, -1).Value
TextBox2.Text = rngFind.Offset(0, 1).Value
TextBox3.Text = rngFind.Offset(0, 2).Value
TextBox4.Text = rngFind.Offset(0, 3).Text
TextBox5.Text = rngFind.Offset(0, 4).Text
TextBox6.Text = rngFind.Offset(0, 5).Value
Me.ComboBox2.Text = rngFind.Offset(0, 6).Text
ListBox1.Clear
End If
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim sSearch As String
If ListBox1.ListCount > 1 Then
sSearch = ListBox1.List(ListBox1.ListIndex, 0)
Set rngID = Columns("A:A").Find(what:=sSearch, lookat:=xlWhole, LookIn:=xlValues)
If Not rngID Is Nothing Then
TextBox1.Text = rngID.Offset(0, 1).Value
TextBox2.Text = rngID.Offset(0, 3).Value
TextBox3.Text = rngID.Offset(0, 4).Value
TextBox4.Text = rngID.Offset(0, 5).Text
TextBox5.Text = rngID.Offset(0, 6).Text
TextBox6.Text = rngID.Offset(0, 7).Value
Me.ComboBox2.Text = rngID.Offset(0, 8).Text
End If
sSearch = ""
End If
ListBox1.Clear
End Sub
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox4
If .Text = "" Then
ElseIf IsDate(.Text) Then
.Value = Format(CDate(.Text), "DD.MM.YYYY")
Else
Cancel = True
MsgBox "Eingabe für ""von"" ist kein gültiges Datum"
End If
End With
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox5
If .Text = "" Then
ElseIf IsDate(.Text) Then
.Value = Format(CDate(.Text), "DD.MM.YYYY")
Else
Cancel = True
MsgBox "Eingabe für ""bis"" ist kein gültiges Datum"
End If
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Fehlermeldung, wenn versucht wird, die UserForm über das
'Schließenkreuz oben rechts zu schließen
If CloseMode = 0 Then
'    MsgBox "Bitte verlassen Sie die Eingabemaske nur mit der Schaltfläche - Beenden.", _
'        vbOKOnly + vbInformation, "Bitte Schaltfläche betätigen."
Cancel = 1
End If
End Sub
Public Sub UserForm_Initialize()
Dim a As Integer
Dim az As Integer                           ' Zähler für Arrayfelder
Dim i As Integer                            ' Schleifenzähler (Arrays füllen)
Dim arr() As Variant                        ' Array für Datenausgabe
a = Sheets("Daten").Range("A65536").End(xlUp).Row
' Array dimensionieren
ReDim arr(a, 0)                         ' Feld nach Listenlänge festlegen
' Arrays mit Werten füllen
For i = 2 To UBound(arr)                                                ' laufe von Zeile 2 bis  _
Tabellenende
If Application.WorksheetFunction.CountIf(Range(Cells(i, 1), _
Cells(1, 3)), Cells(i, 3).Value) = 1 Then                           ' wenn Wert das erste  _
Mal vorkommt, dann ...
arr(az, 0) = Cells(i, 3).Value                                  ' ... Name in Array  _
einlesen
az = az + 1                                                     ' ... Zähler für  _
Arrayfeld plus 1
End If                                                              ' Ende der Auswertung
Next i
ComboBox1.List = arr
With Me.ComboBox2
.AddItem ""
.AddItem "zugewiesen"
.AddItem "Teilnahme"
.AddItem "zurückgezogen"
End With
With ListBox2
.ColumnCount = 2
.ColumnWidths = "75pt; 50pt"
.List = Sheets("Termine").Range("A1:B14").Value
End With
'ListBox2.List = Sheets("Termine").Range("A1:B14").Value
End Sub
Private Sub UserForm_Activate()
'Datum und Uhrzeit anzeigen
Label9.Caption = Date
Bol = True
Do Until Bol = False
DoEvents
Label10.Caption = Time
Loop
End Sub
Sub ClearAll()
Dim C As Integer
On Error Resume Next
ComboBox1.Text = ""
For C = 1 To 6
Me.Controls("TextBox" & CStr(C)).Text = ""
Next C
Me.ComboBox2 = ""
End Sub

Anzeige
AW: habe noch mit Makrorekorder getestet - so OK?
08.01.2017 17:01:33
fcs
Hallo Wolfgang,
in meiner Beispieldatei werden die Daten in einer Tabelle/Listobject verwaltet.
Da muss das Makro zum Sortieren etwas anders aussehen.

Sub Sortieren_Monat_Name()
' Sortieren_Monat_Name Makro
ActiveWorkbook.Worksheets("Daten").Activate
ActiveWorkbook.Worksheets("Daten").ListObjects(1).Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("Daten").ListObjects(1).Sort.SortFields.Add _
Key:=Range("J2"), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:= _
"Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember" _
, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Daten").ListObjects(1).Sort.SortFields.Add _
Key:=Range("C2"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Daten").ListObjects(1).Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Wenn du kein Tabellenobjekt verwendest, dann sollte dein aufgezeichnetes Makro funktionieren.
LG
Franz
Anzeige
Danke, Franz - welche Rolle spielt ID?
08.01.2017 19:15:32
Wolfgang
Hallo Franz,
tausend Dank für Deine erneute Rückmeldung und Überlassung des Codes für die Sortierung. Ich habe meinen Code entfernt und Deinen Code eingebaut, da ich weiß, dass Du da der absolute Fachmann bist. Der Code macht auch das, was ich mir vorgestellt hatte.
Hast Du evtl. noch eine Idee, wofür in Spalte A ID gut ist? Ich hatte die Spalte ausgeblendet, da funktioniert dann die Suche bei mehreren gleichen Namen nicht mehr. Bei Eingabe von neuen Datensätzen wird aktuell fortlaufend die Nummer 6 vergeben. Generell stört mich das nicht, ich weiß allerdings nicht, welche Auswirkungen das auf die anderen Codes haben könnte? - Hättest Du da evtl. noch eine Idee?
Danke nochmals recht herzlich!
Gruß - Wolfgang
Anzeige
AW: Danke, Franz - welche Rolle spielt ID?
09.01.2017 04:23:03
fcs
Hallo Wolfgang,
die ID ist erforderlich um Datensätze eindeutig zu kennzeichnen.
Da die Daten jetzt unterschiedlich sortiert wird muss die ID für neue Datensätze jetzt allerdings anders berechnet werden.
fogendes Makro im Userform musst du anpassen:
Private Sub CommandButton3_Click()
Dim letzte_Zeile As Long
With Worksheets("Daten")
' Datensatz neu speichern
letzte_Zeile = .Range("A65536").End(xlUp).Offset(1, 0).Row
.Cells(letzte_Zeile, 1) = Application.WorksheetFunction.Max(.Range("A:A")) + 1
.Cells(letzte_Zeile, 2) = TextBox1.Text
.Cells(letzte_Zeile, 3) = ComboBox1.Text
.Cells(letzte_Zeile, 4) = TextBox2
.Cells(letzte_Zeile, 5) = TextBox3.Text
If Me.TextBox4 = "" Then
.Cells(letzte_Zeile, 6).ClearContents
Else
.Cells(letzte_Zeile, 6) = CDate(TextBox4.Text)
End If
If Me.TextBox5 = "" Then
.Cells(letzte_Zeile, 7).ClearContents
Else
.Cells(letzte_Zeile, 7) = CDate(TextBox5.Text)
End If
.Cells(letzte_Zeile, 8) = TextBox6.Text
.Cells(letzte_Zeile, 9) = Me.ComboBox2.Text
End With
ClearAll
UserForm_Initialize
ComboBox1.SetFocus
End Sub

LG
Franz
Anzeige
Tausend Dank, Franz - läuft fast alles rund!
10.01.2017 06:25:15
Wolfgang
Hallo Franz,
erneut herzlichen Dank und für die Anpassung des Codes. Ich habe ihn gestern eingefügt und das Tool getestet. Es läuft nun fast alles rund. Eine Kleinigkeit, die aber nicht so wichtig ist, ist, dass bei einer leeren Tabelle das Tabellenformat eine blaugefärbte Zeile beibehält, der erste Datensatz dann allerdings eine Zeile darunter eingefügt wird und das Tabellenmuster nicht funktioniert. Ich habe hilfsweise einen Datensatz nicht gelöscht und in Zeile 2 stehen lassen. Dann bucht das Tool auch mit dem Format weiter. Wenn Du da evtl. noch einen Hinweis hättest?
Gruß - Wolfgng
Anzeige
AW: Tausend Dank, Franz - läuft fast alles rund!
10.01.2017 19:44:32
fcs
Hallo Wolfgang,
...Ich habe hilfsweise einen Datensatz nicht gelöscht und in Zeile 2 stehen lassen....
Für die korrekte Funktion des Userforms in der gewählten Formist das auch korrekt so. Die "leere" Datentabelle sollte in Spalte A die Startnummer für die ID enthalten, in Spalte C einen Dummy-Namen und in Spalte J die Formel für die Monatsberechnung.
LG
Franz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige