Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
860to864
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
860to864
860to864
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

860to864: Sort-Methode, Laufzeitfehler 1004

Sort-Methode, Laufzeitfehler 1004
06.04.2007 13:53:36
Frank
Hallo aus Bremen,
.
ich bastele bereits seit längerer Zeit an einer Vereins-Mitgliederverwaltung mit Excel 97. Die Datei ist bereits über viele Jahre entstanden und durch ständig neue Anforderungen gewachsen. Irgendwann kam auch der Schritt der Automatisierung uber VBA hinzu. Aus dem gesamten Datenbestand werden Altersstatistiken, Charts usw. erzeugt, sowie eine auf das Wesentliche reduzierte Liste für die Mitglieder. Bereits "fertige" Excel-Versionen mit VBA-Unterstützung decken naturgemäß nicht immer alle Anforderungen ab, so auch nicht in meinem Fall. Ein Datenbankprogramm scheidet aus Kostengründen und der damit verbundenen, erneuten Einarbeitungszeit schlicht und einfach aus. Für die doch relativ wenigen Daten reicht Excel voll aus.
.
Nun mein Problem
Folgendes Makro erzeugt den Laufzeitfehler 1004 "Die Sort-Methode des Range-Objektes ist fehlerhaft."
Leider komme ich einfach nicht auf den Kern dieser Aussage. Knackpunkt sind wohl (?) die Angaben zu Key1 und Key2. Die Foreneinträge hierzu bzw. die Excel-Beispiele haben mir leider auch nicht geholfen. Und die Excel-/VBA-Hilfe wird ihrem Namen auch nicht gerecht.
Ich gebe auch zu, dass sich mir die Variablen-Deklarationen nicht wirklich erschlossen haben.
Lauter Bretter ;-)

Sub sortieren(richtung)
' sortiert den Namen-Bereich "Datenbank" (= Range A4:FF205) in aufsteigender Reihenfolge
'   nach Key1 Nachname und nach Key2 Vorname    04.04.07                              F.T.
Dim rngKey1 As Range
Dim rngKey2 As Range
'On Error GoTo ende
Worksheets("Tabellenansicht").Unprotect
'Application.ScreenUpdating = False
'Application.Goto ActiveSheet.Range("Datenbank")
'Application.Goto Reference:="Datenbank"
'Range("Datenbank").Select
'    Selection.Sort Key1:=Range("E4"), Order1:=richtung, Key2:=Range("C4") _
'        , Order2:=richtung, Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
'        Orientation:=xlTopToBottom
Set rngKey1 = Worksheets("Tabellenansicht").Range("E5")
Set rngKey2 = Worksheets("Tabellenansicht").Range("C5")
Worksheets("Tabellenansicht").Range("Datenbank").Sort _
Key1:=rngKey1, Order1:=richtung, _
Key2:=rngKey2, Order2:=richtung, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Worksheets("Tabellenansicht").Protect
Application.ScreenUpdating = True
ende:
Exit Sub
End Sub
Für die sachdienlichen Hinweise vorab meinen herzlichen Dank.
Gruß & Dank
Frank

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

Betreff
Datum
Anwender
Anzeige
AW: Sort-Methode, Laufzeitfehler 1004
06.04.2007 14:46:00
Peter
Hallo Frank,
lass mal das 'Richtung' im Sub-Aufruf weg, dann sollte es so funktionieren, auch wenn du 'NUR' aufsteigend sortieren kannst:

Sub Sortieren()
Dim lLetzte   As Long
Worksheets("Tabellenansicht").Unprotect
Application.ScreenUpdating = False
If Richtung = "xlAscending" Or _
Richtung = "xlDescending" Then
Else
Richtung = "xlAscending"
End If
With Worksheets("Tabellenansicht")
lLetzte = Range("E65536").End(xlUp).Row
If lLetzte 
Gruß Peter aus HH
AW: Sort-Methode, Laufzeitfehler 1004
06.04.2007 14:57:00
Peter
Hallo Frank,
es muss natürlich so aussehen:

Sub Sortieren()
Dim lLetzte   As Long
Worksheets("Tabellenansicht").Unprotect
Application.ScreenUpdating = False
With Worksheets("Tabellenansicht")
lLetzte = Range("E65536").End(xlUp).Row
If lLetzte 
Gruß Peter
Anzeige
AW: Sort-Methode, Laufzeitfehler 1004
06.04.2007 16:45:51
Frank
Hallo Peter,
herzlichen Dank für die schnelle Hilfe.
Leider hatte ich, in meinem allerersten(!) Beitrag hier, nicht alle Bedingungen genannt.
Mein Wunsch ist es, den Datenbereich, ohne leere "Vorratszeilen", mit einem Klick auf ein CommandButton in die eine, und beim erneuten Klick genau den o. g. Bereich in die andere Richtung sortieren zu lassen. Dafür habe ich die Variable "richtung" eingebaut, die ich in einem 'Privat Sub' und mit Hilfe einer anderen Tabellen-Zelle definiere. Die zuletzt gewählte Richtung wird also jedesmal abgespeichert. So ist's evtl. zu umständlich, aber eine andere Variante war mir bis jetzt nicht bekannt. Interessant ist der Teil um 'lLetzte'.
Die Makros habe ich mal unten zusammengefasst. Mit der Variablen "richtung" besteht das Problem Laufzeitfehler aber immer noch. Wo also liegt das grundsätzliche Problem, "Order1:=" über eine Variable zu definieren?
Gruß & Dank
Frank

Sub CommandButton1_Click()
Dim richtung As Variant
richtung = Sheets("Grundlagen").Range("E7").Value
Select Case richtung
Case "xlDescending"
richtung = "xlAscending"
Sheets("Grundlagen").Range("E7").Value = "xlAscending"
Case "xlAscending"
richtung = "xlDescending"
Sheets("Grundlagen").Range("E7").Value = "xlDescending"
Case Else   ' Andere Werte.
richtung = "xlAscending"
Sheets("Grundlagen").Range("E7").Value = "xlAscending"
End Select
Call Sortieren(richtung)
End Sub


Sub Sortieren(richtung)
Dim lLetzte   As Long
Worksheets("Tabellenansicht").Unprotect
Application.ScreenUpdating = False
With Worksheets("Tabellenansicht")
lLetzte = Range("E65536").End(xlUp).Row
If lLetzte 

Anzeige
AW: Sort-Methode, Laufzeitfehler 1004
06.04.2007 16:59:00
Peter
Hallo Frank,
dan mach es doch so:

Sub Sortieren(Richtung)
Dim lLetzte   As Long
Worksheets("Tabellenansicht").Unprotect
Application.ScreenUpdating = False
With Worksheets("Tabellenansicht")
lLetzte = Range("E65536").End(xlUp).Row
If lLetzte 
Gruß Peter
AW: Sort-Methode, Laufzeitfehler 1004
06.04.2007 17:06:05
Peter
Hallo Frank,
vor den Range habe ich die Punkte vergessen:

Sub Sortieren(Richtung)
Dim lLetzte   As Long
Worksheets("Tabellenansicht").Unprotect
Application.ScreenUpdating = False
With Worksheets("Tabellenansicht")
lLetzte = Range("E65536").End(xlUp).Row
If lLetzte 
Gruß Peter
Anzeige
AW: Sort-Methode, Laufzeitfehler 1004
07.04.2007 12:00:55
Frank
Hallo Peter,
nochmals herzlichen Dank. Aber es funktionierte leider nicht.
Es wurde die Meldung 1004 "Die Sort-Methode des Range-Objektes ist fehlerhaft." zurückgegeben.
Der Ansatz ist gut, erspart er mir doch ein Makro; Der Call-Aufruf wird damit entbehrlich.
Aber: Es läuft nicht. Und der Richtungswechsel der Sortierreihenfolge wird nicht berücksichtigt. Ferner hat Deine Variante weitere Probleme z. B. mit der Unprotect-Methode erzeugt, da bei wiederholtem Aufruf keine Worksheet aktiviert war. Die NICHT-Aktivierung von Worksheets bzw. Range-Bereichen war letztlich auch am Scheitern meiner ersten Versuche verantwortlich, nicht die Sort-Methode selbst. Selekt allein reicht offensichtlich nicht.
Na ja, es hat jedenfalls ganz nebenbei mein bescheidenes Wissen erweitert.
Gruß Frank
Das Makro ist unter „Tabelle1 (Tabellenansicht)“ abgelegt. Mein aktuelles Ergebnis läuft und sieht wie folgt aus:
'In Worksheets("Tabellenansicht") bewirkt Klick auf CommandButton1 über Zelle E4 dass der _
darin enthaltene Datenbereich aufwärts bzw. abwärts sortiert wird. Die zuletzt gewählte _
Sortierrichtung wird in Worksheets("Grundlagen").Range("E7") gespeichert. 5.-7.4.07 F.T.

Private Sub CommandButton1_Click()
Dim lLetzte   As Long
Dim Richtung  As Variant
Worksheets("Tabellenansicht").Select
Worksheets("Tabellenansicht").Range("A4").Select
Worksheets("Tabellenansicht").Unprotect
Application.ScreenUpdating = False
Richtung = Worksheets("Grundlagen").Range("E7").Value
lLetzte = Range("E65536").End(xlUp).Row
If lLetzte 

Anzeige
AW: Sort-Methode, Laufzeitfehler 1004
07.04.2007 12:32:54
Kurt
Hi,
mal ohne select:

Private Sub CommandButton1_Click()
Dim Richtung  As Variant
Dim Richt As Long
Dim lLetzte As Long
Richtung = Worksheets("Grundlagen").Range("E7").Value
If Richtung = "aufsteigend" Then Richt = 1 Else Richt = 2
With Worksheets("Tabellenansicht")
.Unprotect
lLetzte = .Range("E" & .Rows.Count).End(xlUp).Row
If lLetzte 
mfg Kurt
AW: Sort-Methode, Laufzeitfehler 1004
07.04.2007 13:19:00
Frank
Hi Kurt,
danke für Deine Info. Hat aber aus meiner Sicht leider einen kleinen Schönheitsfehler. Nach Durchlauf des Makro bleibt Richtung für immer auf absteigend. Richtung muss aber irgendwie in Abhängigkeit des letzten Wertes = der zuletzt durchlaufenen Richtung neu gesetzt werden. Diese Bedingung berücksichtigst Du leider nicht.
Evtl. speichert Excel ja selbst irgendwo die zuletzt durchlaufene Richtung ab und man könnte dies ggf. auswerten und geschickt nutzen?
Gruß & Dank
Frank
Anzeige
AW: Sort-Methode, Laufzeitfehler 1004
07.04.2007 13:45:24
Kurt
Hi,
da hast du Recht, letzte Zeile vor End Sub ersetzen durch:
With Worksheets("Grundlagen")
if .Range("E7").Value = "absteigend" Then
.Range("E7").Value = "aufsteigend"
Else
.Range("E7").Value = "absteigend"
end if
End with
AW: Sort-Methode, Laufzeitfehler 1004
07.04.2007 16:17:38
Frank
Hi Kurt,
nochmal Danke. Aber auch damit gibt´s Fehlermeldung.
Bitte keine Zeit mehr in dieses Thema investieren.
Meine jetzige Version läuft. Sie ist evtl. nicht sehr Zeilen- bzw. Laufzeit-Effektiv, aber das stört mich jetzt nicht wirklich. Jedenfalls noch nicht.
Dank auch noch mal an alle potenziellen Überleger.
Gruß Frank
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige