Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1340to1344
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

Bewertungsformular, erwartete Eingabe 5,4,3,2,1

Bewertungsformular, erwartete Eingabe 5,4,3,2,1
12.12.2013 21:27:04
Peter
Guten Abend
Ich kreiere ein Bewertungsformular, in dem es verschiedene Bereiche mit je 5 aufeinander folgenden Zellen in einem Spaltenbereich hat.
Diese Bereiche sind jeweils benannt, z.B. "_xBereich1"
Je nach Beurteilung von bestimmten Aussagen, wird pro Bereich eine Beurteilung abgegeben (zwischen 1 und 5).
Wenn in der obersten Zelle ein Eintrag erfolgt, werden allfällig bestehende Einträge gelöscht und in der obersten Zelle eine 5 eingetragen.
Für die zweite, dritte, vierte und fünfte Zelle erfolgt der Eintrag sinngemäss (4 resp. 3 resp 2 resp 1).
Mit nachfolgendem Code erhalte ich das gewünschte Resultat. Da ich jedoch vielleicht 18 - 24 verschiedene 5-er Blöcke habe ("_xBereich2", "-xBereich3", etc), habe ich mich gefragt, ob der Code möglicherweise vereinfacht werden könnte. Ich sehe allerdings den Ansatz im Moment nicht dazu.
Vielleicht hat jemand eine Idee?
Gruss, Peter
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("_xBereich1")) Is Nothing Then  '"_xBereich1" = D1:D5
Else
Application.EnableEvents = False
Range("_xBereich1").ClearContents
If Target.Address = Range("_xBereich1")(1).Address Then Target.Value = 5
If Target.Address = Range("_xBereich1")(2).Address Then Target.Value = 4
If Target.Address = Range("_xBereich1")(3).Address Then Target.Value = 3
If Target.Address = Range("_xBereich1")(4).Address Then Target.Value = 2
If Target.Address = Range("_xBereich1")(5).Address Then Target.Value = 1
Application.EnableEvents = True
End If
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
benutze eine Variable für variable Bereiche
12.12.2013 23:31:05
Matthias
Hallo Peter
Bin nicht sicher ob ich Dich verstanden habe.
Hier mal ein Beispiel mit 3 Bereichen
https://www.herber.de/bbs/user/88496.xlsm
Gruß Matthias

aber was Du bezweckst, ist mir ein Rätsel
12.12.2013 23:38:53
Matthias
Hallo Peter
Ich nochmal
Ist übrigens "völlig wurscht" was Du in die Zelle einträgst
Sie wird immer mit 5 oder 4 oder 3 oder 2 oder 1 gefüllt. (von oben nach unten natürlich)
Aber was hat das Ganze für einen Hintergrund? Ich würde es gern verstehen.
Gruß Matthias

AW: aber was Du bezweckst, ist mir ein Rätsel
13.12.2013 09:19:36
Peter
Sali Matthias
Vielen Dank für deine Antwort. Das hat sehr geholfen, das ganze noch etwas weiter zu entwickeln.
Da die Bereiche auch in verschiedenen Sheets zu finden sein können, habe ich die Events auf Stufe Workbook definiert. Zudem gibt es mögilcherweise gewisse Bereiche (hier im Beispiel "_xBereich6"), die nicht definiert sind, weshalb ich in den Codes noch eine Abfrage eingebaut habe, die überprüft, ob der Bereich überhaupt existiert.
Anhand der hochgeladenen Datei ist ersichtlich, wozu ich das verwende. Es geht um einen Mitarbeiter-Beurteilungsbogen, bei denen verschiedene Fragen zu bewerten sind. Mein Code stellt nun sicher, dass pro Block nur eine Antwort gegeben werden kann (also nicht beispielsweise 3+4), zudem dass die Zahl im richtigen Feld steht und dass nicht anstelle einer Zahl (wird für eine Auswertung benötigt) zum Beispiel ein "X" eingetragen wird.
Vielen Dank und Gruss, Peter
https://www.herber.de/bbs/user/88499.xlsm

Anzeige
kleiner Hinweis noch ...
13.12.2013 10:42:51
Matthias
Hallo Peter
Wenn Du im WorkBook den Code ausführen lässt, solltest Du ihn im WorkSheet löschen
Außerdem empfehle ich Dir, immer wenn etwas auskommentiert ist dieses zu aktualisieren!
Ich meine das hier:
 For x = 1 To 25 '_xBereich(1) bis _xBereich(3)

Ist später einfacher zu lesen ;-)
Gruß Matthias

AW: kleiner Hinweis noch ...
13.12.2013 10:54:37
Peter
Sali Matthias
Danke für die Hinweise. Du hast vollkommen recht.
Gruss, Peter

Danke für Deine Rückmeldung ... owT
13.12.2013 10:56:48
Matthias

AW:Anschlussfrage
13.12.2013 11:18:45
Peter
Sali Matthias
Ich habe noch eine Verständnisfrage zur Zeile
If Not Intersect(ActiveCell, Range("_xBereich" & x)) Is Nothing Then
Ist eigentlich AktiveCell die Zeile, in welcher die Eingabe erfolgt oder die Zelle, welche aktiv ist, nachdem die Eingabe erfolgt ist (idR eine Zeile tiefer)? Und was ist der Unterschied, wenn ich anstelle ActiveCell Target verwenden würde?
Gruss, Peter
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = True
x = 0
For x = 1 To 25 '_xBereich(1) bis _xBereich(25)
If RangeExists("_xBEreich" & x) Then
If ActiveCell.Parent.Name = Range("_xBereich" & x).Parent.Name Then
If Not Intersect(Target, Range("_xBereich" & x)) Is Nothing Then
Exit For
End If
End If
End If
Next
End Sub

Anzeige
nimm -> Target !
13.12.2013 12:13:31
Matthias
Hallo Peter
Target, ist die den Code auslösende Zelle
ActiveCell kann auch eine andere Zelle sein.
Ist abhängig was Du in in den Optionen eingestellt hast.
Userbild
Gruß Matthias

AW: Danke! owT
13.12.2013 12:54:33
Peter

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige