Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1524to1528
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

Variable mit Bezug auf DropDownliste

Variable mit Bezug auf DropDownliste
27.11.2016 01:34:20
MarcChemistry
Hallo,
ich bräuchte Hilfe beim Lösen eines Makros.
Hier mein bisheriges Makro:
------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Const MyRng = "C2:C450"
' Dieser Bereich wird auf Änderungen geprüft
Dim Produkt As String
Produkt = Sheets("Produktliste").Range("A3:A50")
' In diesem Zellbereich befinden sich die Wörter der Dropdownliste
If Intersect(Target, Me.Range(MyRng)) Is Nothing Then Exit Sub
If IsEmpty(ActiveCell) Or ActiveCell = " " Then
ActiveCell.Offset(0, 1).Select
Selection = ""
End If
If ActiveCell = Produkt Then
ActiveCell.Offset(0, 1).Select
Selection = Format(Now, "dd.mm.yyyy")
End If
End Sub

------------------------------------------------------------------
Was soll passieren?
Wählt ein Mitarbeiter in einer Zelle der Spalte "C" ein Produkt aus einer DropDown-Liste aus, soll in der gleichen Zeile in Spalte "D" das heutige Datum eingetragen werden.
Wird die Zelle dann irgendwann wieder geleert bzw. im DropDown der "leere" Eintrag ausgewählt, soll das Datum aus Spalte "D" (sprich Nachbarzelle) wieder entfernt werden.
Die Liste der Wörter des DropDown-Menüs befinden sich auf einem eigenen Arbeitsplatz.
Ich schaffe es leider nicht die Variable "Produkt" so zu gestalten, dass sie für sämtliche Wörter aus der Wortliste steht.
Alternativ könnte das Makro auch so aufgebaut werden,
IF [Irgendein Text] Then [Datum] If [Zelle leer] Then [Zelle rechts daneben leeren].
Vielen Dank!!!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable mit Bezug auf DropDownliste
27.11.2016 06:52:21
fcs
Hallo Marc,
da der ausgewählte Wert keine Rolle spielt sollte es auch so funktionieren.
Die Zeilen mit "EnableEvents" verhindern, dass das Makro nochmals ausgeführt wird, wenn das Makro den Wert in der rechten Nachbarzelle ändert.
Private Sub Worksheet_Change(ByVal Target As Range)
Const MyRng = "C2:C450"
' Dieser Bereich wird auf Änderungen geprüft
If Not Intersect(Target, Me.Range(MyRng)) Is Nothing Then
Application.EnableEvents = False
Select Case Target.Value
Case "", " "
Target.Offset(0, 1).ClearContents
Case Else
Target.Offset(0, 1).Value = Date
End Select
Application.EnableEvents = True
End If
End Sub
Gruß
Franz
Anzeige
AW: Variable mit Bezug auf DropDownliste
27.11.2016 13:16:58
MarcChemistry
Hallo Franz,
dein Vorschlag funktioniert sehr gut für meine Zwecke, vielen Dank dafür!
Trotzdem hätte ich noch rein aus Neugier die Frage wie der VBA-Quelltext aussehen müsste für den Fall(Beispiel):
Spalte A enthält in Zeile 2 - 20 verschiedene Begriffe.
Benutzer trägt in Spalte B ein Begriff aus Spalte A ein,
ist dies ein Wort aus Zeile A2:A10 soll X passieren,
ist es ein Wort aus Zeile A11:A20 soll Y passieren...
AW: Variable mit Bezug auf DropDownliste
27.11.2016 16:25:46
Michael
Hi,
mit einer kleinen Erweiterung von Franz' Makro z.B.:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a
Const MyRng = "C2:C450"
' Dieser Bereich wird auf Änderungen geprüft
If Not Intersect(Target, Me.Range(MyRng)) Is Nothing Then
a = Range("A2:A20")
a = Application.Match(Target.Value, a, 0)
If IsNumeric(a) Then
If a 

Schöne Grüße,
Michael
Anzeige
AW: Variable mit Bezug auf DropDownliste
27.11.2016 16:51:23
fcs
Hi Michael, Hi Marc,
ein paar Korrekturen zuMichaels Vorschlag.
Es muss noch eine Prüfung rein, ob die geänderte Zelle (Target) in Spalte B ist.
Und es ist ratsam auch zu prüfen, ob nur 1 Zelle geändert wurde.
Ich bevorzuge bei der Prüfung eines Einzelwerts "Select Case" gegenüber IF-ElseIF-Else-Endif. Das ist meistens übersichtlicher und einfacher in der Handhabung.
Gruß
Franz
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a
Const MyRng = "C2:C450"
' Dieser Bereich wird auf Änderungen geprüft
'Eingaben in Spalte B überwachen
If Target.Column = 2 And Target.Cells.Count = 1 Then
'Prüfen in welcher Zeile der  Eingabewert im Vergleichs-Bereich steht
a = Application.Match(Target.Value, Me.Range("A2:A20"), 0)
If IsNumeric(a) Then
Select Case a
Case 1 To 9
MsgBox "im Bereich A2-A10"
Case Else
MsgBox "im Bereich ab A11"
End Select
Else
MsgBox "Wert nicht vorhanden"
End If
'Eingaben in MyRng überwachen
ElseIf Not Intersect(Target, Me.Range(MyRng)) Is Nothing Then
Application.EnableEvents = False
Select Case Target.Value
Case "", " "
Target.Offset(0, 1).ClearContents
Case Else
Target.Offset(0, 1).Value = Date
End Select
Application.EnableEvents = True
End If
End Sub

Anzeige
danke Franz,
28.11.2016 15:02:59
Michael
da ist mir mit "B" anscheinend was entgangen.
Schöne Grüße,
Michael

325 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige