Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1012to1016
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
2 Makros zusammenführen
01.10.2008 17:33:39
Kai
Guten Tag zusammen,
ich hatte die Frage schonmal gestellt, allerdings mit anderen kombiniert, da ich in der Foren FAQ nochmal gelesen habe das es nicht erwünscht ist, hier nochmal:
Makro1:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
intG = Cells(22, 7)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
wksT.Rows("3:16").Hidden = True
wksT.Rows("21:34").Hidden = True
wksT.Rows("39:52").Hidden = True
wksT.Rows("57:70").Hidden = True
wksT.Rows("75:88").Hidden = True
wksT.Rows("93:106").Hidden = True
wksT.Rows("111:124").Hidden = True
wksT.Rows("129:142").Hidden = True
wksT.Rows("147:160").Hidden = True
wksT.Rows("165:178").Hidden = True
wksT.Rows("183:196").Hidden = True
wksT.Rows("201:214").Hidden = True
wksT.Rows("219:232").Hidden = True
wksT.Rows("237:250").Hidden = True
wksT.Rows("255:268").Hidden = True
wksT.Rows("273:286").Hidden = True
wksT.Rows("291:304").Hidden = True
wksT.Rows("309:322").Hidden = True
wksT.Rows("327:340").Hidden = True
wksT.Rows("345:358").Hidden = True
wksT.Rows("363:376").Hidden = True
wksT.Rows("381:394").Hidden = True
wksT.Rows("399:412").Hidden = True
wksT.Rows("417:430").Hidden = True
wksT.Rows("435:448").Hidden = True
wksT.Rows("453:466").Hidden = True
wksT.Rows("471:484").Hidden = True
wksT.Rows("489:502").Hidden = True
wksT.Rows("507:520").Hidden = True
wksT.Rows("525:538").Hidden = True
wksT.Rows("545:556").Hidden = True
wksT.Rows("561:574").Hidden = True
wksT.Rows("579:592").Hidden = True
wksT.Rows("597:610").Hidden = True
wksT.Rows("615:628").Hidden = True
wksT.Rows("633:646").Hidden = True
wksT.Rows("651:664").Hidden = True
wksT.Rows("669:682").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
wksT.Rows("3:" & 2 * intG + 1).Hidden = False
wksT.Rows("21:" & 2 * intG + 19).Hidden = False
wksT.Rows("39:" & 2 * intG + 37).Hidden = False
wksT.Rows("57:" & 2 * intG + 55).Hidden = False
wksT.Rows("75:" & 2 * intG + 73).Hidden = False
wksT.Rows("93:" & 2 * intG + 91).Hidden = False
wksT.Rows("111:" & 2 * intG + 109).Hidden = False
wksT.Rows("129:" & 2 * intG + 127).Hidden = False
wksT.Rows("147:" & 2 * intG + 145).Hidden = False
wksT.Rows("165:" & 2 * intG + 163).Hidden = False
wksT.Rows("183:" & 2 * intG + 181).Hidden = False
wksT.Rows("201:" & 2 * intG + 199).Hidden = False
wksT.Rows("219:" & 2 * intG + 217).Hidden = False
wksT.Rows("237:" & 2 * intG + 235).Hidden = False
wksT.Rows("255:" & 2 * intG + 253).Hidden = False
wksT.Rows("273:" & 2 * intG + 271).Hidden = False
wksT.Rows("291:" & 2 * intG + 289).Hidden = False
wksT.Rows("309:" & 2 * intG + 307).Hidden = False
wksT.Rows("327:" & 2 * intG + 325).Hidden = False
wksT.Rows("345:" & 2 * intG + 343).Hidden = False
wksT.Rows("363:" & 2 * intG + 361).Hidden = False
wksT.Rows("381:" & 2 * intG + 379).Hidden = False
wksT.Rows("399:" & 2 * intG + 397).Hidden = False
wksT.Rows("417:" & 2 * intG + 415).Hidden = False
wksT.Rows("435:" & 2 * intG + 433).Hidden = False
wksT.Rows("453:" & 2 * intG + 451).Hidden = False
wksT.Rows("471:" & 2 * intG + 469).Hidden = False
wksT.Rows("489:" & 2 * intG + 487).Hidden = False
wksT.Rows("507:" & 2 * intG + 505).Hidden = False
wksT.Rows("525:" & 2 * intG + 523).Hidden = False
wksT.Rows("545:" & 2 * intG + 543).Hidden = False
wksT.Rows("561:" & 2 * intG + 559).Hidden = False
wksT.Rows("579:" & 2 * intG + 577).Hidden = False
wksT.Rows("597:" & 2 * intG + 595).Hidden = False
wksT.Rows("615:" & 2 * intG + 613).Hidden = False
wksT.Rows("633:" & 2 * intG + 631).Hidden = False
wksT.Rows("651:" & 2 * intG + 649).Hidden = False
wksT.Rows("669:" & 2 * intG + 667).Hidden = False
wksS.Columns(1).Resize(, 2 * intG + 1).Hidden = False
If intG 


Makro2:


Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A23:A26")) Is Nothing Then Exit Sub
intD = Cells(23, 3)
With Sheets("Torspieltagausw.")
If intD = 0 Then
.Rows("4:6").Hidden = True
.Rows("12:14").Hidden = True
.Rows("20:22").Hidden = True
.Rows("28:30").Hidden = True
.Rows("36:38").Hidden = True
.Rows("44:46").Hidden = True
.Rows("52:54").Hidden = True
.Rows("60:62").Hidden = True
.Rows("68:70").Hidden = True
.Rows("76:78").Hidden = True
.Rows("84:86").Hidden = True
.Rows("92:94").Hidden = True
.Rows("100:102").Hidden = True
.Rows("108:110").Hidden = True
.Rows("116:118").Hidden = True
.Rows("124:126").Hidden = True
.Rows("132:134").Hidden = True
.Rows("140:142").Hidden = True
.Rows("148:150").Hidden = True
.Rows("156:158").Hidden = True
.Rows("164:166").Hidden = True
.Rows("172:174").Hidden = True
.Rows("180:182").Hidden = True
.Rows("188:190").Hidden = True
.Rows("196:198").Hidden = True
.Rows("204:206").Hidden = True
.Rows("212:214").Hidden = True
.Rows("220:222").Hidden = True
.Rows("228:230").Hidden = True
.Rows("236:238").Hidden = True
.Rows("244:246").Hidden = True
.Rows("252:254").Hidden = True
.Rows("260:262").Hidden = True
.Rows("268:270").Hidden = True
.Rows("276:278").Hidden = True
.Rows("284:286").Hidden = True
.Rows("292:294").Hidden = True
.Rows("300:302").Hidden = True
Else
.Rows("4:" & 2 * intD + 1).Hidden = False
.Rows("12:" & 2 * intD + 9).Hidden = False
.Rows("20:" & 2 * intD + 17).Hidden = False
.Rows("28:" & 2 * intD + 25).Hidden = False
.Rows("36:" & 2 * intD + 33).Hidden = False
.Rows("44:" & 2 * intD + 41).Hidden = False
.Rows("52:" & 2 * intD + 49).Hidden = False
.Rows("60:" & 2 * intD + 57).Hidden = False
.Rows("68:" & 2 * intD + 65).Hidden = False
.Rows("76:" & 2 * intD + 73).Hidden = False
.Rows("84:" & 2 * intD + 81).Hidden = False
.Rows("92:" & 2 * intD + 89).Hidden = False
.Rows("100:" & 2 * intD + 97).Hidden = False
.Rows("108:" & 2 * intD + 105).Hidden = False
.Rows("116:" & 2 * intD + 113).Hidden = False
.Rows("124:" & 2 * intD + 121).Hidden = False
.Rows("132:" & 2 * intD + 129).Hidden = False
.Rows("140:" & 2 * intD + 137).Hidden = False
.Rows("148:" & 2 * intD + 145).Hidden = False
.Rows("156:" & 2 * intD + 153).Hidden = False
.Rows("164:" & 2 * intD + 161).Hidden = False
.Rows("172:" & 2 * intD + 169).Hidden = False
.Rows("180:" & 2 * intD + 177).Hidden = False
.Rows("188:" & 2 * intD + 185).Hidden = False
.Rows("196:" & 2 * intD + 193).Hidden = False
.Rows("204:" & 2 * intD + 201).Hidden = False
.Rows("212:" & 2 * intD + 209).Hidden = False
.Rows("220:" & 2 * intD + 217).Hidden = False
.Rows("228:" & 2 * intD + 225).Hidden = False
.Rows("236:" & 2 * intD + 233).Hidden = False
.Rows("244:" & 2 * intD + 241).Hidden = False
.Rows("252:" & 2 * intD + 249).Hidden = False
.Rows("260:" & 2 * intD + 257).Hidden = False
.Rows("268:" & 2 * intD + 265).Hidden = False
.Rows("276:" & 2 * intD + 273).Hidden = False
.Rows("284:" & 2 * intD + 281).Hidden = False
.Rows("292:" & 2 * intD + 289).Hidden = False
.Rows("300:" & 2 * intD + 297).Hidden = False
If intD 


Diese beiden Makros funktionieren einzeln super zusammen allerdings nicht zusammen, was mache ich falsch?
Viele Grüße Kai

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Makros zusammenführen
01.10.2008 17:39:35
Peter
Hallo Kai,
du kannst nicht zweimal das Worksheets_Change Ereignis in einer Mappe haben.
Wenn beide Makros laufen sollen, musst du sie unter einem Private Sub Worksheet_Change(ByVal Target As Range) laufen lassen.
Gruß Peter
AW: 2 Makros zusammenführen
01.10.2008 17:42:00
Kai
Hallo Peter,
Ja so hab ich es in meiner Mappe auch, allerdings läuft es trotzdem nicht, hatte es nur wegen der Anzeige hier so gemacht.
Trotzdem vielen Dank, auch wenn es noch nicht die Lösung war.
Gruß Kai
AW: 2 Makros zusammenführen
01.10.2008 17:55:00
Armin
Hallo Kai,
veruch es mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:A21")) Is Nothing Then
intG = Cells(22, 7)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
wksT.Rows("3:16").Hidden = True
wksT.Rows("21:34").Hidden = True
wksT.Rows("39:52").Hidden = True
wksT.Rows("57:70").Hidden = True
wksT.Rows("75:88").Hidden = True
wksT.Rows("93:106").Hidden = True
wksT.Rows("111:124").Hidden = True
wksT.Rows("129:142").Hidden = True
wksT.Rows("147:160").Hidden = True
wksT.Rows("165:178").Hidden = True
wksT.Rows("183:196").Hidden = True
wksT.Rows("201:214").Hidden = True
wksT.Rows("219:232").Hidden = True
wksT.Rows("237:250").Hidden = True
wksT.Rows("255:268").Hidden = True
wksT.Rows("273:286").Hidden = True
wksT.Rows("291:304").Hidden = True
wksT.Rows("309:322").Hidden = True
wksT.Rows("327:340").Hidden = True
wksT.Rows("345:358").Hidden = True
wksT.Rows("363:376").Hidden = True
wksT.Rows("381:394").Hidden = True
wksT.Rows("399:412").Hidden = True
wksT.Rows("417:430").Hidden = True
wksT.Rows("435:448").Hidden = True
wksT.Rows("453:466").Hidden = True
wksT.Rows("471:484").Hidden = True
wksT.Rows("489:502").Hidden = True
wksT.Rows("507:520").Hidden = True
wksT.Rows("525:538").Hidden = True
wksT.Rows("545:556").Hidden = True
wksT.Rows("561:574").Hidden = True
wksT.Rows("579:592").Hidden = True
wksT.Rows("597:610").Hidden = True
wksT.Rows("615:628").Hidden = True
wksT.Rows("633:646").Hidden = True
wksT.Rows("651:664").Hidden = True
wksT.Rows("669:682").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
wksT.Rows("3:" & 2 * intG + 1).Hidden = False
wksT.Rows("21:" & 2 * intG + 19).Hidden = False
wksT.Rows("39:" & 2 * intG + 37).Hidden = False
wksT.Rows("57:" & 2 * intG + 55).Hidden = False
wksT.Rows("75:" & 2 * intG + 73).Hidden = False
wksT.Rows("93:" & 2 * intG + 91).Hidden = False
wksT.Rows("111:" & 2 * intG + 109).Hidden = False
wksT.Rows("129:" & 2 * intG + 127).Hidden = False
wksT.Rows("147:" & 2 * intG + 145).Hidden = False
wksT.Rows("165:" & 2 * intG + 163).Hidden = False
wksT.Rows("183:" & 2 * intG + 181).Hidden = False
wksT.Rows("201:" & 2 * intG + 199).Hidden = False
wksT.Rows("219:" & 2 * intG + 217).Hidden = False
wksT.Rows("237:" & 2 * intG + 235).Hidden = False
wksT.Rows("255:" & 2 * intG + 253).Hidden = False
wksT.Rows("273:" & 2 * intG + 271).Hidden = False
wksT.Rows("291:" & 2 * intG + 289).Hidden = False
wksT.Rows("309:" & 2 * intG + 307).Hidden = False
wksT.Rows("327:" & 2 * intG + 325).Hidden = False
wksT.Rows("345:" & 2 * intG + 343).Hidden = False
wksT.Rows("363:" & 2 * intG + 361).Hidden = False
wksT.Rows("381:" & 2 * intG + 379).Hidden = False
wksT.Rows("399:" & 2 * intG + 397).Hidden = False
wksT.Rows("417:" & 2 * intG + 415).Hidden = False
wksT.Rows("435:" & 2 * intG + 433).Hidden = False
wksT.Rows("453:" & 2 * intG + 451).Hidden = False
wksT.Rows("471:" & 2 * intG + 469).Hidden = False
wksT.Rows("489:" & 2 * intG + 487).Hidden = False
wksT.Rows("507:" & 2 * intG + 505).Hidden = False
wksT.Rows("525:" & 2 * intG + 523).Hidden = False
wksT.Rows("545:" & 2 * intG + 543).Hidden = False
wksT.Rows("561:" & 2 * intG + 559).Hidden = False
wksT.Rows("579:" & 2 * intG + 577).Hidden = False
wksT.Rows("597:" & 2 * intG + 595).Hidden = False
wksT.Rows("615:" & 2 * intG + 613).Hidden = False
wksT.Rows("633:" & 2 * intG + 631).Hidden = False
wksT.Rows("651:" & 2 * intG + 649).Hidden = False
wksT.Rows("669:" & 2 * intG + 667).Hidden = False
wksS.Columns(1).Resize(, 2 * intG + 1).Hidden = False
If intG 


Armin

Anzeige
AW: 2 Makros zusammenführen
01.10.2008 18:49:46
Kai
Hallo Armin,
leider funktioniert deine Lösung auch nicht richtig, dann ist es so, das sich intG und intD ändern müßen.
Es soll aber so sein, das wenn sich intG ändert die ersten Zeilen ausgeblendet werden und wenn sich intD ändert der zweite Teil Zilen ausgeblendet werden.
Trotzdem Danke!
Gruß Kai
AW: 2 Makros zusammenführen
01.10.2008 19:51:00
Erich
Hallo Kai,
diese vielen gleichartigen Anweisungen machen den Code unübersichtlich und schrecken den Betrachter eher ab.
Hier hab ich mal den ersten Teil deiner 1. Prozedur umgeschrieben (Schleifen eingebaut).
Wäre gut, wenn du deine beiden Prozeduren entsprechend kürzen könntest.
Dann lässt sich das Kombinieren leichter bewerkstelligen.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intG As Integer, wksS As Worksheet    ' Die Deklarationen fehlten bei dir...
Dim zz As Long, rngH As Range
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
intG = Cells(22, 7)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
Set rngH = wksT.Rows(3).Resize(14)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(14))
Next zz
rngH.Hidden = True
wksT.Rows("3:16").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
Set rngH = wksT.Rows(3).Resize(2 * intG - 1)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(2 * intG - 1))
Next zz
rngH.Hidden = False
wksS.Columns(1).Resize(, 2 * intG + 1).Hidden = False
If intG 

Aufgefallen ist mir, dass z. B. bei intG=5 in Sheets("Torschützen gesamt")
mit .Rows("1:" & 2 * intG + 1).Hidden = False die Zeilen 1:11 eingeblendet und
mit .Rows(intG + 3 & ":22").Hidden = True die Zeilen 8:22 ausgeblendet werden.
Die Zeilen 8:11 werden also zweimal angefasst. Soll das so geschehen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: 2 Makros zusammenführen
01.10.2008 19:58:00
Kai
Hallo Erich,
den Code hattest du mir vor ein paar Tagen gegeben und ich hab versucht ihn für mich zu erweitern. Jetzt versuch ich zu verstehen was du geschrieben hast, melde mich später wenn ich es verstanden habe.
Danke Erich für die Hilfe, mach mich dann mal an meinen Code.
Gruß Kai
AW: 2 Makros zusammenführen
01.10.2008 21:16:00
Kai
Hallo Erich,
ich habe mir nun den Code angeguckt und Deine Schleife auch verstanden.
Folgendes Makro hatte ich von dir bekommen, da es mit IntG dort so gemacht wurde, habe ich es versucht für meine Erweiterung genau so zu bauen und da es so funktioniert hat hab ichs so belassen :-):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim intG As Integer, wksS As Worksheet
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
intG = Cells(22, 7)
Set wksS = Sheets("Torschützenspielt")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
wksS.Columns(1).Resize(, 2 * intG + 1).Hidden = False
If intG 


Das zweite Makro mit Schleife umgebaut sieht nun wie folgt aus, den Teil mit If If intD hab ich erstmal weggelassen, da ich ja jetzt noch nicht wusste ob man ihn braucht:
If Intersect(Target, Range("A23:A26")) Is Nothing Then Exit Sub
intD = Cells(23, 3)
With Sheets("Torspieltagausw.")
If intD = 0 Then
Set rngA = .Rows(4).Resize(3)
For zz = 12 To 300 Step 8
Set rngA = Union(rngA, .Rows(zz).Resize(3))
Next zz
rngA.Hidden = True
Else
Set rngA = .Rows(3).Resize(2 * intD - 1)
For zz = 12 To 300 Step 8
Set rngA = Union(rngA, .Rows(zz).Resize(2 * intD - 1))
Next zz
rngA.Hidden = False
End If
End With
Allerdings gibt es bei beiden das Problem, das an der Stelle:
rngA.Hidden = False
rngH.Hidden = False
Hidden Eigenschaft des Range Objekts kann nicht festgelegt werden festgestellt wird.
Gruß Kai

Anzeige
AW: 2 Makros zusammenführen
02.10.2008 12:51:59
Erich
Hallo Kai,
so, du hast dir den Code mit den Schleifen angeguckt und verstanden.
Wofür habe ich wohl diesen Code mit den Schleifen geschrieben?
Sicher nicht dafür, dass du ihn jetzt weglässt und stattdessen meinen alten Code postest.
Was ist jetzt mit den Schleifen in Makro1 für wksT = Sheets("Spieltagausw.")?
Ich hatte erwartet, dass du den Umbau des Makros1 weiterführst...
Zu Makro2:
Vermutlich muss es
Set rngA = .Rows(4).Resize(2 * intD - 1)
statt
Set rngA = .Rows(3).Resize(2 * intD - 1)
heißen.
Zu dem Fehler bei "Hidden":
Da habe ich einen Fehler gemacht - sorry.
Wenn rngA ein stückweise zusammengesetzter Bereich von Zeilen ist, wird EntireRow gebraucht, also
rngA.EntireRow.Hidden = False
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: 2 Makros zusammenführen
02.10.2008 18:08:00
Kai
Hallo Erich,
das alte Makro hatte ich gepostet, da du folgendes gefragt hast:

Aufgefallen ist mir, dass z. B. bei intG=5 in Sheets("Torschützen gesamt")
mit .Rows("1:" & 2 * intG + 1).Hidden = False die Zeilen 1:11 eingeblendet und
mit .Rows(intG + 3 & ":22").Hidden = True die Zeilen 8:22 ausgeblendet werden.
Die Zeilen 8:11 werden also zweimal angefasst. Soll das so geschehen?


Ich habe den Code so von dir nur übernommen und kann es dir deshalb nicht beantworten, ausser, das es das macht, was ich von dem Makro erwarte.
Natürlich habe ich jetzt das Makro so umgebaut damit es funktioniert, hatte nicht von dir erwartet das du das machst, nur wollte ich zunächst die obige Frage klären, deshalb hatte ich nur das alte gepostet.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim intG As Integer, wksS As Worksheet
Dim zz As Long, rngH As Range
If Intersect(Target, Range("A2:A21")) Is Nothing Then Exit Sub
intG = Cells(22, 7)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intG = 0 Then
.Rows("1:41").Hidden = True
Set rngH = wksT.Rows(3).Resize(14)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(14))
Next zz
rngH.EntireRow.Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Else
.Rows("1:" & 2 * intG + 1).Hidden = False
Set rngH = wksT.Rows(3).Resize(intG)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(intG))
Next zz
rngH.EntireRow.Hidden = False
wksS.Columns(1).Resize(, 2 * intG + 1).Hidden = False
If intG 


Jetzt geht es noch darum das sie zusammen laufen.
Vielen Dank und viele Grüße Kai

Anzeige
AW: 2 Makros zusammengeführt
02.10.2008 19:44:09
Erich
Hallo Kai,
ach so, das verstehe ich. Hier kommt jetzt der Zusammenbau.
An zwei Stellen habe ich geändert (Rows(3)), dahinter steht ein Kommentar.
Könnte es sein, dass im 2. Teil "if intA Statt intG und intD gibt es jetzt intA ('integer Anzahl'), auch wird nur ein Hilfsrange rngH gebraucht.
Könnte es sein, dass du ohne "Option Explicit" arbeitest?

Option Explicit         ' IMMER ZU EMPFEHLEN
Private Sub Worksheet_Change(ByVal Target As Range)
Dim intA 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)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intA = 0 Then
.Rows("1:41").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Set rngH = wksT.Rows(3).Resize(14)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(14))
Next zz
rngH.EntireRow.Hidden = True
Else
.Rows("1:" & 2 * intA + 1).Hidden = False
wksS.Columns(1).Resize(, 2 * intA + 1).Hidden = False
Set rngH = wksT.Rows(3).Resize(intA)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(intA))
Next zz
rngH.EntireRow.Hidden = False
If intA 

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

Anzeige
AW: 2 Makros zusammengeführt
02.10.2008 23:24:00
Kai
Hallo Erich,
leider läuft es so noch nicht, in den beiden Tabellenblättern ohne Schleife läuft alles soweit, in den beiden mit Schleife wird nichts ausgeblendet. Hab schon gesucht, aber nichts gefunden woran es liegen könnte.
Im zweiten hattest du natürlich Recht, es soll 3 und nicht 20 heißen, hat sich durch copy&paste eingschlichen.
Viele Grüße Kai
AW: 2 Makros zusammengeführt
03.10.2008 12:07:10
Erich
Hallo Kai,
an zwei Stellen (nach intA < 20 und nach intA < 3) stand "Hidden=False",
da sollte aber wohl True hin. Hier eine neue Version:

Option Explicit         ' IMMER ZU EMPFEHLEN
Private Sub Worksheet_Change(ByVal Target As Range)
Dim intA 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)
Set wksS = Sheets("Torschützen Spielt.")
Set wksT = Sheets("Spieltagausw.")
With Sheets("Torschützen gesamt")
If intA = 0 Then
.Rows("1:41").Hidden = True
wksS.Columns(1).Resize(, 22).Hidden = True
Set rngH = wksT.Rows(3).Resize(14)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(14))
Next zz
rngH.EntireRow.Hidden = True
Else
.Rows("1:" & 2 * intA + 1).Hidden = False
wksS.Columns(1).Resize(, 2 * intA + 1).Hidden = False
Set rngH = wksT.Rows(3).Resize(intA)
For zz = 21 To 669 Step 18
Set rngH = Union(rngH, wksT.Rows(zz).Resize(intA))
Next zz
rngH.EntireRow.Hidden = False
If intA 

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

Anzeige
AW: 2 Makros zusammengeführt
04.10.2008 01:46:02
Kai
Hallo Erich,
natürlich musste dort True hin, das hab ich irgendwie falsch kopiert. Ausserdem habe ich es so kopiert, das es gar nicht das machen kann, was ich eigentlich haben möchte, verstehe gerade nicht wie mir das passieren konnte. Ich bin mir eigentlich sicher, das ich es gestern so hatte, das es das gemacht hat, was ich erwarte. Nun hab ich nochmal versucht die letzte Schleife zu erstellen, allerdings treten dabei 2 Fehler auf:
Ich hab nun folgendes Problem, wenn ich das Makro so habe funktioniert es, allerdings nur wenn die Zahl immer größer wird:

If intA 



If intA 


oder so, dann allerdings nur wenn die Zahlen immer kleiner werden und die falschen Zeilen werden ausgeblendet:


If intA 



If intA 


Das Problem ist, das es in beide Richtungen funktionieren sollte. Ein Zweites Problem ist, das beim ersten, wenn IntA größer 14 ist Anwendungs, oder Objektdefinierter Fehler auftritt.
Beim zweiten, wenn es über 3 ist aber nicht, das verstehe ich irgendwie nicht, da nach meiner Meinung wenn ein Fehlerauftritt, der doch bei beiden auftreten müßte oder?
Gruß Kai

Anzeige
AW: Bereiche ein-/ausblenden
05.10.2008 17:31:00
Erich
Hallo Kai,
wenn intA eine Zahl von 14 bis 19 ist (was nach der Bedingung "If intA < 20 then" ja vorkommen kann),
dann gibt Resize(14 - intA) einen Fehler. 14-intA ist dann Null oder negativ, und einen Bereich mit Null oder
weniger Zeilen kann es natürlich nicht geben.
Bei "intA < 3" tritt der Fehler nicht auf, intA kann hier nur 1 oder 2 sein, damit hat
Rows(zz).Resize(3 - intA) eine oder 2 Zeilen - und das geht immer.
Wie kommst du auf die Zahl 14 in "Resize(14 - intA)"?
Im deinem ersten Beitrag in diesem Thread steht hinter "If intA < 20 then" die Codezeile
wksT.Rows(intG + 3 & ":16").Hidden = True
(wksT ist hier das Blatt "Spieltagausw.".)
Für intG=12 ergibt das wksT.Rows("15:16").Hidden = True, also Zeilen 15-16
Für intG=13 ergibt das wksT.Rows("16:16").Hidden = True, also Zeile 16
Für intG=14 ergibt das wksT.Rows("17:16").Hidden = True, also Zeilen 16-17
Für intG=19 ergibt das wksT.Rows("22:16").Hidden = True, also Zeilen 16-22
Ist das so OK?
Ein generelles Problem hast du genannt:
Es reicht nicht, bei einem bestimmten Wert von intA Zellen auszublenden,
mann muss auch sicherstellen, dass die jeweils anderen Zellen eingeblendet sind oder werden.
Sonst läuft es nur, solange intA immer kleiner bzw. immer größer wird - wie du geschrieben hast.
Es kann nötig sein, bei jedem Aufruf nicht nur bestimmte Zellen auszublenden,
sondern auch die anderen Zellen einzublenden.
Insgesamt habe ich das Problem, dass ich nicht so recht weiß, welche Zeilen/Spalten wann ein- bzw.
ausgeblendet werden sollen. Ich kenne ja die Struktur der betroffenen Tabellen nicht,
und aus den Codes lässt sich das auch nicht einfach schließen.
Eine Vereinfachung scheint mir möglich und sinnvoll:
Die getrennte Behandlung von intA=0 und intA<3 ist unnötig.
Der Fall 0 geht genau so wie Fall 1 oder 2.
Könntest du vielleicht mal eine Beispielmappe hochladen?
Damit würden Programmierung und Test sehr viel leichter fallen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Bereiche ein-/ausblenden
05.10.2008 18:52:03
Kai
Hallo Erich,
ich habe mal ein paar Bilder hochgeladen, zur Besseren Vorstellung.
Es ist so, das in Datenerfassung 20 spieler und 4 Torhüter erfasst werden können.
In der Tabelle Spieltagausw. werden pro Spieltag aber max. 14 Spieler angezeigt.
In der Tabelle Torspieltagausw. werden pro Spieltag aber max. 3 Torhüter angezeigt.
Zelle Datenerfassung!G22 gibt an, wieviele Spieler eingegeben wurden.
Zelle Datenerfassung!C23 gibt an, wieviele Torhüter eingegeben wurden.
Es gibt 38 Spieltage.
Es soll also so sein, das wenn in Datenerfassung 5 Spieler erfasst wurden, also in der Zelle Datenerfassung!G22 eine 5 steht, in der Tabelle Spieltagausw. auch nur die Spieler 1-5 angezeigt werden.
Werden mehr als 14 erfasst, sollen auch in Spieltagausw. alle Zeilen eingeblendet sein.
Beim zweiten soll wenn in Datenerfassung 2 Torhüter erfasst wurden, also in der Zelle Datenerfassung!C23 eine 2 steht, in der Tabelle Torspieltagausw. auch nur die Spieler 1 und 2 angezeigt werden.
Werden mehr als 3 erfasst, sollen auch in Torspieltagausw. alle Zeilen eingeblendet sein.
Ich hoffe du verstehst was ich meine :-) Ansonsten versuch ich es nochmal mich besser auszudrücken.
http://vflgladbeck.onpw.de/Excel/Datenerfassung.jpg
http://vflgladbeck.onpw.de/Excel/Torspieltagausw..jpg
http://vflgladbeck.onpw.de/Excel/Spieltagausw..jpg
Viele Grüße Kai
AW: Bereiche ein-/ausblenden
06.10.2008 20:17:00
Erich
Hallo Kai,
nun habe ich mich doch noch durchgerungen, anhand der JPGs die Prozedur zu überprüfen,
auch wenn ich diese Grafiken anstelle einer testfähigen Excelmappe für eine Zumutung halte.
Das soll nicht heißen, dass ich so weiter mitmachen werde.
In der Prozedur werden nur die per JPG gezeigten Blätter bearbeitet, die anderen sind deaktiviert.
Teste mal

Option Explicit         ' IMMER ZU EMPFEHLEN
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")
' ----------------------------------------------- deaktiviert, da unklar
'         If intA = 0 Then
'            .Rows("1:41").Hidden = True
'            wksS.Columns(1).Resize(, 22).Hidden = True
'         ElseIf intA  0 Then     ' einblenden intS Spieler (Zeilen 3 bis 3+intS-1)
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  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

AW: Bereiche ein-/ausblenden
07.10.2008 16:57:23
Kai
Hallo Erich,
du hattest geschrieben, das du die Struktur nicht kennst, deshalb hatte ich das mit den Bildern gemacht, du kannst die komplette Datei auch einsehen, da ich sie später in meinem Forum als konstenlosen Download anbieten werde. Da die Datei für hier zu groß ist, habe ichd en Link angehängt.
Sollte es irgendwelche Probleme geben, wie mit den Bildern, dann schreib einfach, ich werde es dann ändern.
Das von dir umgeschriebene funktioniert einwandfrei, allerdings funktioniert jetzt Torschützen gesamt und das ausblenden Torschützen Spielt. auch nur noch wenn die Zahl kleiner wird, das war vorher auch so, das es in beide Richtungen ging.
Trotzdem vielen Dank für deine Hilfe, auch wenn es mit den Bilder doof war, der Teil funktioniert super!
Dann gibt es noch drei weitere Makros, dich ich mit in das von dir geänderte einbauen möchte:

If Target.Address = "$A$28" Then
If Target.Value 


Leider bekomme ich es nicht hin dafür eine Schleife zu bauen.
Das zweite:


Dim intG As Integer, wksU As Worksheet, wksZ As Worksheet
intG = Cells(28, 1)
Set wksU = Sheets("Torspieltagausw.")
Set wksz = Sheets("Torschützen Spielt.")
With Sheets("Spieltagausw.")
If intG = 0 Then
.Rows("1:684").Hidden = True
wksU.Rows("1:303").Hidden = True
wksZ.Rows("1:43").Hidden = True
Else
.Rows("1:" & intG * 18).Hidden = False
wksU.Rows("1:" & intG * 8).Hidden = False
wksZ.Rows("1:" & intG).Hidden = False
If intG 


Hier ist das Problem, das die gleichen Zellen wie bei dem von dir veränderten ausgeblendet werden sollen. Unabhängig voneinander funktionieren beide, allerdings sollen zunächst die Spieltage ausgeblendet und dann nur an dem angezeigten Spieltag die Anzahl der bisher eingegebenen Spieler angezeigt werden.
Sind beide gleichzeitig aktiviert, wird natürlich entweder die richtige Spieltagsanzahl oder Spieleranzahl angezeigt, da else ja immer wieder den Rest einblendet.
Das dritte Problem ist, das ich noch folgendes Makro habe, das auch mit eingebunden werden sollte, allerdings würde ich es gerne übersichtlicher machen und so wie in Makro 2 schreiben, allerdings ist das Problem, das der Wert der Zelle, die das ausblenden bedingt, nicht immer genau um 1 größer wird.


If Target.Address = "$A$28" Then
If Target.Value 


Wenn du dir die Datei mal ansehen solltest, wäre es toll wenn du dir mal die Makros in Spielerausw. und Torspielerausw. angucken könntest, da ich dort auch die Schleifen nicht hinbekomme.
Sollte ich wieder mal zuviel geschrieben haben und dich mit zuvielen Problemen belästigen, wäre es toll wenn du mir so hilfst wie du Lust hast.
Bin um jede Hilfe ob groß oder klein dankbar!!
PW: 123
http://vflgladbeck.onpw.de/Excel/Spielauswertungsbogen.zip
Viele Grüße Kai

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige