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

Code ausführen?

Code ausführen?
25.11.2021 11:29:38
Andreas
Hi zusammen,
habe einen funktionierenden Code, also fast....
Mein Problem ist, dass die Werte, die den Code auslösen sollen ("U3:U37") per Formel ermittelt werden.
Der Code funktioniert aber nur, wenn ich die Werte manuell in ("U3:U37") eingebe.
Was muss ich ändern, dass der Code auch ausgeführt wird, wenn dort Werte über Formeln eingetragen werden?
Vielen Dank vorab
Gruß Andreas
Option Explicit

Private Sub Worksheet_Calculate()
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim RNG As Range
Dim St As Integer, En As Integer
Dim Anz As Variant, i As Integer
Dim Arr, MMax As Integer
Set RNG = Range("U3:U37") 'Bereich, wo die Eingabe überwacht wird
St = 24 'Start ab Spalte AD
En = 144 'Ende bei Spalte ES
MMax = 7 'maximaler Eingabewert
Arr = Array(0, 120, 60, 40, 30, 24, 20, 17) 'Datensatz Nr beginnen mit 0
If Not Intersect(RNG, Target) Is Nothing Then
'Prüfen auf Ganzzahl und  MMax, Target  Int(Target)
MsgBox "Falsche Eingabe"
Exit Sub
End Select
With Application
.ScreenUpdating = False 'verhindert das Bildschirmflackern
.DisplayAlerts = False ' Schaltet die Warnmeldung aus
End With
'Reset
Range(Cells(Target.Row, St), Cells(Target.Row, En)).UnMerge
Anz = Arr(Target)
For i = St To En Step Anz
If i + Anz > En Then Anz = En - i + 1
Cells(Target.Row, i).Resize(1, Anz).Merge
Next
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End If
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Code ausführen?
25.11.2021 11:34:07
Rudi
Hallo,
überwache die Bereiche, die die Berechnung auslösen.
Oder nutze das Calculate-Event
Gruß
Rudi
AW: Code ausführen?
25.11.2021 12:15:11
Andreas
Hi Rudi,
danke für deine Lösungsvorschläge.
den Bereich überwachen geht leider nicht, da die Werte Summen E14:J20 sind.
(Die Werte werden dann übergeben, wenn das Kontrollkästchen aktiviert wird, dann sollen die Zellen verbunden werden)
Hier mal meine Beispielmappe:
https://www.herber.de/bbs/user/149392.xlsm
Mit dem Calculate-Event habe ich es probiert, aber dann funktioniert der Code nicht mehr.
Kannst du mir sagen was ich umstellen muss, damit der dann wieder funktioniert?
Vielen Dank vorab
Gruß Andreas
Anzeige
AW: Code ausführen?
26.11.2021 10:53:45
Piet
Hallo Andreas
du hast die Lösung doch schon selbst beschrieben, siehst aber offenbar vor lauter Bäume deine Lösung nicht!
Dem Kontrollkästchen kannst du doch beim drücken einen Code zuweisen, mit Auswertung ob Value = 1 oder -41xx ist
mfg Piet
AW: Code ausführen?
26.11.2021 12:29:37
Andreas
Hi Piet,
Danke für deinen Beitrag.
Verstehe aber leider nicht ganz was du damit meinst: Value = 1 oder -41xx ist
Dem Kontrollkästchen habe ich ja schon die Zelle K12 zugeordnet und beim drücken werden die Werte ja auch schon an D2:D8 übermittelt.
Das Problem ist aber, dass mein Makro nicht ausgelöst wird. Das passiert nur wenn ich die Zahlen manuell in D2:D8 eintrage.
Glaube ich stehe wirklich tief im Wald :(
Hoffe du oder jemand anderes können mir weiterhelfen.
Gruß Andreas
Anzeige
AW: Code ausführen?
26.11.2021 12:44:56
Tobias
Hallo Andreas,
in dem Makro das du deinem Kontrollkästchen zuweist kannst du das Worksheet_Change selber aufrufen:

Sub Kontrollkästchen2_Klicken()
Worksheet_Change Range("B4")
End Sub
Davor müsste dann halt deine Eintragung in die Zellen erfolgen!
Schöne Grüße
Tobias
AW: Code ausführen?
26.11.2021 15:04:58
Andreas
Hallo Tobias,
vielen Dank für deinen Lösungsvorschlag, bekomme es aber leider nicht zum laufen.
Hier meine Testdatei: https://www.herber.de/bbs/user/149420.xlsm
Hab deinen Code in Modul1 eingetragen und den Zellenbereich auf D2:D8 geändert.
Hoffe das habe ich richtig verstanden? Dachte mir, dass der Bereich im Code vermerkt werden soll, in dem die Änderungen stattfinden.
Dem Kontrollkästchen hab ich das Makro zugeordnet. Beim starten kommt allerdings eine Fehlermeldung,
ihm gefällt das hier nicht: Sub Kontrollkästchen1_Klicken()
Fehler beim Kompilieren:
Sub oder Function nicht definiert.
Weiß nicht weiter =(
Gruß Andreas
Anzeige
AW: Code ausführen?
26.11.2021 16:50:07
Yal
Hallo Andreas,
Alle deine Formel in D2:D8 sind abhängig von K12, daher solltest Du nicht die -manuelle- Änderung der Eintrag in D2:D8 überwachen, sondern K12.
Da aber diese K12 direkt vom Kontrollkästchen1 könntest/solltest Du eher den Change auf diese Checkbox überwachen.
Am Ende ist eh gleich. Ich setze auf letzteres, da man entweder pro Zeile oder alle Zeilen abarbeiten kann.
Nur: was kann sich sonst ändern, was eine neue Berechnung verursachen könnte?
_ wenn in E14:J20 eine neue Werte reinkommt. Aber da sind nur Prüfung notwendig. Andere in K14 "=SUMME(E14:J14)" in "=GANZZAHL(SUMME(E14:J14))" und all Summen drunter auch. Dann hast Du eine Prüfung weniger.
_ wenn in B2:B9 eine neue Werte reinkommt, dann wird nur diese Zeile neu bemahlt.
Diese Werte sind wiederum durch Worksheet_Change abzufangen.
In der Codepane für "Tabelle2 (Tabelle3)" (Junge, benenne deine Blätter ordentlich. Man kann sich das Leben selber schwer machen :-)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Z As Range
Dim MMax As Integer
'Nur Prüfung: Sind alle Summen unter MMax?
If Not Intersect(Target, Range("E14:J20")) Then
MMax = wokrsheetfunction.Max(Range("C2:C8"))
For Each Z In Range("K14:K20").Cells
If Z.Value > MMax Then
MsgBox "in Zelle " & Z.Address & " ist eine Summe grösser als " & MMax, vbExclamation, "bitte korrigieren"
Exit Sub
End If
Next
End If
'Änderung in B2:B8, nur die geänderte(n) Zeile(n) neubemahlen
If Not Intersect(Target, Range("B2:B8")) Then
For Each Z In Target.Rows
If [Kontrollkästchen1].Value Then ZusammenhangendeZelle_bemahlen Z.Row
Next
End If
End Sub
In der Codepane "Modul1" oder irgendein anderen (löscht die anderen. Auch hier: Du willst Ordnung in deiner Werkstatt)

Sub Kontrollkästchen1_Klicken()
Dim Zeile As Integer
If [Kontrollkästchen1].Value Then
For Zeile = 2 To 8
ZusammenhangendeZelle_bemahlen Zeile
Next
End If
End Sub
Private Sub ZusammenhangendeZelle_bemahlen(Zeile As Long)
Dim Anz As Integer
Dim i As Integer
Const St = 5 'Start ab Spalte AD
Const En = 125 'Ende bei Spalte ES
Const MMax = 7 'maximaler Eingabewert
Application.ScreenUpdating = False 'verhindert das Bildschirmflackern
Application.DisplayAlerts = False ' Schaltet die Warnmeldung aus
With Worksheets("Tabelle3")
'Reset
.Range(.Cells(Zeile, St), .Cells(Zeile, En)).UnMerge
Anz = CInt(.Cells(Zeile, 2)) 'liest den Wert in Spalte B und macht daraus ein Ganzzahl
'Für alle Merge-Gruppen
For i = St To En Step Anz
If i + Anz > En Then Anz = En - i + 1 '
Es geht ohne zu sagen, aber vielleicht doch besser, wenn man es sagt, dass Kontrollkästchen1_Klicken das Ereignis-Prozedur, die Kontrollkästchen1 zugewiesen werden soll.
Aber ansonsten, Hut ab: viel Fleiss darin. Weiter so.
VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige