VBA, zellen gegenseitig sich ändern wenn wert in anderen sich ändert.
#11
Hi,

ich weiß genau was Du möchtest - und zwar vom ersten Wort an.
Und ich weiß aber auch, dass Dein Wunsch grober Unfug ist.
Ich kann Dir das programmieren (und andere sicher auch) - aber für Unfug hab ich keine Lust - zumindest so lange, wie Du a) nicht sagst, weshalb die vorgeschlagene Lösung für Dich nicht in Frage kommt und b) Deinen Ton änderst.
[-] Folgende(r) 1 Nutzer sagt Danke an {Boris} für diesen Beitrag:
  • schauan
Antworten Top
#12
Hallöchen,

Deinen Elan, uns mal zu erklären, warum die Verwendung einer Hilfszelle zur Eingabe nicht möglich ist, geht eigentlich gegen Null.

Lösungsansatz:
Schreibe erst mal die Formel in die Zelle D34. Den Code dazu kannst Du aufzeichnen und später verwenden.

Du musst dann prüfen, ob ein handgeschriebener Wert durch die Formel ersetzt werden soll. Da Dein Benutzer jederzeit etwas reinschreiben kann, egal, wie die anderen Bedingungen aussehen, wird nach einer erneuten Berechnung wohl eine Entscheidung des Benutzers erforderlich sein, ob der eingetragene Wert durch die Formel ersetzt werden soll.
Um eine Automatik zu erreichen, müsstest Du voraussichtlich das Calculate-Ereignis nutzen.
Oder Du tust auf Eingaben in allen Bezugszellen der für die Berechnung verwendeten Formeln prüfen (durch das Change-Ereignis).
Allerdings könnte zuweilen Dein handgeschriebener Wert dann wohl schneller wieder weg sein als Du denkst - insbesondere beim Calculate-Ereignis. Oder Du baust dort eine Sicherheitsabfrage ein, wo der Benutzer per MsgBox eingreifen kann.

Solltest Du keine Formel in D34 wünschen, kannst Du auch
1) die Formel als "Nebenrechnung" in eine andere Zelle platzieren und per VBA dann zwischen dem handgeschriebenen Wert und dem Formelergebnis wechseln
2) die Formel im VBA verwenden - geht bei vielen / einfacheren Berechnungen mit Application.Evaluate("Formel") (Ersatzweise auch mit [Formel] )
3) die Berechnung im VBA mit If usw. nachbilden
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Niko
Antworten Top
#13
(21.04.2024, 21:57)Niko schrieb: Alles andere ist milde ausgedrückt nicht hilfreich.
Hier mal ein nicht hilfreicher Ansatz, wie schon von anderen genannt.
Arbeitsblatt mit dem Namen 'Tabelle1'
ABCDEF
1FormelEingabe
257353333
3573535

ZelleFormel
D2=A2*B2
F2=WENN(E2="";D2;E2)
D3=A3*B3
F3=WENN(E3="";D3;E3)
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.2) erstellt. ©Gerd alias Bamberg
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • {Boris}
Antworten Top
#14
Hallo

es ist kein Problem eine VBA Lösung zu finden, aber die Logik der Auswertung darf sich nicht selbst "ins Knie schiessen"!
Ich habe deinen Code mal so erweitert, das bei Union auch die Zellle rngE27 ausgewertet wird.  Die Mitarbeiter Eingabe.


Die IF Then Auswertung habe ich geändert, s. unten.  Am Anfang wird jetzt zuerst immer der Wert 39,00 in D34 gesetzt.
Wenn aber in den Zellen D42 oder E42 Werte stehen, werden diese Werte IMMER nach D34 übertragen!  Logisch!
Ob das richtig oder falsch ist kann ich nicht beurteilen, ich habe diese Datei ja nicht aufgebaut.

Beim testen schrieb ich einmal versehentlich einen Wert in Zelle E42, als sie zufällig nicht gesperrt war.
Der bleibt dann ewig drin stehen, weil das Makro diese Zelle auf Protected setzt, nicht von Hand änderbar.

Der Text "Name" steht in der Zelle D27, Eingabe in E27.  Und in Zelle D40, DropDown Liste in E40.  
Warum ist oben KEINE DropDown Liste??  Nur unten??

Ich weiss nicht ob dir der geänderte VBA Code weiterhilft.  Leider funktionieren einige Formeln bei mir nicht richtig.
Ich habe nur eine alte Excel 2003 Version, musste die Datei mit LibreOffice konvertieren. Da huddelt es manchmal.

mfg Gast 123

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet, pass As String
    Dim rngD42 As Range, rngE42 As Range, rngD34 As Range, rngE40 As Range, rngE27 As Range
   
    ' Set the worksheet
    Set ws = ThisWorkbook.Sheets("Startseite")
    ' Set password
    pass = "ask2019"
   
    ' Check if the changed cell is within the specified range
    Set rngD42 = ws.Range("D42")   '**  Formel
    Set rngE42 = ws.Range("E42")   '**  Formelergebnis
    Set rngD34 = ws.Range("D34")   'Arbeitszeit wöchentlich
    Set rngE40 = ws.Range("E40")   '** -Name Eingabe
    Set rngE27 = ws.Range("E27")   'Name Eingabe ganz oben
   
    If Not Intersect(Target, Union(rngE27, rngD42, rngE42, rngE40)) Is Nothing Then

        ' Unprotect the worksheet
        ws.Unprotect pass
        On Error GoTo ende
        Application.EnableEvents = False
       
        ' Check conditions and update D34 accordingly
        rngD34.Value = "39"
        If rngD42 <> "" Then rngD34.Value = rngD42.Value
        If rngE42 <> "" Then rngD34.Value = rngE42.Value
        If rngE40 <> "" Then rngE27.Value = rngE40.Value
       
        ' Protect the worksheet
ende:   Application.EnableEvents = True
        ws.Protect pass
    End If
End Sub

Nachtrag   bei der Auswertung bitte beachten welche IF Then Anweisung den Vorrang hat!
                 Es ist schon ein Unterschied ob man rngD42 oder rngE42 zuerst auswertet!!
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Niko
Antworten Top
#15
Möchte mich bei dir Bedanken.
Es ist die IF Auswertung an der ich gescheitert war, nun sehe ich auch den unterschied.
Es ist sehr nah an das was ich erreichen möchte.
 
Nochmals vielen Dank 78 .
 
Was die Kommentare von so manchen angeht, kann ich nur sagen das diese unangemessen und ungeeignet sind, um eine anderen Benutzer zu unterstützen...schade.
 
Ein Dankeschön, auch an “schauan“ das er sich am Ende doch das ganze angesehen hat und sehr gute denk stützen gegeben hat, allerdings vermisse den Code dafür Shy . Nichtdestodrotz diese haben mich Gedanklich weitergeholfen.

Am Ende möchte ich trotzdem alle Danken die mir, Ihre Zeit und Geduld gegeben haben.

Wünsche noch einen angenehmen Wochenanfang.
Antworten Top
#16
Hi Niko,

ich habe mir jetzt lange überlegt, ob ich überhaupt antworten soll. Dein striktes Ablehnen von Formelvorschlägen ohne jede weitere Begründung zeugt von ziemlicher Beratungsresistenz. Nicht ohne Grund raten dir praktische alle Helfer zu dieser Lösung. Ich übrigens auch!!!

Aber so ein Ungetüm von umständlichen Code kann ich mir nicht ansehen. Statt ständig die Ausgangszelen zu Prüfen, reicht es doch D34 zu überwachen. Wenn der Benutzer etwas reinschreibt bleibt dies stehen. Wird der Inhalt gelöscht, so wird automatisch die Formel reingeschrieben. Fertig.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D34")) Is Nothing Then
    With Range("D34")
        If .Value = "" Then
            On Error Resume Next
            Application.EnableEvents = False
            .FormulaLocal = "=WENN(D42="""";39;WENN(E42<>"""";E42;39))"
            Application.EnableEvents = True
            On Error GoTo 0
        End If
    End With
End If
End Sub

Theoretisch könnte man die Formel auch irgendwo aufs Blatt schreiben (dann am besten mit $-Zeichen die Zellen absolut setzen) und in die Zelle kopieren, dann könnte man die Formel ohne VBA-Kenntnisse jederzeit leicht anpassen.

Und nochmals: Der Weg über eine Hilfszelle für die Händische Eingabe, ist der Weg auf dem so eine Problemstellung am Besten gelöst wird.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 2 Nutzer sagen Danke an HKindler für diesen Beitrag:
  • Rudi'S, Niko
Antworten Top
#17
Hallo Helmut, 
danke für deine Zeit und Mühe, auch wenn dies nicht bei mir funktionieren mag.

Danke auch für deine Meinung. Ich bin jedoch der Ansicht, dass wir alle unterschiedliche Kenntnisse und Perspektiven haben, die es zu respektieren gilt.
Es tut mir leid, wenn es Missverständnisse gab. 
Ich bin offen für konstruktive Kritik und Feedback, jedoch schätze ich einen respektvollen Umgang miteinander.
Glaube das ich in mein alter (65) dies unterscheiden zu können.

Bin immer bereit zu lernen und mich zu verbessern. 
Wenn es konkrete Vorschläge gibt, bin ich gerne bereit, sie anzuhören, anzunehmen und darüber zu diskutieren.
Habe nach einem Lösungsvorschlag in dieser Richtung gefragt und nicht in einer Formel (mir ist bewusst, dass es ein unterschied sein mag) 
weil es da wo ich es letztendlich einbinden möchte, den Unterschied machen wird.
 
Danke nochmals für Zeit und Mühe.
Antworten Top
#18
Hi Niko,
(22.04.2024, 16:21)Niko schrieb: danke für deine Zeit und Mühe, auch wenn dies nicht bei mir funktionieren mag.
Was genau funktioniert nicht? Ich habe meine Code an deiner Beispieldatei getestet und bei mir funktioniert er.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#19
Hallo, danke nochmals und vorab für die Rückantwort.

Anbei die Datei mit den vorgegeben code. 
.xlsm   EAuGFB_TEST.xlsm (Größe: 20,11 KB / Downloads: 2)
Wenn ich die werte ändere in E und D42, erscheinen diese nicht in D34.

Wenn es bei dir funktioniert, mache ich wahrscheinlich irgendwo ein Fehler ohne ihn nachverfolgen zu können.

Thx again Smile
Antworten Top
#20
Hi,

Drücke bitte nach dem Einfügen des Codes einmalig die Entf-Taste während Zelle D34 selektiert ist. Damit wird nämlich die Formel dort eingetragen. Und nur dann kann die Zelle auf Eingaben in D42 und E42 reagieren.  21
Sobald du irgendwas in D34 eingibst, wird dies übernommen. Wenn wieder die Formel gelten soll, dann musst du D34 löschen.

PS: habe deine Datei nicht runter geladen, da ich gerade keinen Zugriff auf Excel habe.
Übrigens: wenn man solche VBA-Spielereien nutzen will, sollte man wenigstens einen vorgegebenen Code verstehen können, sonst wirst du damit nicht glücklich werden.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste