Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel Makro geht immer sehr lange in "Keine Rückmeldung"
#1
   

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
Antworten Top
#2
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.
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
[-] Folgende(r) 1 Nutzer sagt Danke an EarlFred für diesen Beitrag:
  • Candalfo
Antworten Top
#3
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
Antworten Top
#4
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: 
.xlsm   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
Antworten Top
#5
(14.02.2023, 11: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.
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
Antworten Top
#6
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:
  • EarlFred, Candalfo
Antworten Top
#7
(14.02.2023, 12: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!
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
Antworten Top
#8
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 Smile

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.
Antworten Top
#9
Hallöchen,

ein anderer hätte sich für die Unterstützung bedankt statt Helfer als hilflos zu bezeichnen ... 20
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
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.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • Candalfo
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste