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.

VBA: Benutzerdefinierter Autofilter automatisch aktualisieren bei Blattschutz
#1
Hallo liebe Community,

ich habe sämtliche Foren durchforstet und bisher leider nichts gefunden, was mein Problem lösen könnte.
Ich weiß, dass, wenn überhaupt, es nur mit Makros zu lösen ist. Meine Kenntnisse sind eher bescheiden, ich komme klar, indem ich mir alles zusammengoogle und viel dazu lese... :05: Huh 

Nun zu meinem Problem:
ich erstelle eine Datei, die aus mehreren Blättern besteht. Diese soll ein internes Bestellverfahren abbilden.
Auf einem Blatt sind alle Grunddaten aufgeführt, für alle späteren Nutzer ist dieses Blatt ausgeblendet. Auf dem nächsten Blatt sind mit Verweisen die Inhalte dargestellt, die für die Bestellenden notwendig sind und ein Summenfeld. Auch nicht weiter wild.
Danach wird es interessant:
Auf dem folgenden Blatt wird ebenfalls mit Verweisen der gesamte Inhalt des Blattes dargestellt, mit weiteren Spalten für den Controller, der dort die Möglichkeit hat, seine Angaben zu machen.
Hier sollen allerdings mittels Textfilter "entspricht nicht" = "" (einer leeren Zelle) nur die Positionen aufgelistet werden, die bestellt wurden (also nicht leer sind). Beim ersten Versuch klappt es wunderbar. Auch wenn die Zahlen verändert werden. Aber sobald eine Zahl auf 0 gesetzt wird, wird die Zelle in diesem Blatt leer und sollte eigentlich ausgeblendet werden - das passiert allerdings nicht automatisch, sondern nur, wenn man den Filter nochmals manuell ausführt...

Ich verwende den folgenden Code:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

   If Me.FilterMode = True Then
       With Application
          .EnableEvents = False
          .ScreenUpdating = False
       End With

       With ActiveWorkbook
           .CustomViews.Add ViewName:="Mine", RowColSettings:=True
         Me.AutoFilterMode = False
           .CustomViews("Mine").Show
           .CustomViews("Mine").Delete
       End With


        With Application
          .EnableEvents = True
          .ScreenUpdating = True
       End With
   End If

End Sub


Wie muss ich diesen Code verändern/ergänzen, damit auch leere Zeilen ausgeblendet werden...?

Ich hoffe, ihr versteht, was ich zusammengeschrieben habe und könnt mir auch helfen... :s
Antworten Top
#2
Ich habe, um es verständlicher zu machen, eine Datei hochgeladen.

.xlsm   Bestellung_Beispiel.xlsm (Größe: 87,16 KB / Downloads: 5)

Wenn im Blatt "Bestellliste" eine Position komplett auf 0 gesetzt wird, aktualisieren sich die Blätter "Bestellübersicht" und "Bestellung" nicht automatisch.
Antworten Top
#3
Hallo Nana,

für mich sind das zu viele Infos, die wir nicht brauchen und zu wenige die nötig sind.

Versuch bitte an einem konkreten Beispiel zu erklären, was wann wie ablaufen soll und welches Ergebnis Du sehen möchtest.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • nana1984
Antworten Top
#4
Hallo,

ich versuche es...


Wenn im Blatt "Bestellliste" die Zellen I3 - P3 auf 0 setze, so dass die Summe in H3 auch 0 ergibt, soll auf dem Blatt "Bestellübersicht" die Zeile 5 ausgeblendet werden und  auf dem Blatt "Bestellung" die Zeile 7 ausgeblendet werden.



Wenn im Blatt "Bestellliste" die Zelle I2 auf 100 setze, so dass die Summe in H2 122 ergibt, soll auf dem Blatt "Bestellübersicht" die Zeile 5 aktualisiert werden und  auf dem Blatt "Bestellung" die Zeile 7 aktualisiert werden.
Antworten Top
#5

.xlsm   Bestellung_Beispiel.xlsm (Größe: 87,18 KB / Downloads: 5)
Meine ursprüngliche Datei hatte Formelfehler...
Antworten Top
#6
Hallo Nana,

füge folgenden Code:


Code:
Private Sub Worksheet_Activate()
Dim loLetzte As Long
loLetzte = Cells(Rows.Count, 2).End(xlUp).Row 'letzte belegte Zelle in Spalte B zur Feststellung der Höhe der Liste

With ActiveSheet
 .Unprotect
   If .AutoFilterMode Then If .FilterMode Then .ShowAllData
       .Range("A5:F" & loLetzte).AutoFilter Field:=3, Criteria1:="<>" & Empty
 .Protect
End With
End Sub


in das Codefenster der Tabelle Bestellung ein.

Danach setz in Bestellliste eine Zeile auf Null und aktvier die Tabelle Bestellung.
Ist das, so, wie Du es wolltest?
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • nana1984
Antworten Top
#7
Fast!

Ich habe den Code in den Tabellen Bestellübersicht und [b]Bestellung [/b]eingefügt, weil ich die Funktion in beiden Tabellen brauche.

Wenn ich einen Artikel in der Tabelle Bestellliste auf 0 setzte, funktioniert es wunderbar.

Wenn ich z.B. in der Spalte L der Tabelle Bestellübersicht manuell die Position auf null setzte, darf sie in der Tabelle Bestellung auch nicht auftauchen...

In der Tabelle Bestellung ist der Filter bei Anzahl der VPE: entspricht nicht "leer" und ist größer als 0.

In der Tabelle Bestellübersicht ist der Filter bei Artikelbeschreibung: entspricht nicht "leer".




Gruß
nana...
Antworten Top
#8
Hallo Nana,

füge den Code auch mal in die andere Tabelle ein.
Vielleicht reicht das schon.
Gruß Atilla
Antworten Top
#9
Hallo Atilla,

das reicht leider anscheinend nicht :s
Antworten Top
#10
Ich hab's

der Code für die Tabelle Bestellung muss lauten:


Code:
Private Sub Worksheet_Activate()
Dim loLetzte As Long
loLetzte = Cells(Rows.Count, 2).End(xlUp).Row 'letzte belegte Zelle in Spalte B zur Feststellung der Höhe der Liste

With ActiveSheet
.Unprotect
  If .AutoFilterMode Then If .FilterMode Then .ShowAllData
      .Range("A3:F" & loLetzte).AutoFilter Field:=2, Criteria1:="<>" & Empty, Operator:=xlAnd, Criteria2:="<>0" & Empty
.Protect
End With
End Sub


Danke für Deine Hilfe, Attila!
Antworten Top


Gehe zu:


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