Registriert seit: 27.01.2023
Version(en): Office 365
Hallo liebe Gemeinde, ich habe mir eine Tabelle gebaut, welches 2 Print-Seiten zum ausdrucken enthält. Eine Konfiguration für die MBE und eine Konfiguration für die DDC. Nicht jede Zeile ist für jede Konfiguration notwendig, so gibt es ein Sheet PropertyList, wo in 2 Spalten mittel einem "x" die benötigten Zeilen eingeblendet werden. Zeilen, die kein Kreuz enthalten, werden ausgeblendet. Mein Problem ist jetzt, dass wenn ich ein oder mehrere Kreuze setze oder lösche, der Wartekreisel kommt und die Tabelle auf "Keine Rückmeldung" geht. Habt Ihr eine Idee, wo mein Fehler liegen könnte? Code in Module: Code: Option Explicit
Sub ZeilenAusblenen() 'In diesem Programm sollen Zeilen ausgeblendet werden, wenn ein x als Bedingung erfüült ist
Dim i, j As Integer i = 5 j = 5
Application.ScreenUpdating = False
For i = 5 To 472 If Worksheets("PropertyList").Cells(i, 1).Value = "" Then Worksheets("Print_MBE").Rows(i + 6).Hidden = True Else Worksheets("Print_MBE").Rows(i + 6).Hidden = False End If Next i
For j = 5 To 472 If Worksheets("PropertyList").Cells(j, 2).Value = "" Then Worksheets("Print_DDC").Rows(j + 6).Hidden = True Else Worksheets("Print_DDC").Rows(j + 6).Hidden = False End If Next j
Application.ScreenUpdating = True 'Range("").Select
End Sub
Code in der Tabelle PropertyList Code: Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A5:A500")) Is Nothing Then ZeilenAusblenen End If
If Not Application.Intersect(Target, Range("B5:B500")) Is Nothing Then ZeilenAusblenen End If
End Sub
Vielen Dank für Eure Ideen Andreas
26865
Nicht registrierter Gast
Bei jedem Eintrag prüfst du ALLE Zellen im Bereich A5:B472 auf ihren Inhalt und veranlasst Änderungen. Über das Change-Ereignis weißt du aber doch, welche Zelle(n) geändert wurde(n). Du brauchst doch ausschließlich diese zu prüfen und entsprechend ein- oder ausblenden.
Optional kannst du noch versuchen, Berechnungen während des Ablauf der Prozedur ZeilenAusblenen auf "manuell" zu stellen und danach wieder auf den vorher eingestellten Wert.
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• Candalfo
Registriert seit: 28.08.2022
Version(en): 365
Hi,
wenn ich versuche den Problem nachzustellen, läuft dein Programm im Bruchteil einer Sekunde durch. Daran liegt es also nicht. Allerdings muss ich EarlFred recht geben, dass es völlig überflüssig ist alle Zeilen durchzugehen. von daher könnte man hier locker Zeit einsparen.
Um die eigentlich Ursache zu finden: stell doch bitte mal eine Beispieldatei hier ein, bei der das Phänomen auftritt.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Registriert seit: 27.01.2023
Version(en): Office 365
Hallo zusammen, vielen Dank für Eure Informationen. Da ich noch auf meinen ersten Metern mit VBA bin, sind bei mir noch ein paar Verständnisprobleme aufgetreten. Zu Anfang hat die Tabelle bei mir auch schneller funktioniert. Kollegen hatten mir berichtet, dass sie Abstürze hatten. Nachdem ich ein paar Formatierungen im Printbereich gemacht habe, kam das Problem reproduzierbar bei mir auf. Meine Tabelle habe ich hier:
BACNET_Objektlist_VS_1_0_0.xlsm (Größe: 368,83 KB / Downloads: 1)
Habe ich EarlFred richtig verstanden, es wäre besser das Change-Ereignis ins Modul zu verschieben und die Prüfung der einzelnen Zellen zu unterlassen? Viele Grüße Andreas
26865
Nicht registrierter Gast
(14.02.2023, 12:18)Candalfo schrieb: Habe ich EarlFred richtig verstanden, es wäre besser das Change-Ereignis ins Modul zu verschieben und die Prüfung der einzelnen Zellen zu unterlassen? Irgendwelche Prozeduren wahllos irgendwohin zu verschieben hat EarlFred garantiert nicht gesagt und noch garantierter nicht gemeint. Was er gesagt und gemeint hat: Prüfe nur die Zellen, die du auch wirklich geändert hast. Wenn du A3 änderst, musst du nicht prüfen, was in A9 steht - das ist ja nicht geändert, muss also nicht bearbeitet werden. In die Mappe habe ich noch nicht geschaut, dafür fehlt mir die Zeit, muss los.
Registriert seit: 28.08.2022
Version(en): 365
Hi, du musst einfach lange genug warten, dann meldet sich Excel zurück. Das liegt daran, dass du jede Zeile einzeln ausblendest. Das dauert einfach. Um es zu beschleunigen, solltest du EralFreds Vorschlag umsetzen. Wenn ich es programmieren müsste, würde ich es so machen: Code: Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim Zelle As Range Dim Bereich As Range Set Bereich = Intersect(Target, Range("A5:B500")) If Not Bereich Is Nothing Then For Each Zelle In Bereich Worksheets("Print_" & IIf(Zelle.Column = 1, "MBE", "DDC")).Rows(Zelle.Row + 6).Hidden = Zelle = "" Next Zelle End If End Sub
Dieser Code gehört ins Codemodul von PropertyList.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 2 Nutzer sagen Danke an HKindler für diesen Beitrag:2 Nutzer sagen Danke an HKindler für diesen Beitrag 28
• , Candalfo
26865
Nicht registrierter Gast
(14.02.2023, 13:02)HKindler schrieb: Wenn ich es programmieren müsste, würde ich es so machen: Endlich jemand, der nicht den kompletten Code abbricht, wenn mehr als eine Zelle geändert wird. Danke dafür!
Registriert seit: 27.01.2023
Version(en): Office 365
Irgendwelche Prozeduren wahllos irgendwohin zu verschieben hat EarlFred garantiert nicht gesagt und noch garantierter nicht gemeint. --> ...ich würde es als "hilflos" bezeichnen, aber wie schon gesagt...aller Anfang ist schwer  Was er gesagt und gemeint hat: Prüfe nur die Zellen, die du auch wirklich geändert hast. Wenn du A3 änderst, musst du nicht prüfen, was in A9 steht - das ist ja nicht geändert, muss also nicht bearbeitet werden. --> Soweit ich das Change-Ereignis verstanden habe, gibt es mir aber keinen Wert zurück. Woher weiß ich denn, welche Zelle von den 2x 400 sich geändert hat? Wenn ich diesen Wert hätte, könnte ich mir vorstellen, über die Zeilenadresse die Zeile auszublenden. Allerdings wäre ich hier wieder bei der selben IF-Anweisung.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, ein anderer hätte sich für die Unterstützung bedankt statt Helfer als hilflos zu bezeichnen ...
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 13.04.2014
Version(en): 365
Hi, Zitat:Soweit ich das Change-Ereignis verstanden habe Du hast es eher nicht verstanden: worksheet-change-ereignis
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr! Über Rückmeldungen würde ich mich freuen.
|