Clever-Excel-Forum

Normale Version: Formel ignorieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Nächster Versuch.
Hallöchen,

erstes Ergebnis - ich zitiere mich mal:
Zitat:Das Makro kommt in das Codemodul der Tabelle mit den Daten.

Du hast es in ein Modul geschrieben und zudem noch eine zusätzliche Sub-Zeile darüber.
Ich schaue dann mal noch nach der "Logik". Jetzt ist erst mal der Bäcker dran Smile
Hallöchen,

im Makro hast Du auch nicht alles übernommen. Hier nochmal der angepasste Code, der reagiert jetzt auf eine Änderung des Datums und nicht auf Änderung von A3. A3 ermittelst Du ja per Formel und wenn Du dort auf eine Änderung reagieren willst, müsste man einen anderen Ansatz und ein anderes Ereignis verwenden - z.B. Worksheet_Calculate. Das könnte sich bei größeren Datenmengen aber auf die Performance auswirken ...

Bei der Zufallszahl kannst Du nicht so einfach kontrollieren, was übernommen wird.
Ablauf: Bei Änderung des Datums in A1 wird zuerst die Zufallszahl neu berechnet. Dann wird die neu berechnete Zufallszahl nach A2 übernommen, wenn die Bedingung erfüllt ist. Anschließend wird nochmal eine Zufallszahl berechnet. In A2 steht also eine Zufallszahl, die Du nicht zu sehen bekommen hast.

Private Sub Worksheet_Change(ByVal Target As Range)
'Events deaktivieren 
Application.EnableEvents = False
  'Wenn die Adresse $A$3 ist, dann 
  If Target.Address = "$A$1" Then
    'Gehe bei Fehler zur Sprungmarke 
    On Error GoTo errorhandler
    'Wenn das Heute >= Datum von A1 dann uebernehme Wert aus A3 
    If Date >= Range("A1") Then Range("A2").Value = Range("A3").Value 'Target.Value 
  'Wenn die Adresse $A$3 ist, dann 
  End If
errorhandler:
'Events aktivieren 
Application.EnableEvents = True
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Sorry, aber ich verstehe rein gar nichts.

Welches Datum auch immer, es wird immer die Zufallszahl übernommen.

Und nein, ich übernehme in A2 die Daten aus einer externen Quelle, die hier durch A3 dargestellt ist.

Und dem Makro muss ich ja mit SUB einen Namen geben, sonst kann ich es gar nicht abspeichern, jedenfalls wüsste ich nicht, wie.

Vielleicht geht es einfacher so:

Lassen wir das Datum beiseite.

Ich übernehme wie bisher in A2 die Daten aus einer externen Quelle, die hier durch A3 als Zufallszahl dargestellt ist.

Sie sollen aber nur übernommen werden, wenn A2 noch leer ist, sonst den Inhalt belassen.


Vielen Dank und Gruss
Peter Pan
Hallöchen,

da steht doch eindeutig Sub dabei:

Private Sub Worksheet_Change(ByVal Target As Range)

und wo soll denn das Makro nun was eintragen oder auch nicht? In A1 steht das Datum, in A2 die Daten aus der externen Quelle, in A3 die Zufallszahl ???

In Deiner Datei war A3 die Quelle und ich verhindere mit meinem Makro unter einer Bedingung, dass der Inhalt von A3 in A2 übernommen wird.

Wenn Deine externen Daten nach A2 kommen, müsste ich wissen, wohin Du die anschließend überträgst, damit ich das verhindern kann.

Oder soll A2 einfach nur gelöscht werden, wenn das Datum nicht passt?
Hallöchen,

das behalten eines alten Wertes würde so funktionieren. Allerdings wird dieser Code nach dem Öffnen der Datei erst nach einer Änderung von A2 weitere Änderungen verhindern. Man müsste unter DieseArbeitsmappe noch einen zusätzlichen Code einfügen, der die Variable vA2 beim Öffnen füllt.
Code:
Public vA2
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$2" And vA2 = "" Then
  vA2 = Target.Value
Else
  Target.Value = vA2
End If
Application.EnableEvents = True
End Sub
Ja, da steht eindeutig Sub dabei. Und und wie bitte schön speichere ich das Makro?

Wenn ich auf "Makro" clicke, fragt mich Excel zuerst nach dem "Makronamen". Wenn ich "Einfrieren" eingebe und "Erstellen" clicke, schlägt es

Sub Einfrieren()

End Sub

vor. Ich nehme an, dazwischen muss das Makro eingefügt werden. Also zweimal Sub/zweimal End Sub??? Oder was denn nun?

Wenn ich die zwei Zeilen lösche, wird das Makro nicht gespeichert.

Danke und Gruss
Peter Pan
Hallo Peter,

Du wechselst in den VBA-Editor. Dort hast Du links einen Projektexplorer. Dort suchst Du z.B. die betreffende Tabelle raus und klickst da doppelt drauf - und rechts geht dann das "Makroblatt" der Tabelle auf. Dort fügst Du meinen Code ein.
Ok, vielen Dank, so gemacht.

Warum erscheint das Makro jetzt nicht in Entwicklertools > Makros? Weil es keinen Namen hat?

Und wie kann ich das zweite Makro einfügen? Wenn ich im Projektexplorer auf das Arbeitsblatt clicke, erscheint ja das erste Makro. Und einfach anhängen geht nicht, erzeugt "Mehrdeutiger Name: Worksheet_Change".

Wirklich nicht einfach.

Beste Grüsse
Peter Pan
Moin Peter!
Ich empfehle Dir dringend, Dir ein Buch über VBA-Grundlagen zu besorgen oder alternativ mal Online nach Tutorials zu suchen.
z.B. hier: 
Dateiupload bitte im Forum! So geht es: Klick mich!

(Kurzfassung mit lediglich 212 Seiten)

Nur ganz kurz, weil hiesige Antworten niemals Deine Vorarbeit ersetzen können:
Ereignismakros sind grundsätzlich Private, sie sollen ja automatisch ablaufen, deshalb sind sie auch nicht im Makro-Dialog zu sehen.
Außerdem werden hier Argumente an das Makro übergeben, diese Makros sind auch dann nicht im Dialog, selbst wenn sie Public deklariert sind (oder nur Sub Irgendwas(Arg1 As Long) genannt werden, denn Public ist der default)!

Ereignismakros sind vorgegeben, siehe:
https://www.online-excel.de/excel/singsel_vba.php?f=160
Man darf sie nicht umbenennen oder mehrfach einfügen!
Du musst dann halt den Übergabeparameter auswerten.

Gruß Ralf
Seiten: 1 2 3