Herbers Excel-Forum - das Archiv

Worksheet_Calculate()

Bild

Betrifft: Worksheet_Calculate()
von: Sophie

Geschrieben am: 13.12.2006 12:50:17
Liebe Freunde!
Versuche meiner Datei beizubringen, dass wenn ein Blatt sich ändert oder neu berechnet wird, dass das Blatt entpsrechend verändert wird.
Also, in der Tabelle "1" steht folgender Code:
Private Sub Worksheet_Calculate()
Call Makro_1
End Sub

Somit rufe ich nachstehendes Makro, frage durch Schleifen nach den Zeileninhalt und lasse jenachdem ein- bzw. ausblenden. Funktioniert aber nicht. Fehler, die vorkommen: Änderung anderer Blätter führt dazu, dass ich irgendwann auf Blatt "1" springe in die Zeile j7, die Schleifen sind endlos und erfüllen immer nur die erste Zeile des Befehls, danach springen sie zum Anfang...
Wenn jemand weiß, wie man das löst, bin ich sehr-sehr für die Unterstützung dankbar!!!
LG
Sophie ;-)
Sub Makro_1()
Dim a As Integer
Dim b As Integer
a = Worksheets("1").Range("o19").Value
For a = 1 To 2
If a = 1 Then
Worksheets("1").Rows("20:22").Hidden = True And _
Worksheets("1").Shapes("Check Box 52").Visible = False And _
Worksheets("1").Shapes("Check Box 53").Visible = False And _
Worksheets("1").Shapes("Check Box 54").Visible = False
End If
If a = 2 Then
Worksheets("1").Rows("20:22").Hidden = False
Worksheets("1").Shapes("Check Box 52").Visible = True
Worksheets("1").Shapes("Check Box 53").Visible = True
Worksheets("1").Shapes("Check Box 54").Visible = True
End If
Next
b = Worksheets("1").Range("o7").Value
For b = 1 To 2
If b = 1 Then
Worksheets("1).Shapes("Button 213").Visible = False
Worksheets("1").Shapes("text box 130").Visible = False
Worksheets("1").Range("j7").Value = 0
End If
If b = 2 Then
Worksheets("1").Shapes("text box 130").Visible = True
Worksheets("1").Shapes("Button 213").Visible = True
End If
Next
Worksheets("1").Range("j7").Select
End Sub
Bild

Betrifft: AW: Worksheet_Calculate()
von: Reinhard

Geschrieben am: 13.12.2006 13:11:31
Hi Sophie,
erstma kürzerer Code
Option Explicit
Sub Makro_1()
Dim a As Integer
With Worksheets("1")
a = .Range("o19").Value
Select Case a
Case 1, 2
.Rows("20:22").Hidden = (a = 1)
.Shapes("Check Box 52").Visible = (a = 2)
.Shapes("Check Box 53").Visible = (a = 2)
.Shapes("Check Box 54").Visible = (a = 2)
Case Else
End Select
a = .Range("o7").Value
Select Case a
Case 1, 2
.Shapes("Button 213").Visible = (a = 2)
.Shapes("text box 130").Visible = (a = 2)
If a = 1 Then .Range("j7").Value = 0
Case Else
End Select
.Range("j7").Select
End With
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Bild

Betrifft: AW: Worksheet_Calculate()
von: yps
Geschrieben am: 13.12.2006 13:17:29
hi,
hättest du ihr auch gleich mit einbauen können
Application.EnableEvents = False
'ihr code
Application.EnableEvents = True
cu Micha
Bild

Betrifft: AW: Worksheet_Calculate()
von: Matthias G

Geschrieben am: 13.12.2006 13:18:01
Hallo Sophie,
das kann ja so nicht funktionieren:
Du weist erst einmal a den Wert der Zelle O19 zu und benutzt a danach als Schleifenvariable, setzt den Wert also gleich auf 1.
Danach wird also der Block nach (If a=1) aufgeführt.
Im zweiten Schleifendurchlauf sist a=2 und der Block nach (If a=2) wird ausgeführt, welcher die Änderungen von eben wieder Rückgängig macht.
Ergebnis: Ein Bildschirmflackern ohne Sinn.
Lass einfach mal die Schlefe weg:
Sub Makro_1()
Dim a As Integer
Dim b As Integer
a = Worksheets("1").Range("o19").Value
If a = 1 Then
Worksheets("1").Rows("20:22").Hidden = True And _
Worksheets("1").Shapes("Check Box 52").Visible = False And _
Worksheets("1").Shapes("Check Box 53").Visible = False And _
Worksheets("1").Shapes("Check Box 54").Visible = False
End If
If a = 2 Then
Worksheets("1").Rows("20:22").Hidden = False
Worksheets("1").Shapes("Check Box 52").Visible = True
Worksheets("1").Shapes("Check Box 53").Visible = True
Worksheets("1").Shapes("Check Box 54").Visible = True
End If
b = Worksheets("1").Range("o7").Value
If b = 1 Then
Worksheets("1").Shapes("Button 213").Visible = False
Worksheets("1").Shapes("text box 130").Visible = False
Worksheets("1").Range("j7").Value = 0
End If
If b = 2 Then
Worksheets("1").Shapes("text box 130").Visible = True
Worksheets("1").Shapes("Button 213").Visible = True
End If
End Sub

Gruß Matthias
 Bild