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

Event-ProzedurHallo Excel-Gemeinde

Event-ProzedurHallo Excel-Gemeinde
22.03.2023 17:15:12
PeterF

Hallo Excel-Gemeinde,

mein Problem stellt für Euch mit Sicherheit keins dar.
Ich habe im Forum einige ähnliche Sachverhalte gefunden, leider ist es mir aber nicht gelungen,
etwas davon auf meine Bedürfnisse anzuwenden.

Ich habe in meiner Tabelle einen Zellbereich Range ("C10:H15").
Ich möchte, dass jeweils beim Anklicken einer der darin enthaltenen 36 Zellen eins von 36 Makros startet.

Über folgenden Ansatz bin ich noch nicht hinausgekommen :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zeile, Spalte
Dim KlickZell
Zeile = Target.Row
Spalte = Target.Column
If Spalte 3 Or Spalte > 8 Then Exit Sub
If Zeile 10 Or Zeile > 15 Then Exit Sub


Ich wäre sehr dankbar, wenn mir jemand einen Anschub gibt, damit ich den Code fertig schreiben kann.

Im Voraus schon sage ich danke und grüße die Community.

PeterF

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Event-ProzedurHallo Excel-Gemeinde
22.03.2023 17:27:21
Daniel
HI

als erstes musst du das Before_DoubleClick-Event verwenden.
das Change-Event reagiert nur, wenn du einen Zellinhalt änderst.

damit der Code dann nicht zu kompliziert wird, würde ich die 36 Makros in einem allgemeinen Modul erstellen und in den Makronamen die Zelladresse einbauen, dh die Makros heißten dann "Makro_C10"; "Makro_C11", ... , "Makro_H15"

dann reicht dir folgender Code im Modul des Tabellenblatts
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("C10:H15")) Is Nothing Then
    Cancel = True
    Application.Run "Makro_" & Target.Address(0, 0)
End If
End Sub
die Frage wäre, brauchst du wirklich 36 Makros?
das wäre nur der Fall, wenn jedes Makro einen komplett anderen Code hätte.
Sollten sich die Makros sehr änhlich sein, sollte man schauen, ob man nicht mit einem Marko auskommt und mit der Adresse der angeklickten Zelle die notwendigen Unterschiede "berechnet"

Gruß Daniel


Anzeige
AW: Event-ProzedurHallo Excel-Gemeinde
22.03.2023 17:44:55
GerdL
Hallo Peter!
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

' Makro1, Makro2, ... bis Makro36 jeweils von links nach rechts (zeilenorientiert)
If Not Intersect(Range("C10:H15"), Target) Is Nothing Then Cancel = True
If Cancel Then Application.Run "Makro" & (Target.Row - 9) * (Target.Column - 2)


End Sub
Gruß Gerd


AW: Event-ProzedurHallo Excel-Gemeinde
22.03.2023 22:33:35
PeterF
Hallo Gerd, hallo Daniel !

Danke für eure Vorschläge.

Ich habe mal den Code von Gerd probiert, weil der für mich etwas weniger schwer nachvollziehbar zu sein schien.
Dennoch hat er noch nicht funktioniert. Wahrscheinlich habe ich noch was übersehen.

So sieht das aus, was ich draus gemacht habe :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

' Makro1, Makro2, ... bis Makro36 jeweils von links nach rechts (zeilenorientiert)
ZelleC10 , ZelleD10, ZelleE10, ZelleF10, ZelleG10, ZelleH10, _
ZelleC11, ZelleD11, ZelleE11, ZelleF11, ZelleG11, ZelleH11, _
ZelleC12, ZelleD12, ZelleE12, ZelleF12, ZelleG12, ZelleH12, _
ZelleC13, ZelleD13, ZelleE13, ZelleF13, ZelleG13, ZelleH13, _
ZelleC14, ZelleD14, ZelleE14, ZelleF14, ZelleG14, ZelleH14, _
ZelleC15, ZelleD15, ZelleE15, ZelleF15, ZelleG15, ZelleH15

If Not Intersect(Range("C10:H15"), Target) Is Nothing Then Cancel = True
If Cancel Then Application.Run "Zelle" & (Target.Row - 9) * (Target.Column - 2)

End Sub

Könnt ihr mir noch mal auf die Sprünge helfen ?
Und nochmals danke !

mfg
PeterF


Anzeige
AW: Event-ProzedurHallo Excel-Gemeinde
23.03.2023 08:59:36
GerdL
Hallo Peter,

probier mal so. Die weiteren Makros musst du noch basteln.

'Ins Tabellenblattmodul
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

' Makro1, Makro2, ... bis Makro36 jeweils von links nach rechts (zeilenorientiert) doppelklicken
If Not Intersect(Range("C10:H15"), Target) Is Nothing Then Cancel = True
If Cancel Then Application.Run "Makro" & (Target.Row Mod 10) * 6 + (Target.Column - 2)

End Sub


'Makro1 bis Makro 36 in ein allgemeines Modul, z.B Modul1
Sub Makro1()
    MsgBox "C10"
End Sub

Sub Makro22()
MsgBox "F13"
End Sub

Sub Makro36()
    MsgBox "H15"
End Sub
Gruß Gerd


Anzeige
AW: Event-ProzedurHallo Excel-Gemeinde
23.03.2023 19:15:06
PeterF
Hallo Gerd,

ich habe mal eine vereinfachte Version meines Files hochgeladen : https://www.herber.de/bbs/user/158406.xls

Bitte probiere mal selbst, irgendwas scheint da noch nicht mit der Generierung der Makronamen zustimmen.
Run "Makro" & (Target.Row Mod 10) * 6 + (Target.Column - 2

Danke für deine Geduld.
Gruß, Peter


AW: Event-ProzedurHallo Excel-Gemeinde
23.03.2023 19:33:32
Daniel
naja, du hast dich zwar für Gerds version entschieden und sein DoubleClick-Makro verwendet, aber du hast die aufzurufenden Makros nach meinerm Schema benannt.
das passt natürlich nicht. Entweder Gerds Berechnunsmethode und Gerds Markonamen, oder meine Berechnungsmethode und meine Makronamen.
Mischen geht nicht!

außerdem schrieb ich, dass die Makros, die du über Application.run aufrufen willst, in ein allgemeines Modul müssen (Modul1)
ins Tabellenblattmodul (Tabelle1) darf nur das BeforeDoubleClick-Makro

Gruß Daniel


Anzeige
AW: Event-ProzedurHallo Excel-Gemeinde
23.03.2023 13:12:38
Daniel
Du musst die Makros im allgemeinen Modul so benennen, wie sie dieser Ausdruck "berechnet"
 "Zelle" & (Target.Row - 9) * (Target.Column - 2)
Wenn du hier "Zelle" schreibst, müssen die Makronamen auch mit "Zelle" beginnen.
Heißen deine Makros jedoch "Makro1", "Makro2" usw, musst du hier ebenfalls "Makro" schreiben.

Gruß Daniel



Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige