Übergabe Public-Variable
19.08.2013 15:36:22
Peter
Ich habe in einer Arbeitsmappe mehrere Tabellenblätter und mehrere Module. Ein Modul ist für Sortierfunktionen reserviert. Sortiert wird bei mir eine Liste im Tabellenblatt X (eine Art Übersichtsblatt) mit Schaltflächen (Knöpfen). Das Tabellenblatt X ist geschützt und alle Zellen sind gesperrt. Dort werden quasi nur per VBA Daten eingefügt. Allerdings kann eben mit (nicht gesperrten) Knöpfen sortiert werden.
Jetzt hat meine Arbeitsmappe jede Menge Tabellenblätter neben dem Tabellenblatt X. So kam ich auf die Idee, dem Tabellenblatt X ein Worksheet-SelectionChange zu verpassen.
****** steht im dazugehörigen Tabellenblatt X ******
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Blattname As String
On Error Resume Next
If Not Intersect(Target, Range("B7:B1006")) Is Nothing Then
Blattname = Cells(Target.Row, Target.Column + 7).Value
If IsEmpty(Blattname) = True Or Blattname = "" Then Exit Sub
Worksheets(Blattname).Activate
Else
Exit Sub
End If
End Sub
Über den Weg klicke ich also auf eine Zelle in der B-Spalte und es springt auf ein Tabellenblatt, dessen namen eben dem Zellinhalt entspricht, wie im Quelltext "beschrieben".
So, nun funkt mir aber die Sortierfunktion dazwischen.
******* steht in einem Modul *******
Sub Sortieren()
On Error Resume Next
ThisWorkbook.Worksheets("X").Sort.SortFields.Clear
ThisWorkbook.Worksheets("X").Sort.SortFields.Add Key:=Range( _
"B7:B1006"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ThisWorkbook.Worksheets("X").Sort
.SetRange Range("B6:I1006")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
An sich nichts Außergewöhnliches, aber tatsächlich wird ja früher oder später die B-Spalte sortiert und somit aktiviert und schon habe ich wohl ein SelectionChange in der für den SelectionChange-relevanten Spalte B.
Das habe ich versucht auszubügeln:
******* steht in einem Modul *******
Public Sortieren as Boolean
Sub Sortieren()
On Error Resume Next
Sortieren = True
ThisWorkbook.Worksheets("X").Sort.SortFields.Clear
ThisWorkbook.Worksheets("X").Sort.SortFields.Add Key:=Range( _
"B7:B1006"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ThisWorkbook.Worksheets("X").Sort
.SetRange Range("B6:I1006")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sortieren = False
End Sub
****** steht im dazugehörigen Tabellenblatt X ******
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Blattname As String
On Error Resume Next
If Sortieren = True then Exit Sub
If Not Intersect(Target, Range("B7:B1006")) Is Nothing Then
Blattname = Cells(Target.Row, Target.Column + 7).Value
If IsEmpty(Blattname) = True Or Blattname = "" Then Exit Sub
Worksheets(Blattname).Activate
Else
Exit Sub
End If
End Sub
Jetzt gibt es da einen Fehler. Das "=" wird im Debug-Modus markiert und es wird ausgespuckt: "Typen unverträglich"
Hat jemand eine Ahnung, wo der fehler liegt?