Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ausblenden mit 2 Bedingungen

ausblenden mit 2 Bedingungen
22.10.2008 01:39:27
Kai
Hallo zusammen,
ich hatte mit folgendem Makro Hilfe in diesem Forum bekommen:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intA As Long, intS As Long, wksS As Worksheet, wksT As Worksheet
Dim zz As Long, rngH As Range
If Not Intersect(Target, Range("A2:A21")) Is Nothing Then
intA = Cells(22, 7)
intA = Application.CountA(Range("A2:A21"))
intS = Application.Min(intA, 14)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intA = 0 Then
.Rows("1:23").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intA + 1).Hidden = False
wksS.Columns(1).Resize(, 2 * intA + 1).Hidden = False
If intA          If intS > 0 Then
Set rngH = wksT.Rows(3).Resize(intS)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(intS))
Next zz
rngH.EntireRow.Hidden = False
End If
If intS 
If Not Intersect(Target, Range("A23:A26")) Is Nothing Then
intA = Cells(23, 3)
intA = Application.CountA(Range("A23:A26"))
With Sheets("Torspieltagausw.")
If intA > 0 Then
Set rngH = .Rows(4).Resize(intA)
For zz = 12 To 300 Step 8
Set rngH = Union(rngH, .Rows(zz).Resize(intA))
Next zz
rngH.EntireRow.Hidden = False
End If
If intA 


Mein Problem bezieht sich auf den fetten Teil, denn das ausblenden der Zeilen unter der Bedingung soll nur ausgeführt werden, wenn sie durch unten stehendes Makro eingeblendet wurden.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim intG As Integer
intG = Cells(28, 1)
With Sheets("Spieltagausw.")
If intG = 0 Then
.Rows("1:684").Hidden = True
Else
.Rows("1:" & intG * 18).Hidden = False
If intG 


Das heißt, das erst die Zeilen unter der Bedingung Makro 2 ein und ausgeblendet werden sollen, und dann nach Bedingung aus Makro 1 für den nun eingeblendeten Teil ausgeblendet werden sollen. Wird also intG in Makro 2 um 1 größer, so handelt es sich um ein ZZ aus Makro 1.
als Beispiel:
Wenn Cells(28, 1)= 1 dann Zeilen 1-18 einblenden; Cells(22, 7)= 7 dann Zeilen 10-16 ausblenden
Wenn Cells(28, 1)= 2 dann Zeilen 1-36 einblenden; Cells(22, 7)= 5 dann Zeilen 8-16 ausblenden und Zeilen 26-34 ausblenden
Wenn Cells(28, 1)= 3 dann Zeilen 1-54 einblenden; Cells(22, 7)= 3 dann Zeilen 6-16 ausblenden und Zeilen 24-34 ausblenden und Zeilen 42-52 ausblenden
Ich hoffe ich konnte halbwegs verständlich klar machen was ich meine.
Vielen Dank für eure Hilfe und viele Grüße
Kai

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ausblenden mit 2 Bedingungen
22.10.2008 07:17:00
Erich
Hallo Kai,
das Problem ist, dass man nicht unabhängig voneinander nach "Anzahl Spieler" und "Spieltage"
ein- und ausblenden kann. Das sollte zusammen geschehen - das Programm weiß nicht,
was durch ein anderes Programm getan wurde.
In der Prozedur werden Aus- und Einblend-Zeilennummern testhalber in "Spieltagausw." ab Zeile 690 geschrieben.
Probier mal

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intA As Long, intS As Long, wksS As Worksheet, wksT As Worksheet
Dim zz As Long, rngH As Range, intT As Long
Dim ii As Long, jj As Long, rngK As Range
If Not Intersect(Target, Range("A2:A21,A28")) Is Nothing Then
intA = Application.CountA(Range("A2:A21"))      ' Anz. Spieler
intS = Application.Min(intA, 14)                ' Anz. Spieler-Anzeige
intT = Cells(28, 1)                             ' Anz. Spieltage
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intA = 0 Then
.Rows("1:50").Hidden = True                  ' incl. Diagramm?
wksS.Columns(1).Resize(, 41).Hidden = True
Else                 ' einblenden intA Spieler (Zeilen 3 bis 3+intA-1)
.Rows(1).Resize(2 + intA).Hidden = False ' ab Zeile 1 wg. Überschriften
.Rows("23:50").Hidden = False                ' Diagramm
wksS.Columns(1).Resize(, 2 * intA + 1).Hidden = False
wksS.Rows(1).Resize(intT + 3).Hidden = False
' ausblenden 20-intA Spieler (Zeilen 3+intA bis 22)
If intA  0 Then     ' einblenden intA Torw. (Zeilen 4 bis 4+intA-1)
Set rngH = .Rows(4).Resize(intA)
For zz = 12 To 300 Step 8
Set rngH = Union(rngH, .Rows(zz).Resize(intA))
Next zz
rngH.EntireRow.Hidden = False
End If
If intA 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: ausblenden mit 2 Bedingungen
22.10.2008 13:25:00
Kai
Hallo Erich,
zunächst einmal vielen Dank für den Spieltag Teil, das hatte ich alles in der langen Version eingebaut.
Bei deinem Code bekomme ich wieder den Fehler das die Hidden Eigenschaft des Range Objekts nicht festgelegt werden kann. Ich habe es schon mit Entire und googeln probiert, aber keine Lösung gefunden.
Da das ganze ja nur schwer zu erreichen scheint,
hab ich überlegt, ob das Problem noch anders lösbar wäre. Kann man evtl. die Zeilen die nicht benötigt werden auch anders nicht sichtbar machen und dann den Druckbereich anpassen? Für das nicht sichtbar machen, hab ich nur gerade keine Lösung, da wenn man alles weis macht, das ganze zwar erreicht, man das aber nicht rückgängig machen kann, da die zeilen ja unterschiedlich formatiert sind.
Vielen Dank und viele Grüße Kai
Anzeige
AW: ausblenden mit 2 Bedingungen
22.10.2008 13:44:00
Erich
Hallo Kai,
in welcher Codezeile tritt der Fehler auf? Wie lautet dann die Codezeile mit Entire?
Welche Werte haben intA und intT, also Anzahl Spieler und Spieltage?
Wenn jemand Interesse an der Historie oder einer Beispielmappe hat:
Dieser Thread ist eine Fortsetzung von https://www.herber.de/forum/archiv/1012to1016/t1013703.htm
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: ausblenden mit 2 Bedingungen
22.10.2008 14:31:22
Kai
Hallo Erich,
ich hab keine Ahnung wie die Zeile mit Entire aussehen muss, das war nur mal die Lösung für ein Problem wenn der Bereich stückweise zusammengesetzt ist. Ich hatte deshalb nur Rows in EntireRow geändert.
Der Fehler tritt hier auf:

.Rows(1).Resize(2 + intA).Hidden = False ' ab Zeile 1 wg. Überschriften
.Rows("23:50").Hidden = False                ' Diagramm
wksS.Columns(1).Resize(, 2 * intA + 1).Hidden = False
wksS.Rows(1).Resize(intT + 3).Hidden = False


Viele Grüße und vielen Dank Kai

Anzeige
AW: ausblenden mit 2 Bedingungen
22.10.2008 16:33:19
Erich
Hallo Kai,
VBA sagt dir genau, in welcher Zeile der Fehler auftritt. Es kann durchaus wichtig sein, in welcher der vier Zeilen,
die du gepostet hast, das Makro aussteigt.
Ich habe das noch mal überprüft: An einem fehlenden EntireRow bzw. EntireColumn liegt es nicht.
Also noch einmal meine Fragen:
1. In welcher Codezeile tritt der Fehler auf?
2. Welche Werte haben intA und intT, also Anzahl Spieler und Spieltage?
Meine Vermutung/dritte Frage:
3. Ist das zu verändernde Blatt vielleicht geschützt?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: ausblenden mit 2 Bedingungen
22.10.2008 23:11:34
Kai
Hi Erich,
ich hatte vorhin noch in einer Zelle ne zu große Zahl.
Es sieht nun wie folgt aus (Spieleranzahl:2 Spieltaganzahl:1):
Zeile 690: aus: 19:684
Zeile 691: ein: 1:4,17:18
Zeile 692: aus: 5:16
Die Anzeige ist genau so wie sie sein sollte und funktioniert wunderbar. Ich danke dir!! Jetzt muss ich es erstmal wieder verstehen und dann auf das zweite Makro anwenden.
Vielen Dank und viele Grüße Kai
p.s. wirklich tolle Hilfe!
Anzeige
AW: ausblenden mit 2 Bedingungen
23.10.2008 01:54:35
Kai
Hallo Erich,
der zweite Teil sieht nun bei mir so aus:

'  ----------------------------------------------------- ab hier war das mal Makro2
If Not Intersect(Target, Range("A23:A26")) Is Nothing Then
intA = Application.CountA(Range("A23:A26"))       ' Anz. Torhüter
intS = Application.Min(intA, 3)                ' Anz. Torhüter-Anzeige
intT = Cells(28, 1)                             ' Anz. Spieltage
With Sheets("Torspieltagausw.")
If intS * intT = 0 Then ' alles ausblenden
.Rows("1:303").Hidden = True
Else                    ' einblenden intS Torhüter (Zeilen 4 bis 4+intS-1)
Set rngH = .Rows(1).Resize(intS + 3)
Set rngH = Union(rngH, .Rows(7).Resize(2))
If intS 


Leider bekomme ich es nicht hin das es richtig funktioniert. Abgesehen davon, das noch die falschen Zeilen ausgeblendet werden, ist das Problem, das ich es nicht hinbekomme, das die Zeilen ein und ausgeblendet werden, wenn sich eine Variable ändert. Bisher funktioniert es nur so, das wenn die Anzahl der Spieltage geändert wird, zunächst auch die Anzahl der Torhüter geändert werden muss, damit die Spieltage eingeblendet werden.
Viele Grüße Kai

Anzeige
AW: ausblenden mit 2 Bedingungen
23.10.2008 16:03:36
Kai
Hi,
sorry das ich nochmal fragen muss, aber ich hab jetzt den ganzen Tag wieder rumgebastelt, bekommes es aber nicht hin. Ich mache irgendwo einen Fehler, die Kommentare beziehen sich auf 2 Torhüter und 2 Spieltage:

'  ----------------------------------------------------- ab hier war das mal Makro2
If Not Intersect(Target, Range("A23:A26")) Is Nothing Then
intA = Application.CountA(Range("A23:A26"))       ' Anz. Torhüter
intS = Application.Min(intA, 3)                ' Anz. Torhüter-Anzeige
intT = Cells(28, 1)                             ' Anz. Spieltage
With Sheets("Torspieltagausw.")
If intS * intT = 0 Then ' alles ausblenden
.Rows("1:303").Hidden = True
Else                    ' einblenden intS Torhüter (Zeilen 4 bis 4+intS-1)
Set rngH = .Rows(1).Resize(intS + 3) ' blende Zeilen 1,2,3,4,5 ein
Set rngH = Union(rngH, .Rows(7).Resize(2)) ' blende Zeile 7 und 8 ein
If intS 


Die Anzeige funktioniert für 2 Torhüter so wie sie sollte, aber das Problem mit den Spieltagen bekomme ich nicht hin, ich muss immer die Anzahl der Torhüter ändern, damit sich die Anzeige der Spieltage ändert.
Im Moment funktioniert es für 3 Torhüter aber nicht, da dafür eigentlich doch nur dieser Teil relevant ist, verstehe ich nicht warum:


Else                    ' einblenden intS Torhüter (Zeilen 4 bis 4+intS-1)
Set rngH = .Rows(1).Resize(intS + 3) ' blende Zeilen 1,2,3,4,5,6 ein
Set rngH = Union(rngH, .Rows(7).Resize(2)) ' blende Zeile 7 und 8 ein


Der Rest entfällt ja, da er nur ausgeführt wird, wenn die Anzahl unter 3 ist.
Vielen Dank schonmal für Hilfe im vorraus, bin mit meinem Latein am Ende
Gruß Kai

Anzeige
AW: ausblenden mit 2 Bedingungen
23.10.2008 16:07:12
Erich
Hallo Kai,
das könnte es sein:

'  ----------------------------------------------------- ab hier war das mal Makro2
If Not Intersect(Target, Range("A23:A26,A28")) Is Nothing Then
intA = Application.CountA(Range("A23:A26"))     ' Anz. Torhüter
intS = Application.Min(intA, 3)                 ' Anz. Torhüter-Anzeige
intT = Cells(28, 1)                             ' Anz. Spieltage
With Sheets("Torspieltagausw.")
If intS * intT = 0 Then ' alles ausblenden
.Rows("1:303").Hidden = True
Else                    ' einblenden intS Torhüter (Zeilen 4 bis 4+intS-1)
Set rngH = .Rows(1).Resize(intS + 3)
Set rngH = Union(rngH, .Rows(7).Resize(2))
If intS 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: ausblenden mit 2 Bedingungen
23.10.2008 16:10:00
Erich
Hallo Kai,
das könnte es sein:

'  ----------------------------------------------------- ab hier war das mal Makro2
If Not Intersect(Target, Range("A23:A26,A28")) Is Nothing Then
intA = Application.CountA(Range("A23:A26"))     ' Anz. Torhüter
intS = Application.Min(intA, 3)                 ' Anz. Torhüter-Anzeige
intT = Cells(28, 1)                             ' Anz. Spieltage
With Sheets("Torspieltagausw.")
If intS * intT = 0 Then ' alles ausblenden
.Rows("1:303").Hidden = True
Else                    ' einblenden intS Torhüter (Zeilen 4 bis 4+intS-1)
Set rngH = .Rows(1).Resize(intS + 3)
Set rngH = Union(rngH, .Rows(7).Resize(2))
If intS 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: ausblenden mit 2 Bedingungen
23.10.2008 16:38:00
Kai
Hallo Erich,
vielen Dank für diese wahnsinnig schnelle Hilfe. Es funktioniert nun alles super!!!!!!
Vielen Dank!
p.s. hab jetzt noch 3 Probleme an denen ich arbeite mit der Tabelle ich hoffe ich darf mich nochmal melden wenn es nicht klappt.
Nochmals herzlichen Dank!!!
Gruß Kai

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige