Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA Code

Forumthread: VBA Code

VBA Code
27.01.2026 15:37:30
PapaThomas
Hallo guten Tag
ich hoffe Ihr könnt mir helfen.
Ich habe Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
der funktionirt
und Private Sub Worksheet_Change(ByVal Target As Range)
der auch
nun will ich beide zusammenhaben.

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

' Überprüfen, ob die Spalte F (Spalten ) angeklickt wurde
If Not Intersect(Target, Range("f6:f17,m6:m17")) Is Nothing Then '--Aenderung in Range
' If Target.Column = 1 Then

' Verhindern, dass Excel in den Bearbeitungsmodus geht
Cancel = True
' Haken in die angeklickte Zelle setzen
Target.Value = Chr(252)
' Zelle links daneben (Spalte) löschen
' Target.Offset(0, -1).ClearContents '"00"
' Target.Offset(0, -2).ClearContents '"00"
'If Target = "B" Then Target.Offset(, -1) = "00"
Target.Offset(, -1) = "00"
Target.Offset(, -2) = "00"

' bis dahin alles super nun der code
' code aus Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("e6:e17")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Target.Column Mod 5 = 3 Then
Debug.Print Target.Column Mod 2
Target.Value = Target.Value + Cells(Target.Row, Target.Column + 1)
Else
Cells(Target.Row, Target.Column - 1) = Target.Value + Cells(Target.Row, Target.Column - 1)
End If
Application.EnableEvents = True
End If
End Sub
was mache ich da falsch ?
LG Thomas

Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code
27.01.2026 15:59:15
GerdL
Moin Thomas,

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


On Error GoTo fin

' Überprüfen, ob die Spalte F (Spalten ) angeklickt wurde
If Not Intersect(Target, Range("f6:f17,m6:m17")) Is Nothing Then '--Aenderung in Range
' If Target.Column = 1 Then

' Verhindern, dass Excel in den Bearbeitungsmodus geht
Cancel = True
' Haken in die angeklickte Zelle setzen
Target.Value = Chr(252)
' Zelle links daneben (Spalte) löschen
' Target.Offset(0, -1).ClearContents '"00"
' Target.Offset(0, -2).ClearContents '"00"
'If Target = "B" Then Target.Offset(, -1) = "00"
Target.Offset(, -1) = "00"
Target.Offset(, -2) = "00"




ElseIf Intersect(Target, Range("e6:e17,f6:F17,m6:m17")) Is Nothing Then
If Target.Value > "" Then
Cancel = True
Application.EnableEvents = False
If Target.Column Mod 5 = 3 Then
Debug.Print Target.Column Mod 2
Target.Value = Target.Value + Cells(Target.Row, Target.Column + 1)
Else
Cells(Target.Row, Target.Column - 1) = Target.Value + Cells(Target.Row, Target.Column - 1)
End If

End If
End If
fin:
Application.EnableEvents = True
End Sub


Gruß Gerd
Anzeige
AW: VBA Code
27.01.2026 17:22:55
schauan
Hallöchen,

nun will ich beide zusammenhaben.

nur mal prinzipiell - das beide Ereignisse nicht gleichzeitig wirken, weist Du aber? Wenn Du was händisch änderst, wird nichts gemacht, wenn Du Change entfallen lässt.

' Überprüfen, ob eine Zelle in f6:f17 oder m6:m17 angeklickt wurde

If Not Intersect(Target, Range("f6:f17,m6:m17")) Is Nothing Then '--Aenderung in Range
' Verhindern, dass Excel in den Bearbeitungsmodus geht
Cancel = True
' Haken in die angeklickte Zelle setzen
Target.Value = Chr(252)
'Zellinhalte in den beidne Zellen links daneben auf 0 setzen
Target.Offset(, -1) = "00"
Target.Offset(, -2) = "00
'wenn es Spalte e betrifft
If Intersect(Target, Range("f6:f17")) Then
'was auch immer
End If
End If


Dein
If Intersect(Target, Range("e6:e17")) Is Nothing Then Exit Sub

Application.EnableEvents = False
If Target.Column Mod 5 = 3 Then
Debug.Print Target.Column Mod 2
Target.Value = Target.Value + Cells(Target.Row, Target.Column + 1)
Else
Cells(Target.Row, Target.Column - 1) = Target.Value + Cells(Target.Row, Target.Column - 1)
End If


ist eigentlich Nonsens, denn Du verlässt Dein Change-Makro ja, wenn die Änderung nicht Spalte e betrifft ... Es kann also nur einen geben ;-)
Cells(Target.Row, Target.Column - 1) könntest Du auch wie zuvor mit Target.Offset(, -1) programmieren.
Ergebnis sollte dann immer der Wert von Spalte e sein - d und e setzt Du aber vorher auf 0. Du bräuchtest also nix zu berechnen und Dich über die 0 nicht wundern :-( ...

Logik ist oft alles - da braucht man (noch) keine Programmier-Kenntnisse ;-)

Anzeige
AW: VBA Code
27.01.2026 21:34:02
PapaThomas
hi danke erstmal
habe eine datei hochgeladen ich sehe sie nur nicht hat da was nicht geklappt ?
lg Thomas
AW: VBA Code
27.01.2026 21:44:53
daniel
du musst den Link, der dir angezeigt wird, kopieren und in deinen Beitrag einfügen.
das steht eigentlich alles da, wenn man lesen kann (und ein Forum ist ein Medium, bei dem man lesen können sollte)
Anzeige
AW: VBA Code
27.01.2026 23:12:04
daniel
so gut.
und jetzt vergiss mal VBA und Programmierung und erzählte uns einfach, was in der Datei passieren soll.
ich fang mal an mit dem ersten Satz, von dem was ich verstanden habe

wenn ich einen Doppelklick im Bereich E6:E17 mache, soll dort ein Häkchen erscheinen

so und jetzt bist du dran und erzähle uns, was du erreichen willst.
Denke nicht daran, wie es umgesetzt werden könnte, sondern erzähle uns einfach, was passieren soll, wenn du bestimmte Sachen machst.

Gruß Daniel
Anzeige
AW: VBA Code
27.01.2026 23:55:05
PapaThomas
Hallo
ok ich versuche mal es so zu schreiben wie ich es gern hätte
Klicke Doppelt auf "E6" dann lösche "D6" und "C6" und füge 00 ein.
Formatierung ist Währung.
angenommen in "C7" stehen 10,00€ und man gibt in "D7" 2 ein dann addiert VBA in "C7" =12,00€
auch in "D7" 1"dann addiert VBA IN "C7"=13,00€ u.s.w

nun klicke ich doppeltin "E7" und C7 und d7 sind 0,00€

ich bedanke mich bei Euch allen sehr
LGF Thomas
Anzeige
AW: VBA Code
28.01.2026 07:09:45
schauan
Hallöchen,

also, dann vergiss Deinen ursprünglichen Wunsch, beide Makros zusammenzufassen. Ich habe ja schon darauf hingewiesen, dass bei Eingaben nichts mehr passiert ...
Wenn die bisherigen Codes - also vor Deinem Versuch, diese zusammenzufassen - funktioniert haben (hinsichtlich der geposteten Zelladressierung eher nicht), dann lasse es, wie es ist.

Beim Worksheet_Change müsste das aber so aussehen / würde das reichen (um mal bisschen an Deinem Code zu bleiben):

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("d6:d17")) Is Nothing Then
Application.EnableEvents = False
Cells(Target.Row, Target.Column - 1) = Target.Value + Cells(Target.Row, Target.Column - 1)
Application.EnableEvents = True
End If
End Sub

Beim Before..., wie gesagt, stimmt die Adressierung auf f und m nicht, wenn es bei e passieren soll ...
Anzeige
AW: VBA Code
28.01.2026 12:43:42
Herbert Grom
Hallo Thomas,

soll der jeweilige Haken in Spalte E auch wieder mal entfernt werden und wenn ja, zu welchem Ereignis?

Servus
AW: VBA Code
28.01.2026 13:11:33
GerdL
Moin
Option Explicit


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

On Error GoTo fin
If Not Intersect(Target, Range("e6:e17")) Is Nothing Then
Application.EnableEvents = False
Cancel = True
Target.Offset(0, -2).Resize(1, 2) = CCur(0)
End If
fin:
Application.EnableEvents = True

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo fin
If Target.CountLarge > 1 Then Exit Sub
If Not Intersect(Target, Range("d6:d17")) Is Nothing Then
Application.EnableEvents = False
Range("C" & Target.Row) = CCur(Range("C" & Target.Row) + Target.Value)
End If
fin:
Application.EnableEvents = True

End Sub

Gruß Gerd
Anzeige
AW: VBA Code
28.01.2026 15:56:07
PapaThomas
Hey Super das klappt ja Super
wenn jetzt noch der Haken zu sehen währe ich hatte immer wingdings und Target.Value = Chr(252)
muss ich da was umstellen in dein Code ??
aber vielen Dank für deine Mühe (Eure )

LG Thomas
AW: VBA Code
28.01.2026 16:19:48
PapaThomas
hallo hab es hinbekommen
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo fin
If Not Intersect(Target, Range("e6:e17,m6:m17")) Is Nothing Then '--Aenderung in Range
Cancel = True
Target.Value = Chr(252)
Target.Offset(, -1) = "00"
Target.Offset(, -2) = "00"
End If
fin:
Application.EnableEvents = True
End Sub

Danke
LG Thomas
Anzeige
AW: VBA Code
28.01.2026 15:32:04
PapaThomas
Ja aber das würde reichen wenn ich die Reihe selektieren und entferne
LG Thomas
PS
Gehe später an PC und versuche den ode
Vielen vielen Dank schonmsl
AW: VBA Code
27.01.2026 16:07:54
PapaThomas
Hallo danke erstmal
keine Fehlermeldung aber er Addiert nicht von "e" auf "d"
LG Thomas

das hatte ich
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("E6:E17")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  If Target.Column Mod 5 = 3 Then
  Debug.Print Target.Column Mod 2
  Target.Value = Target.Value + Cells(Target.Row, Target.Column + 1)
  Else
  Cells(Target.Row, Target.Column - 1) = Target.Value + Cells(Target.Row, Target.Column - 1)
  End If
  Application.EnableEvents = True
End Sub
Anzeige
AW: VBA Code
27.01.2026 16:37:12
GerdL
Wie versehst du diese Codezeile?
If Target.Column Mod 5 = 3 Then
Sie trifft m.E. u.a. auf Spalte C zu, nicht auf D.
Gruß Gerd
AW: VBA Code
27.01.2026 17:36:40
PapaThomas
hi Gerd
jetzt bin ich total verwirrt
mit Private Sub Worksheet_Change(ByVal Target As Range)
klappte es
LG Thomas
A Monat
B Ist
C War
D Eingabe
E Für Doppelklick
in D gebe ich ein 1 ein und exel addiert e zu C =1
In D wieder 2 dann C=3
LG Thomas
Anzeige
AW: VBA Code
27.01.2026 19:44:12
schauan
Also, mit dem ursprünglichen "geteilten" Code passierte das, wenn Du auf f klickst:

Ablauf:
Du doppelklickst auf f, --> beforedoubleklick wird ausgelöst
es wird auf f oder m geprüft, --> ist true wegen f
e wird auf 0 gesetzt, --> change wird ausgelöst
es wird auf e geprüft, --> ist true da e gerade auf 0 geändert wurde
es wird auf Column Mod 5 = 3 geprüft, --> ist false da Rest von e (5) durch 5 = 0 ist
es wird gerechnet, --> d = e - 1 --> ergibt -1, da e 0 ist
es geht zurück nach beforedoubleklick
d wird auf 0 gesetzt
fertig

im ursprünglich zusammengesetzten Code passiert das, wenn Du auf e klickst:

Ablauf:
Du doppelklickst auf e, --> beforedoubleklick wird ausgelöst
es wird auf f oder m geprüft, --> ist false wegen e
fertig

Gerd hat Dir den richtigen Ansatz geliefert
Anmerkung / Korrekturen beim ElseIf:
1. da fehlt ein Not
2. da reicht die Prüfung auf e)

Ablauf:
Du doppelklickst auf e, --> beforedoubleklick wird ausgelöst
es wird auf f oder m geprüft, --> ist false wegen f
es wird auf e geprüft, --> ist true
es wird auf Column Mod 5 = 3 geprüft, --> ist false da Rest von e (5) durch 5 = 0 ist
es wird gerechnet, --> d = e - 1 --> ergibt ...
fertig

Hinweis: Wenn Du manuell was eingibst, dann passiert nun nichts mehr, da ja nur noch das Ereignis BeforeDoubleClick vorhanden ist.



Anzeige

Forumthreads zu verwandten Themen

Anzeige