Gültigkeit / Autofilter / sichtbare Zeilen

02/09/2008 - 22:03 von Eberhard Funke | Report spam
Hallo,

Tabelle 1:
in Zeile 1 Überschriften
A2:A10 irgendetwas (belanglos)
B2:B10 hier werden per Makro Gültigkeiten eingebaut
C2:C10 die Buchstaben a, b oder c (als Filterkriterien)

Tabelle 2:
A1:A10 Namen (Peter usw.)
Der Bereich ist mit Klasse benamt.

Im Klassenmodul von Tabelle 1:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B11")) Is Nothing Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=Klasse"
.ShowInput = True
.ShowError = True
End With
End If
End Sub

Damit können in B2:B10 - und nur dort! - mittels der Gültigkeit Namen aus
dem Bereich "Klasse" eingetragen werden.

Auf A1:C1 wird ein Autofilter gesetzt.

Jetzt wird in Spalte C nach dem Buchstaben a gefiltert.
Der sichtbare Bereich wird markiert --> F5 --> Inhalte --> nur sichtbare
Zeilen. (dieser Bereich soll selektiv kopiert und in einem anderen Blatt
eingefügt werden.)

Anschliessend wird im Filter der Spalte C "alle" angewàhlt.

Wenn ich jetzt irgendeine Zelle in einer Zeile mit einem a in Spalte C
(danach wurde oben gefiltert) selektiere, wird das DropDown für die
Gültigkeit angezeigt (was wegen des Intersect nicht sein sollte).

Gebe ich einen Haltpunkt auf die Codezeile "If Not Intersect...", dann
springt der Code von dieser Zeile direkt zu End IF, d. h. der ganze
Validation-Teil wird nicht ausgeführt - und dennoch wird in der Tabelle die
Gültigkeit eingebaut.

Wie làsst sich das verhindern?

Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
 

Lesen sie die antworten

#1 {Boris}
02/09/2008 - 22:43 | Warnen spam
Hi Eberhard,

On 2 Sep., 22:03, Eberhard Funke wrote:
Hallo,

Tabelle 1:
in Zeile 1 Überschriften
A2:A10 irgendetwas (belanglos)
B2:B10 hier werden per Makro Gültigkeiten eingebaut
C2:C10 die Buchstaben a, b oder c (als Filterkriterien)

Tabelle 2:
A1:A10 Namen (Peter usw.)
Der Bereich ist mit Klasse benamt.

Im Klassenmodul von Tabelle 1:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B11")) Is Nothing Then
  With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
      Operator:=xlBetween, Formula1:="=Klasse"
    .ShowInput = True
    .ShowError = True
  End With
End If
End Sub

Damit können in B2:B10 - und nur dort! - mittels der Gültigkeit Namen aus
dem Bereich "Klasse" eingetragen werden.

Auf A1:C1 wird ein Autofilter gesetzt.

Jetzt wird in Spalte C nach dem Buchstaben a gefiltert.
Der sichtbare Bereich wird markiert --> F5 --> Inhalte --> nur sichtbare
Zeilen. (dieser Bereich soll selektiv kopiert und in einem anderen Blatt
eingefügt werden.)

Anschliessend wird im Filter der Spalte C "alle" angewàhlt.

Wenn ich jetzt irgendeine Zelle in einer Zeile mit einem a in Spalte C
(danach wurde oben gefiltert) selektiere, wird das DropDown für die
Gültigkeit angezeigt (was wegen des Intersect nicht sein sollte).

Gebe ich einen Haltpunkt auf die Codezeile "If Not Intersect...", dann
springt der Code von dieser Zeile direkt zu End IF, d. h. der ganze
Validation-Teil wird nicht ausgeführt - und dennoch wird in der Tabelle die
Gültigkeit eingebaut.

Wie làsst sich das verhindern?



Durch die F5-Aktion mit "Nur sichtbare Zellen" wird das Selection-
Change ausgelöst. Die Prüfung

If Not Intersect(Target, Range("B2:B11")) Is Nothing Then

ergibt demnach WAHR und es folgt

With Selection.Validation

Die Selection bezieht sich jetzt aber auf ALLE sichtbaren Zellen - und
so wird in *jeder* Zelle bis Zeile 65536 die Validation zugewiesen.

Abhilfe:

With Intersect(Target, Range("B2:B11")).Validation

Grüße Boris

Ähnliche fragen