199 Aufrufe
Gefragt in Tabellenkalkulation von piedro Einsteiger_in (63 Punkte)

Guten Morgen zusammen,

ich hätte gerne eure Hilfe in Anspruch genommen.

Konkret hab ich folgendes Problem, ich möchte die automatische

Berechnung in einem Worksheet_Change(ByVal Target As Range)

Ereignis abhängig machen vom Wert einer Zelle und zwar:

Wenn das Datum in Zelle G17 <heute()  dann Exit Sub 

ansonsten

wenn das Datum in Zelle G17 >=heute() dann soll der Code

weiterberechnen z.B. so   (hoffe ich hab das gut geschrieben)

Private Sub Worksheet_Change(ByVal Target As Range) 

ab hier bräuchte ich diese Bedingung also:

wenn G17<heute dann Exit Sub

ansonsten

wenn G17 >=heute() Then

"Set Target = Application.Intersect(Target, Range("B1:C1"))"

Dim intZaehler As Integer, s As String
If [B1].Value >= 1 And [C1].Value = 1 Then                       
        Shapes("Blume").Visible = True                                         
For intZaehler = 1 To 3                                         
        Shapes("Blume").Visible = False                      
        Application.Wait Now + TimeValue("00:00:01")
        Shapes("Blume").Visible = True
        Application.Wait Now + TimeValue("00:00:01")            
Next intZaehler                                                
End If       

If [B1].Value = 0 And [C1].Value = 0 Then                    
        Shapes("Blume").Visible = False                       
End If 

End Sub

Anmerkung: In den Zellen B1 und C1 sind Formeln hinterlegt 

für die weitere Berechnung

vielen Dank für eure Hilfe

Gruß Peter                                              

4 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

das kannst du so lösen (wenn ich dich richtig verstanden habe):

Private Sub Worksheet_Change(ByVal Target As Range)

Dim intZaehler As Integer
Dim s As String

'nur ausführen, wenn B1 oder C1 geändert werden
If Not Intersect(Target, Range("B1:C1")) Is Nothing Then
   'Falls Datum in G7 kleiner als aktuelles Datum, dann Makro beenden
   If Range("G7") < Date Then Exit Sub
   'ab hier dann dein Code
   If Range("B1").Value >= 1 And Range("C1").Value = 1 Then
     Shapes("Blume").Visible = True
     For intZaehler = 1 To 3
        Shapes("Blume").Visible = False
        Application.Wait Now + TimeValue("00:00:01")
        Shapes("Blume").Visible = True
        Application.Wait Now + TimeValue("00:00:01")
      Next intZaehler
   End If

   If Range("B1").Value = 0 And Range("C1").Value = 0 Then Shapes("Blume").Visible = False
    
End If

End Sub

 

Gruß

M.O.

0 Punkte
Beantwortet von piedro Einsteiger_in (63 Punkte)

Hallo M.O

vielen Dank für deine Antwort aber irgendwie 

funktioniert der Code nicht, außerdem muss die

Bedingung nicht unbedingt von B1 oder C1

abhängig sein.

 Ich werde jetzt meine Daten so ändern damit

die Bedingung NUR von Zelle G17 abhängig ist.

 Wie müßte ich den Code schreiben damit das

Worksheet_Calculate Ereignis  im Tabellencode  NUR 

dann ausgeführt wird wenn Zelle G17  >= heute()  ist ? 

Danach kommt  die Fortsetzung meines Codes.

Und wenn Zelle G17 <heute  dann  Exit Sub.

Wichtig auch: Zelle G17 ist eine verbundene Zelle 

mit 3 Zellen (G17:I17). (Habe das vergessen zu sagen)

Mein Ziel ist das die Berechnung nicht dauernd 

durchgeführt wird während meiner Arbeit am PC

sondern nur dann wenn das Datum größer oder

gleich heute() ist und solange in dieser Zelle ein

altes Datum steht soll KEINE Berechnung

durchgeführt werden.

vielen Dank nochmals

Gruß Peter

+1 Punkt
Beantwortet von m-o Profi (22.7k Punkte)
ausgewählt von piedro
 
Beste Antwort

Hallo Peter,

auf verbundene Zellen solltest du so weit wie möglich verzichten, da sie bei Codes oft Probleme verursachen kann.wink

Aber trotzdem sollte der Code so funktionieren:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim intZaehler As Integer

'Falls Datum in G17 kleiner als aktuelles Datum, dann Makro beenden
If Range("G17") < Date Then Exit Sub
   
'ab hier dann dein Code
If Range("B1").Value >= 1 And Range("C1").Value = 1 Then
     Shapes("Blume").Visible = True
     For intZaehler = 1 To 3
        Shapes("Blume").Visible = False
        Application.Wait Now + TimeValue("00:00:01")
        Shapes("Blume").Visible = True
        Application.Wait Now + TimeValue("00:00:01")
      Next intZaehler
End If

If Range("B1").Value = 0 And Range("C1").Value = 0 Then Shapes("Blume").Visible = False
   
End Sub

Gruß

M.O.

0 Punkte
Beantwortet von piedro Einsteiger_in (63 Punkte)
Guten Morgen M.O.

vielen vielen Dank, ich freue mich sehr.

Der Code funktioniert jetzt, super das endlich die dauerhafte

Berechnung ausgeschaltet ist

Ich wünsche dir noch eine schöne Woche

Nochmals recht herzlichen Dank und bleib gesund

Gruß Peter
...