Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1324to1328
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Übergabe Public-Variable

Übergabe Public-Variable
19.08.2013 15:36:22
Peter
Hallo!
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?

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übergabe Public-Variable
19.08.2013 17:13:28
{Boris}
Hi Peter,
If Sortieren = True then Exit Sub
Meinst Du dieses = ?
Und diese Zeile ist auch nicht kopiert - denn das then ist klein geschrieben...?!
VG, Boris

AW: Übergabe Public-Variable
19.08.2013 17:16:31
Peter
Ja, ist nicht kopiert, weil ich das im Nachhinein reingeschrieben habe. Aber ja, ich meine diese "=".
Das Ganze funktioniert übrigens, wenn ich Application.EnableEvents = False am Anfang und Application.EnableEvents = True am Ende des Sortieren-Scripts platziere. Demnach habe ich mittlerweile eine Lösung für "mein" Problem. Dennoch sollte die oben verzeichnete Methode eigentlich auch funktionieren auf grund der übergeordneten Public-Variablen. Tut es aber nicht...

Anzeige
AW: Übergabe Public-Variable
19.08.2013 19:08:10
Stefan
Auch Hallo,
Du verwendest für einen Variablennamen den gleichen wie für einen Prozedurnamen. Das geht nicht. Versuchs mal so
  Public Sortieren as Boolean
Sub prcSortieren()
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

Anzeige
AW: Übergabe Public-Variable
19.08.2013 19:14:46
{Boris}
Uups... - das hab ich mal total übersehen...
Du hast natürlich so was von Recht!
VG, Boris

AW: Übergabe Public-Variable
20.08.2013 12:24:37
Peter
Ojeeee.....senil.....ja, danke!

AW: Übergabe Public-Variable
20.08.2013 15:53:56
Peter
Zu früh gefreut....geht nicht!

AW: Übergabe Public-Variable
20.08.2013 16:01:16
{Boris}
Hi Peter,
Jetzt gibt es da einen Fehler. Das "=" wird im Debug-Modus markiert und es wird ausgespuckt: "Typen unverträglich"
dürfte sich doch erledigt haben.
Was geht jetzt nicht?
VG, Boris

AW: Übergabe Public-Variable
21.08.2013 12:05:43
Peter
Hallo Boris!
Leider ist es der gleiche Fehler wieder...
Also, grundsätzlich habe ich mein Problem gelöst mit Application.EnableEvents = False/True. Aber mir ist dennoch nicht verständlich, wieso die andere Variante den Fehler ausspuckt.

Anzeige
AW: Übergabe Public-Variable
21.08.2013 17:18:07
Stefan
Hallo Peter,
laß mal deinen aktuellen Code sehen, denn so wird es ein Stochern im Nebel. Und benenne den Fehler, denn wie Boris schon geschrieben hat, dürfte der Fehler mit "Typen unverträglich" erledigt sein.
Gruß Stefan

AW: Übergabe Public-Variable
22.08.2013 11:35:04
Peter
Hi Stefan!
Du, der Code steht oben. Ich habe nur den Prozedurnamen "Sortieren" in einen anderen geändert, damit er nicht der Variablen gleicht.
Und - wie gesagt - ich habe den Code innerhalb der Events aus den Zabellenblättern rausgelegt in ein Modul und rufe ihn in den Arbeitsblättern halt auf. Hintergrund: Ich erzeuge viele Tabellenblätter und möchte eventuell im Nachhinein noch Kleinigkeiten ändern/ergänzen, durch mein Verfahren muss ich nur einmal was ändern und nicht für jedes Blatt einzeln.
Dazu kommt noch ein Private Sub Worksheet_Activate(), was möglicher Boris, dass es dem Deactivate-Abbruch entgegensteuert. Innerhalb der Activate-Prozedur erledige ich auch noch ein-zwei Kleinigkeiten, auf die ich nicht verzichten will.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige