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

Datenüberprüfung - Liste - Doppelklick

Datenüberprüfung - Liste - Doppelklick
02.03.2013 21:43:30
Mat3004
Hallo,
ich kenne mich mittlerweile recht gut in Excel VBA aus, leider komme ich beim Folgenden nicht weiter, bzw. finde nichts darüber im Internet.
Ich möchte mit einem Doppelklick auf "A2" den nächsten Wert der Datenüberprüfungsliste erhalten. Bei B2 mit "Ja" / "Nein" wäre es einfach zu bewerkstelligen, bei "Text 1" bis "Text 8" komm ich nicht weiter bzw. fällt mir keine einfache Lösung ein, ohne erst den Bereich "D1:D8" zu durchsuchen.
Wie man den Doppelklick auf die Zelle abfängt ist mir klar:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Tabelle1.Range("A2")) Is Nothing Then
End If
End Sub
Hier mal ein Bild meines Beispiels:
Userbild

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenüberprüfung - Liste - Doppelklick
02.03.2013 22:04:36
Matze
Hallo Mat,
laut Bild benutzt du eine Datengültigkeit, (Liste D1:D8)
Du willst per Doppelklick in A2 den nächsten Wert, wenn ZB Text5 steht ,soll Text6 als Ergebnis kommen.
Nun meine Fragen dazu:
Wird in D1:D8 immer "Text" stehen oder nur "Zahlen"
Was soll passieren wenn Text8 steht? Ergebnis Text1 ?
Warum überhaupt erst ein Dropdown?
Als Tipp Vergleiche den .Value von A2 mit der .Row aus D1:D8 oder .Column 4 Spalte D
Next Row nach doppelklick weenn Bedingung erfüllt.
Matze

AW: Datenüberprüfung - Liste - Doppelklick
02.03.2013 22:12:35
Mat3004
Hallo Matze,
Wird in D1:D8 immer "Text" stehen oder nur "Zahlen"

Eigentlich immer ein Text, aber viele verschiedene. Meine Excelliste schaut natürlich ganz anders aus, hab diese nur für das Beispiel erstellt
Was soll passieren wenn Text8 steht? Ergebnis Text1 ?

Sollte wieder zu Text 1 springen
Als Tipp Vergleiche den .Value von A2 mit der .Row aus D1:D8 oder .Column 4 Spalte D
Next Row nach doppelklick weenn Bedingung erfüllt.

ja so hab ichs mir auch gedacht, bin nur auf der suche nach einer einfacheren Möglichkeit...

Anzeige
AW: Datenüberprüfung - Liste - Doppelklick
02.03.2013 23:24:35
Matze
Hallo Mat,
nun mit VBA Status "gut" sollte das aber zu schaffen sein.
Es gibt viele Wege um an das Ziel zu gelangen.
Hast du zumindest schon mal meinen Vorschlag umsetzen können,
dann können wir über einfachere Möglichkeiten reden.
Matze

AW: Datenüberprüfung - Liste - Doppelklick
03.03.2013 11:50:27
Mat3004
Ich hätte es schon hinbekommen, nur war ich auf der Suche nach einer Lösung wie Sie mir der Erich geliefert hat...

Vorschlag
03.03.2013 01:34:39
Erich
Hi ?,
wie wäre es damit?

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rngV As Range, pp As Long
If Not Intersect(Target, Tabelle1.Range("A2")) Is Nothing Then
Set rngV = Range(Mid(Target.Validation.Formula1, 2))
pp = Application.Match(Target, rngV, 0)
If pp = Application.CountA(rngV) Then pp = 1 Else pp = pp + 1
Target = rngV(pp)
Cancel = True
End If
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und: Schönen Sonntag!

Anzeige
AW: Vorschlag
03.03.2013 09:25:40
Ass
Hallo Erich,
tolle Idee!
Ich grüble eben darüber:
Warum Mid in
Set rngV = Range(Mid(Target.Validation.Formula1, 2))
Ist das 'nur so rein gerutscht', oder welche Bedeutung ?
Gruß
Rudi

AW: Vorschlag
03.03.2013 09:36:09
Matze
Hilfe per F1 kann man da aufrufen

ab 2. Stelle
03.03.2013 10:23:49
Erich
Hi Rudi,
.Validation.Formula1 beginnt mir einem Gleichheitszeichen. Das würde hier stören.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: ab 2. Stelle
03.03.2013 12:14:46
Ass
Hallo Erich,
aaah, jetzt versteh' ich, was du meinst.
A b e r
das "=" ist nur die Zuweisung.
In der Formula1-Eigenschaft steht nur der Wert, z.B. $B$4:$B$8.
Was du weg nimmst ist das erste $-Zeichen. Es geht also ohne MID
Danke für die Rückmeldung
Mir sind noch 2 Dinge aufgefallen.
1.
Für's Archiv müsste man eventuell noch Target="" abfangen.
2.
Ich weiß nicht, warum und ob es überhaupt stimmt. In meiner Hilfe steht, dass der Rückgebewert von Application.Match Double ist. Deshalb habe ich pp entsprechend deklariert.
Gruß
Rudi

Anzeige
ein Irrtum
03.03.2013 12:57:55
Erich
Hi Rudi,
mit dem Gleichheits- und dem Dollarzeichen vertust du dich ein wenig.
Mit dem Mid(..., 1) wird das Gleichheitszeichen eliminiert. Probier mal

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rngV As Range, pp As Long
If Not Intersect(Target, Tabelle1.Range("A2")) Is Nothing Then
MsgBox Mid(Target.Validation.Formula1, 1)
Set rngV = Range(Mid(Target.Validation.Formula1, 1))
MsgBox Mid(Target.Validation.Formula1, 2)
Set rngV = Range(Mid(Target.Validation.Formula1, 2))
MsgBox Mid(Target.Validation.Formula1, 3)
Set rngV = Range(Mid(Target.Validation.Formula1, 3))
pp = Application.Match(Target, rngV, 0)
If pp = Application.CountA(rngV) Then pp = 1 Else pp = pp + 1
Target = rngV(pp)
Cancel = True
End If
End Sub
Wenn es stimmte, was du schreibst, müsste es bei Mid(..., 3) einen Fehler geben.
Tatsächlich tritt ein Fehler erst ab Mid(..., 4) auf.
zu 1.: Für's Archiv müsste man eventuell noch Target="" abfangen.
Ja, aber Du als Fragesteller müsstest sagen, was dann geschehen soll. :-)
zu 2.
Der Rückgebewert von Application.Match ist Double - ja, das steht in der Hilfe.
Aber Long reicht auch aus. Wird eben konvertiert.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: ein Irrtum
03.03.2013 16:19:29
Ass
Hallo Erich,
danke für die Rückmeldung. Da hast du vollkommen Recht!
Set rngV = Range(Target.Validation.Formula1)
funktioniert aber auch, was mich auf die falsche Spur gelenkt hat.
Und nun frage ich mich, warum es funktioniert. Excel 'denkt' da wohl wieder im Hintergrund mit, indem es das "=" automatisch entfernt(so meine Theorie). Denn:
Dim R as Range
set r=range(=$D$4) beispielsweise wird schon von Debugger nicht zugelassen.
Ein Widerspruch, den ich mir nicht erklären kann.
Gruß
Rudi

Kleine Korrektur
03.03.2013 17:03:54
Erich
Hi Rudi,
set r = range(=$D$4) ist syntaktisch falsch, wird deshalb vom VBA-Editor (nicht vom Debugger) gar nicht erst
zur Eingabe zugelassen. Richtig dagegen ist z. B.
set r = range("=$D$4")
Sub Toyota()
Dim ttt As String
MsgBox "=b1:b2" & "  /  " & Range("=b1:b2").Address
ttt = "=$B$1:$B$2"
MsgBox Mid(ttt, 1) & "  /  " & Range(Mid(ttt, 1)).Address
MsgBox Mid(ttt, 2) & "  /  " & Range(Mid(ttt, 2)).Address
MsgBox Mid(ttt, 3) & "  /  " & Range(Mid(ttt, 3)).Address
' Fehlerhaft: (so weit reicht Toyota dann doch nicht...)
' MsgBox Mid(ttt, 4) & "  /  " & Range(Mid(ttt, 4)).Address (Laufzeitfehler)
' MsgBox Range(=x1:x2).Address                              (Syntaxfehler)
End Sub
Ja, XL (eher VBA) entfernt das "=" automatisch. Kann sein, dass so ein Ausdruck
"=b1:b2" ausgewertet wird zu
"b1:b2"
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Kleine Korrektur
03.03.2013 18:22:34
Ass
Hallo Erich,
die Schreibweise set r = range("=$D$4")schien mir suspekt,
sieht man auch sonst nicht.
Aber man lernt nie aus.
Danke und einen schönen Restsonntag
Gruß
Rudi

Warum denn, kommt doch auch bei ...
03.03.2013 18:57:30
Luc:-?
…deiner Methode raus, RudiAss,
oder ist dir das gar nicht klar…? ;->
Natürlich sieht man das nicht, weil es ja unsinnig wäre. Das hat Erich ja erklärt.
Aber man könnte durchaus Range("D4") sehen!
Gruß Luc :-?

AW: Vorschlag 2
03.03.2013 09:35:27
Matze
Hi Erich,
auf das Beispiel bezogen und mit defenierten Bereich
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Zelle As Range
If Not Intersect(Target, [A2]) Is Nothing Then
Set Zelle = Range("D1:D8").Find(Range("A2"))
If Not Zelle Is Nothing Then
Range("A2").Value = Cells(Zelle.Row + 1, 4)
If Zelle.Row >= 8 Then
Range("A2").Value = Cells(1, 4)
End If
End If
Cancel = True
End If
End Sub
Ich wollte mal ein Ergebnis von Ihm sehen, betreffen meinen Vorschlag mit den Row´s
Nunja Allen einen schönen Sonntag.Hier im Kasseler Raum "schneit" es gerade, wo ist die angekündigte "Sonne"?
Matze

Anzeige
OT @ Matze
03.03.2013 09:41:24
hary
Moin Matze
"Hier im Kasseler Raum "schneit" es gerade, wo ist die angekündigte "Sonne"?"
Hier, Raum Braunschweig. LOL
gruss hary

zum Vorschlag 2
03.03.2013 10:41:18
Erich
Hi Matze,
ein paar Anmerkungen zu deinem Vorschlag:
Wenn du die Methode "Find" aufrufst, solltest du immer die Parameter angeben,
bei denen Excel sich sonst nach den Werten letzten Suchvorgang richtet.
Du weißt hier z. B. nicht, ob zuletzt (von VBA oder Excel aus) nach xlPart oder xlWhole gesucht wurde; das kann aber entscheidend sein. Schau mal in die VBA-Find-Hilfe.
Range("A2").Value = Cells(Zelle.Row + 1, 4)
ist nur sinnvoll für Zelle.Row < 8, gehörte also besser in den Else-Zweig des folgenden If.
"Zelle" würde ich als Variablennamen vermeiden, denn ZELLE ist eine XL-Funktion.
Für deinen wie meinen Vorschlag gilt: Wir gehen davon aus, dass der Wert von A2 in der Liste gefunden wird.
Der Fall "Not Found" sollte hier auch behandelt werden.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und: Schönen Sonntag!
P.S.: Rows bitte ohne Apostroph schreiben - sowohl auf deutsch als auch auf englisch.
(vgl. http://www.apostrophitis.de/apostrophen.htm ) ;-)

Anzeige
@Erich,....
03.03.2013 11:17:14
Matze
Moin Moin,
so muss das sein, perfekte Erklärung.
Das ist ein Grund warum ich dieses Forum so liebe,...
Ich hatte das vorhin mit dem Else Zweig versucht,aber ich scheitere irgendwie an dem Aufbau.
Mir war durchaus schon bewusst das ich hier eine 2te "Wennfrage" gar nicht brauche, wenn es die Möglichkeit des "Sonst" noch gibt.
Ich hab ja auch geschrieben das es viele Wege zum Ziel gibt:
If WorksheetFunction.CountIf(Range("D1:D8"), [A2]) > 0 Then
Matze

AW: Vorschlag 2
03.03.2013 11:55:44
Mat3004
Das "Problem" bei diesem Vorschlag ist, dass ich zusätzlich den Bereich angeben muss der durchsucht werden muss, deshalb wollte ich eine Lösung die davon unabhängig ist.
Trotzdem vielen Dank für deine Hilfe!
Super Forum, gestern Nacht angemeldet und am nächsten Tag hab ich schon die Lösung für mein Problem.
Schönen Sonntag
Mfg Mat3004

Anzeige
AW: Vorschlag
03.03.2013 11:48:57
Mat3004
Danke Erich, genau sowas hab ich gesucht, funktioniert ohne Probleme!
Schönen Sonntag!
Mfg Mat 3004

Rückfrage,...
03.03.2013 12:33:32
Matze
Du hast das vermutlich überlesen was Erich schon geschrieben hat,
"Was ist wenn in A2 kein Wert/Text steht" ,dann ein Doppelklick und
du bekommst eine Fehlermeldung, oder?
Matze

AW: Rückfrage,...
03.03.2013 12:55:50
Mat3004
Doch hab ich. Hab einfach eine If-Schleife am Anfang eingefügt die prüft ob Target.value = "" --> Msgbox "Bitte wählen Sie einen Wert aus". Ist zwar nicht perfekt, reicht für meinen Fall aber, da im Normalfall immer was in der Zelle steht.

AW: Rückfrage,...
03.03.2013 13:16:59
Matze
Hallo,
benutz den Code: Wenn Zelle leer ist kommt danach die oberste Zelle
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Bereich As Range
Dim loletzte As Long
loletzte = Cells(Rows.Count, 4).End(xlUp).Row - 1
Set Bereich = Range("D1:D" & loletzte).Find(Range("A2"))'Lookin:=?
If Not Intersect(Target, [A2]) Is Nothing Then
If Not Bereich Is Nothing Then
[A2].Value = Cells(Bereich.Row + 1, 4)
Else: [A2].Value = Cells(1, 4)
End If
Cancel = True
End If
End Sub
Matze
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige