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 - Sortierung Laufzeitfehler 1004
#1
Hi Leute,

ich stehe total auf dem Schlauch. Ich habe eine Userform, in der eine zuvor alphabetisch sortierte Mitarbeiterliste in eine Kombobox eingelesen werden soll. Hierzu kopiere ich zunächst die Liste auf ein anderes Tabellenblatt ("Zwischenspeicher"), sortiere sie und lese sie dann ein.

Wenn das Blatt "Zwischenspeicher" aktiviert ist, kann ich die Userform öffnen und die Dateien sind vorhanden ... Wenn ich eins der anderen 60 Blätter offen habe, zeigt er mir allerdings Laufzeitfehler 1004 an :/

Kann jemand mal drüberschauen, wo es hakt? Mir wird leider keine gelbe Zeile im VBA-Editor angezeigt sondern nur die msg-Box mit dem Lautzeitfehler. Das sind die wesentlichen Bereiche des Initialize-Subs



Code:
Private Sub UserForm_Initialize()
Dim letzte_Zeile As Integer
Dim i As Integer

letzte_Zeile = ThisWorkbook.Sheets("Mitarbeiter").Cells(Rows.Count, 1).End(xlUp).Row

'Kopieren der Mitarbeiter in Zwischenspeicher
With ThisWorkbook.Sheets("Mitarbeiter")
       .Range("B8:B" & letzte_Zeile).Copy _
       Destination:=ThisWorkbook.Sheets("Zwischenspeicher").Range("M8")
End With

'Alphabetisch sortieren
ThisWorkbook.Sheets("Zwischenspeicher").Range("M8:M" & letzte_Zeile + 1).Sort Key1:=Range("M8"), Order1:=xlAscending, Header:=xlGuess, _
   OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

'Befüllt die Kombobox
With Combo_suche
   .RowSource = "Zwischenspeicher!M9:M" & letzte_Zeile
End With

End Sub


Vielen Dank im voraus :)


Gruß Tim

P.S.: Achso, ich weiß nicht, ob Laufzeitfehler 1004 immer gleich ist. Bei mir steht, dass der Sortierbezug ungültig sei. Ich möge überprüfen ob sich der Bezug innerhalb der markierten Daten befindet und ob das Feld "Sortieren nach" nicht den gleichen Bezug oder leer ist.
Antworten Top
#2
Hi

Versuch es mal damit.
Code:
'Alphabetisch sortieren
ThisWorkbook.Sheets("Zwischenspeicher").Range("M8:M" & letzte_Zeile + 1).Sort Key1:=Sheets("Zwischenspeicher").Range("M8"), Order1:=xlAscending, Header:=xlGuess, _
   OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Gruß Elex

Sonst BSP.Datei. Keine Lust es nach zu bauen.
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • EasY
Antworten Top
#3
Ich würde sagen, das Problem liegt am Key1:=Range("M8"). Da du kein Tabellenblatt angibst, wird das aktive Tabellenblatt hergenommen. Und wenn dort drin nix bzw. nix sinnvolles steht, dann klappt das Sortieren auch nicht. Daher
Code:
With ThisWorkbook.Sheets("Zwischenspeicher")
    .Range("M8:M" & letzte_Zeile + 1).Sort Key1:=.Range("M8"), Order1:=xlAscending, Header:=xlGuess, _
       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • EasY
Antworten Top
#4
Oh Mann,

danke euch beiden. Bin immer davon ausgegangen, dass der Bezug innerhalb des Sort-Befehls bestehen bleibt. Ist zwar irgendwie unlogisch, wieso es diese "Möglichkeit" überhaupt gibt ... wird aber wohl sowas sein wie

"It's not a Bug, it's a Feature!"
Antworten Top
#5
Das ist tatsächlich kein Bug. Es gilt nämlich generell in VBA, dass ohne weitere Angabe das aktuell sichtbare Blatt angesprochen wird. Das zieht sich komplett durch, nicht nur bei der Sortieranweisung. Beispiel:

Code:
Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
Wird dabei ein anderes Blatt als Tabelle1 angezeigt, gilt "Rows.Count" für das angezeigte Blatt.

Meistens fällt das "Problem" nicht auf, da Code häufig in dem Blatt ausgeführt wird, für den er gedacht ist. Aber manchmal fällt man eben drüber.
Schöne Grüße
Berni
Antworten Top


Gehe zu:


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