Anzeige
Archiv - Navigation
1900to1904
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

UDF ergänzen

UDF ergänzen
01.10.2022 13:45:55
Paul
Hallo,
ich möchte gerne eine UDF für drei Spalten aktiv schalten. Das geht aber so in meiner u.g. UDF nicht. Da müssten wohl drei Bereiche vorgegeben werden.
Eine Fehlerbereinigung wäre schön.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim Zelle As Range
Application.ScreenUpdating = False
On Error Resume Next
If Not Intersect(Target, Range("D11:D350, H11:H350, J11:J350")) Is Nothing Then
Cancel = True
End If
For Each Zelle In Intersect(Target, Range("D11:D350, H11:H350, J11:J350"))
With Zelle
If .Font.ColorIndex = 1 Then
.Font.ColorIndex = 3
ElseIf .Font.ColorIndex = 3 Then
.Font.ColorIndex = 5
ElseIf .Font.ColorIndex = 5 Then
.Font.ColorIndex = 1
End If
End With
Next
Worksheets("Tabelle1").Range("$M$8").Calculate
Application.ScreenUpdating = True
End Sub
Freundliche Grüße
Paul

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UDF ergänzen
01.10.2022 14:04:48
onur
Und wo ist diese UDF?
AW: Makro ergänzen
01.10.2022 14:35:18
Paul
Ups, da habe ich einen großen Fehler gemacht. War gedanklich mit einer UDF beschäftigt, die ich vorher bearbeitet hatte. Ist hier ein normales Makro, das ich erweitern möchte. Sorry für meinen Fehler!
Grüße
Paul
AW: Makro ergänzen
01.10.2022 16:42:43
GerdL
Meinst du so?

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim Zelle As Range
Application.ScreenUpdating = False
If Not Intersect(Target, Range("D:D,H:H,J:J")) Is Nothing Then
Cancel = True
For Each Zelle In Intersect(Target, Range("D:D,H:H,J:J"))
With Zelle
If .Font.ColorIndex = 1 Then
.Font.ColorIndex = 3
ElseIf .Font.ColorIndex = 3 Then
.Font.ColorIndex = 5
ElseIf .Font.ColorIndex = 5 Then
.Font.ColorIndex = 1
End If
End With
Next
Application.EnableEvents = False
Worksheets("Tabelle1").Range("$M$8").Calculate
Application.EnableEvents = True
End If
End Sub
Gruß Gerd
Anzeige
AW: Makro ergänzen
01.10.2022 17:17:13
Paul
Hallo Gerd,
vielen Dank für Dein Makro. Leider funktioniert es nicht wie gewünscht. Seufz. Ich hatte es zuvor ähnlich versucht (nur den Range-Bereich eingegrenzt). Irgendwie hat Excel da ein Problem.
Viele Grüße
Paul
AW: Makro ergänzen
01.10.2022 17:25:05
onur
Das Problem mit Computern sitzt in der Regel VOR dem Computer.😄
AW: Makro ergänzen
01.10.2022 20:32:51
Paul
Hallo Onur,
vielen Dank für Deinen philosophischen Ansatz, dieser ist mit einem glasklaren "Jein" zu beantworten. :-) Leider hilft mir Dein Hinweis realiter nicht bei der Lösung meines Problems. Es scheint so zu sein, dass mein VBA-Code als Bereich nur eine einzige Spalte zulässt. Die logische Erweiterung auf mehr Spalten funktioniert mit meinem Code nicht mehr. Da ist guter Rat teuer. :-)
Viele Grüße
Paul
Anzeige
AW: Makro ergänzen
01.10.2022 20:42:18
onur
Da ich imm,ere noch nicht verstehe, was GENAU du meinst, kann ich dir nicht helfen. Es gibt fast nix, was man mit VBA nicht machen kann, aber dafür müsste man wissen, was du überhaupt mit "für drei Spalten aktiv schalten" meinst.
AW: Makro ergänzen
01.10.2022 22:00:34
Paul
Hallo Onur,
ich hab's jetzt hinbekommen. Mein Makro (bei Tabelle1 hinterlegt) und auch das von Gerd waren richtig:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim Zelle As Range
Application.ScreenUpdating = False
On Error Resume Next
If Not Intersect(Target, Range("D11:D350, H11:H350, J11:J350")) Is Nothing Then
Cancel = True
End If
For Each Zelle In Intersect(Target, Range("D11:D350, H11:H350, J11:J350"))
With Zelle
If .Font.ColorIndex = 1 Then
.Font.ColorIndex = 3
ElseIf .Font.ColorIndex = 3 Then
.Font.ColorIndex = 5
ElseIf .Font.ColorIndex = 5 Then
.Font.ColorIndex = 1
End If
End With
Next
Worksheets("Tabelle1").Range("$M$8").Calculate
Application.ScreenUpdating = True
' Aufrufen in Zelle M8 mit:
' =ohne_strichR($D$11:$D$350)+ohne_strichR($H$11:$H$350)+ohne_strichR($J$11:$J$350)
End Sub
=============
Zusätzlich notwendig ist eine UDF, die in einem Modul hinterlegt ist:

Public Function ohne_strichR(Bereich As Range)
Dim rngC As Range, dblZ As Double
Application.Volatile
For Each rngC In Bereich
If rngC.Font.Strikethrough = False And rngC.Font.ColorIndex = 3 Then
dblZ = dblZ + rngC.Value
End If
Next
ohne_strichR = dblZ
ActiveSheet.Calculate
End Function
=============================
Der Fehler lag bei mir bei dem falschen Aufruf der Funktion in Zelle M8 mit =ohne_strichR($D$11:$D$350, $H$11:$H$350, $J$11:$J$350)
Dieser Aufruf bringt das gewünschte und richtige Ergebnis:
=ohne_strichR($D$11:$D$350)+ohne_strichR($H$11:$H$350)+ohne_strichR($J$11:$J$350)
Also saß der Fehler doch vor dem Computer! :-)
Viele Grüße
Paul
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige