Registriert seit: 03.04.2020
Version(en): Office 365 und 2010
Hallo liebe Excel Gemeinde,
komme einfach nicht weiter bei einer vermutlich ganz einfach zu lösenden Aufgabe:
In Tabelle 3 im Modul 6 steht dieser Code (es sollen in Tabelle3 (="Ermittlung") die Zeilen 1 bis 600 dann ausgeblendet werden, wenn die darin enthaltenen Formeln das Ergebnis ("") liefern oder dann eingeblendet werden, wenn die Zellen durch ein Formelergebnis mit einem Wert gefüllt werden):
Private Sub Worksheet_Calculate()
Dim i As Long
With Tabelle3
For i = 1 To 600
If Sheets("Ermittlung").Cells(i, 1) = "" Then
Rows(i).Hidden = True
End If
Next
For i = 1 To 600
If Sheets("Ermittlung").Cells(i, 1) <> "" Then
Rows(i).Hidden = False
End If
Next
End With
End Sub
Der Code funktioniert nur, wenn ich ihn explizit aufrufe und starte. Er soll jedoch automatisch diese Änderung (das Ein- und Ausblenden der Zeilen) durchführen, wenn eine Zelle neu berechnet wird. Was kann ich tun?
Danke im Voraus und Grüße
NobX
Registriert seit: 05.09.2017
Version(en): 2013
Hallo,
das ist ein Event-Makro und gehört ins Codemodul des Tabellenblattes, auf dem es sich auswirken soll und nicht in ein allgemeines Modul.
Code:
Private Sub Worksheet_Calculate()
Dim i As Long
For i = 1 To 600
Rows(i).Hidden = IIf(Cells(i, 1).Value = "", True, False)
Next i
End Sub
Dir ist klar, dass das Makro bei
jeder Formelberechnung
irgendwo auf dem Tabellenblatt ausgelöst wird und nicht nur, wenn sich das Formelergebnis in A1 bis A600 ändert?
Gruß Werner
Registriert seit: 03.04.2020
Version(en): Office 365 und 2010
Hallo Werner,
vielen Dank für Deine Arbeit.
Habe es auprobiert: es funktioniert für die erste Eingabe, bei der zweiten Eingabe hängt sich Excel auf. Es werden nicht die Zellen ausgeblendet und die hinterlegten Formeln sind alle gelöscht. Dies ist kein Problem, da ich das eh nur mit einer Testversion versucht habe. Da muss ich einen ganz anderen Ansatz finden. - Danke dennoch
Grüße
NobX
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
kannst es ja mal damit testen:
Private Sub Worksheet_Calculate()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To 600
Rows(i).Hidden = Cells(i, 1).Value = ""
Next i
Application.ScreenUpdating = True
End Sub
Gruß Uwe
Registriert seit: 03.04.2020
Version(en): Office 365 und 2010
Hallo Uwe,
danke Für Deinen Code. Nach Ausführung kommt immer die Meldung: "Fehler beim Kompilieren: Nach End Sub, End Function oder End Property können immer nur Kommentare stehen". Ich habe versucht noch nach der Deklaration der Objektvariablen "i" den Zusatz: With Tabelle3 und vor End Sub natürlich End With einzubauen. Dann kam die Meldung zwar nicht, - Excel hat sich dafür aber aufgehangen.
Ich weiss auch nicht mehr, was ich noch machen soll. Offensichtlich besteht der Knackpunkt beim Sortieren der Daten darin, dass zwischen den Zeilen mit Inhalt eben meistens Leerzeilen sind, in denen Formeln nur dann Ergebnisse liefern, wenn eine Auswahl auf einem anderen Tabellenblatt getroffen wurde, - wenn keine Auswahl getroffen wurde, sind die Ergebnisse "". Wenn es etwas bringt, kann ich die Ergebnisse alternativ als "0" ausgeben lassen oder mit einem beliebigen andern Ergebnis wie z. B. NV oder andere Excel - Fehlermeldungen.
Vielleicht fällt Euch noch etwas ein.
Grüße
NobX
Registriert seit: 26.07.2017
Version(en): 365
Hi,
lade doch mal einen anonymisierte Version deiner Datei hoch, dann ist es für alle Helfer einfacher, zu prüfen, woran das liegt.
Herzliche Grüße aus dem Rheinland
Jörg
[Windows 10, Microsoft 365]
Registriert seit: 03.04.2020
Version(en): Office 365 und 2010
06.08.2020, 18:20
(Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2020, 18:29 von WillWissen.
Bearbeitungsgrund: Codetags
)
Hallo zusammen,
ich konnte es mit Eurer Hilfe nun selbst lösen. Danke. Die Datei kann ich leider nicht hochladen, da hier zu viele vertrauliche Daten der Firma draufstehen, - wenn ich die alle lösche, wisst Ihr nicht mehr was ich wollte. - Leider.
Mit folgender Lösung klappt es nun, dass sich die Zeilen bei jeder Änderung einer Formel auf diesem Blatt selbst aus- oder einblenden, wenn die Formel ein Ergebnis bringt:
Code:
Private Sub Zeilen_ein_ausblenden_Change()
Dim Zeile As Integer
Dim i As Integer
On Error Resume Next
For Zeile = 1 To 600
With Tabelle3
.Rows(Zeile).Cells.EntireRow.Hidden = False
End With
Next Zeile
Application.ScreenUpdating = False
With Tabelle3
For i = 1 To 600
If Cells(i, 1).Value = "" Then
Rows(i).Hidden = True
End If
Next i
Application.ScreenUpdating = True
End With
Range("A1").Select
End Sub
Danke nochmals
Grüße
NobX