10.03.2017, 12:19
Hallo Ralf,
dein Wunsch ist kein Thema, es war nur zwei Minuten Arbeit. Wenn man sein Programm kennt, und weiss wo man eingreifen muss, kannman es leicht veraendern. Ich habe jetzt auch die versprochene Prüfung mit eingebaut, falls mal jemand mehr als 10 Kunden in den ListBoxen anklickt. Dann wird die Eingabe verweigert. Teste es bitte selbst.
Zum technischen, damit du VBA lernst und versteht. Im Eigabe Makro gibt es zwei getrennte Bereiche. Einen für Einzelauswertung, einen für mehrfach Auswertung. Im Prinzip habe ich bei der mehrfach ASW nur den Befehl -neue Zeiele einfügen- direkt an den Anfang gestellt, und das weitere Einfügen in den For Next Schleifen gelöscht. So simpel wars.
Eine Erweiterung von Fahrern, Kunden und kunden-Spalten ist auch kein Thema. Sollte problemlos funktionieren. Sollte es noch Rückfragen geben stehe ich euch zur Verfügung. Mich freut ja selbst das es mir gelungen ist diese Aufgabe so gut zu lösen. Gibt mir nnere Befriedigung, wenn es gut klappt.
mfg Gast 123
dein Wunsch ist kein Thema, es war nur zwei Minuten Arbeit. Wenn man sein Programm kennt, und weiss wo man eingreifen muss, kannman es leicht veraendern. Ich habe jetzt auch die versprochene Prüfung mit eingebaut, falls mal jemand mehr als 10 Kunden in den ListBoxen anklickt. Dann wird die Eingabe verweigert. Teste es bitte selbst.
Zum technischen, damit du VBA lernst und versteht. Im Eigabe Makro gibt es zwei getrennte Bereiche. Einen für Einzelauswertung, einen für mehrfach Auswertung. Im Prinzip habe ich bei der mehrfach ASW nur den Befehl -neue Zeiele einfügen- direkt an den Anfang gestellt, und das weitere Einfügen in den For Next Schleifen gelöscht. So simpel wars.
Eine Erweiterung von Fahrern, Kunden und kunden-Spalten ist auch kein Thema. Sollte problemlos funktionieren. Sollte es noch Rückfragen geben stehe ich euch zur Verfügung. Mich freut ja selbst das es mir gelungen ist diese Aufgabe so gut zu lösen. Gibt mir nnere Befriedigung, wenn es gut klappt.
mfg Gast 123
Code:
Option Explicit '6.3.2017 Clever Forum Gast 123
'geändert: 9.3.2017 mehrfach Eingabe ohne neue Zeile
Dim EG As Worksheet, AC As Object
Dim LS As Worksheet, Rfd As Object
Dim Fahrer As String, Datum As Date
Dim Heute As Date
Sub Button_UF_zeigen()
UserForm1.Show
End Sub
'Neues Programm als Multiselect
'mit vier ListBoxen für Kunden
Sub Werte_eintragen_Multiselect()
Dim Kunde As String, ID2 As Integer
Dim ms3, ms4, ms5, ms6, ms, j, lz
Dim Indx1, Indx2, col, sp, rw, Txt
Set EG = Worksheets("Eingaben")
Set LS = Worksheets("Listen")
'On Error GoTo Fehler
With UserForm1
'Variable aus ListBox1 laden
Indx1 = .ListBox1.ListIndex
Indx2 = .ListBox2.ListIndex
Datum = CDate(.TextBox1)
sp = 3 '1.Spalte Kunde A-J
If Indx1 = -1 Then MsgBox "Kein Fahrer ausgewählt": Exit Sub
If Indx1 >= 0 Then Fahrer = .ListBox1.Value
If Indx2 >= 0 Then Txt = .ListBox2.Value
'Vorprüfung - Eingabe in Kunde A-J ??
col = EG.Range("C1").End(xlToRight).Column - 2
For Each AC In EG.Range("C1").Resize(1, col)
If Txt = "" Then ID2 = Empty: Exit For
If AC.Value = Txt Then ID2 = AC.Column
Next AC
'Vorprüfung - auf Multiselect Eingabe
For j = 0 To .ListBox3.ListCount - 1
If .ListBox3.Selected(j) = True Then ms3 = ms3 + 1: Txt = .ListBox3.List(j) & " /3-" & j
If .ListBox4.Selected(j) = True Then ms4 = ms4 + 1: Txt = .ListBox3.List(j) & " /4-" & j
If .ListBox5.Selected(j) = True Then ms5 = ms5 + 1: Txt = .ListBox3.List(j) & " /5-" & j
Next j
For j = 0 To .ListBox6.ListCount - 1
If .ListBox6.Selected(j) = True Then ms6 = ms6 + 1: Txt = .ListBox3.List(j) & " /6-" & j
Next j
ms = ms3 + ms4 + ms5 + ms6
'Aussprung wenn eine Eingabe fehlt
If ms = 0 Then MsgBox "Kein Kunde ausgewählt (ListBox 3-6)": Exit Sub
If ms = 1 And ID2 = 0 Then MsgBox "Kunde A-J nicht ausgewählt": Exit Sub
If ms > col Then MsgBox "Es wurden mehr als " & col & " Kunden angeklickt! Eingabe nicht zulässig!!": Exit Sub
'******************************************************
'Einzelauswertung über Kunde A-J
If ms = 1 And ID2 > 0 Then
'neue Zeile einfügen (verschieben)
Rows(2).EntireRow.Insert
Kunde = Left(Txt, InStr(Txt, "/") - 1)
'Datum, Kunde und Fahrer einfügen
Cells(2, 1).Value = Datum
Cells(2, 2).Value = Fahrer
Cells(2, ID2).Value = Kunde
'Kunde A-J Eintrag löschen
ID2 = .ListBox2.ListIndex
.ListBox2.RemoveItem ID2
.ListBox2.ListIndex = -1
On Error Resume Next
rw = Worksheets("Listen").Range("E2").End(xlDown).Row
'Kunden Eintrag löschen (LB 3-6)
For j = 0 To Int(rw / 4) + 4
If .ListBox3.Selected(j) = True Then .ListBox3.RemoveItem j: Exit Sub
If .ListBox4.Selected(j) = True Then .ListBox4.RemoveItem j: Exit Sub
If .ListBox5.Selected(j) = True Then .ListBox5.RemoveItem j: Exit Sub
If .ListBox6.Selected(j) = True Then .ListBox6.RemoveItem j: Exit Sub
Next j
Exit Sub 'ASW Ende
End If
'******************************************************
'neue Zeile einfügen
Rows(2).EntireRow.Insert
m3: 'Multiselect Auswertung über Fahrer
If ms3 > 0 Then
For j = 0 To .ListBox3.ListCount
If .ListBox3.Selected(j) = True Then
Kunde = .ListBox3.List(j)
'Datum, Kunde und Fahrer einfügen
Cells(2, 1).Value = Datum
Cells(2, 2).Value = Fahrer
Cells(2, sp).Value = Kunde
sp = sp + 1 'Kunde A-J
'Kunde + Kunde A-J löschen
.ListBox2.RemoveItem 0
.ListBox3.RemoveItem j
GoSub clrKunde 'Clr Kunde
ms3 = ms3 - 1: GoTo m3
End If
Next j
End If
m4: 'Multiselect ListBox4
If ms4 > 0 Then
For j = 0 To .ListBox4.ListCount
If .ListBox4.Selected(j) = True Then
Kunde = .ListBox4.List(j)
'Datum, Kunde und Fahrer einfügen
Cells(2, 1).Value = Datum
Cells(2, 2).Value = Fahrer
Cells(2, sp).Value = Kunde
sp = sp + 1 'Kunde A-J
'Kunde + Kunde A-J löschen
.ListBox2.RemoveItem 0
.ListBox4.RemoveItem j
GoSub clrKunde 'Clr Kunde
ms4 = ms4 - 1: GoTo m4
End If
Next j
End If
m5: 'Multiselect ListBox5
If ms5 > 0 Then
For j = 0 To .ListBox5.ListCount
If .ListBox5.Selected(j) = True Then
Kunde = .ListBox5.List(j)
'Datum, Kunde und Fahrer einfügen
Cells(2, 1).Value = Datum
Cells(2, 2).Value = Fahrer
Cells(2, sp).Value = Kunde
sp = sp + 1 'Kunde A-J
'Kunde + Kunde A-J löschen
.ListBox2.RemoveItem 0
.ListBox5.RemoveItem j
GoSub clrKunde 'Clr Kunde
ms5 = ms5 - 1: GoTo m5
End If
Next j
End If
m6: 'Multiselect ListBox6
If ms6 > 0 Then
For j = 0 To .ListBox6.ListCount
If .ListBox6.Selected(j) = True Then
Kunde = .ListBox6.List(j)
'Datum, Kunde und Fahrer einfügen
Cells(2, 1).Value = Datum
Cells(2, 2).Value = Fahrer
Cells(2, sp).Value = Kunde
sp = sp + 1 'Kunde A-J
'Kunde + Kunde A-J löschen
.ListBox2.RemoveItem 0
.ListBox6.RemoveItem j
GoSub clrKunde 'Clr Kunde
ms6 = ms6 - 1: GoTo m6
End If
Next j
End If
'Fahrer + ListBox Indexe löschen
'** .ListBox1.ListIndex = -1 'Fahrer
.ListBox1.RemoveItem Indx1 'Fahrer löschen
.ListBox1.ListIndex = -1 'Fahrer
.ListBox2.ListIndex = -1 'Kunde A-J
End With
Exit Sub
'******************************************************
clrKunde: 'Tages-Kunden löschen (noch oben verschieben)
'Kunden bei Datumwechsel kopieren (TagesKunden)
Set Rfd = LS.Columns("G:G").Find(What:=Kunde, After:=Range("G1"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext)
If Not Rfd Is Nothing Then Rfd.Delete Shift:=xlUp
Return
Fehler: MsgBox Error()
End Sub