Microsoft Excel

Herbers Excel/VBA-Archiv

Laufzeitfehler 1004

Betrifft: Laufzeitfehler 1004 von: joschy
Geschrieben am: 18.08.2014 11:00:26

Hallo Leute, nachdem ich schon einen alten Thread zu diesem Thema aus dem Jahre 2005 studiert habe, muss ich jetzt hier doch mal posten, da ich nicht mehr weiter komme.
Also ich sitze an nem Plan für ein Fußballturnier und da sollen die Abschlusstabellen eben sortiert werden nach Punkten und Tordifferenz und so eben... ;)

Und dafür hab ich so ne grobe Vorlage und meine komplett eigene Version. Und bei meinem Makro kommt dieser Laufzeitfehler: "Für diese Aktion müssen alle verbundenen Zellen dieselbe Größe haben."
Jetzt hab ich in meinem Plan aber bereits die Zellenhöhe und auch -breite schon auf für alle Zellen gleich gesetzt.
Ich hab auch gelesen, dass man verbundene Zellen garnich verschieben könnte (und beim sortieren wird ja verschoben oder?! :D) Aber wieso geht das dann in meiner Vorlage??
Langsam bin ich echt ratlos und um jede Hilfe dankbar! :)

Hier der Link zu meinem Dokument: https://www.herber.de/bbs/user/92169.xlsm

Und hier zu der funktionierenden Vorlage: https://www.herber.de/bbs/user/92170.xlsm

  

Betrifft: AW: Laufzeitfehler 1004 von: fcs
Geschrieben am: 18.08.2014 13:54:53

Hallo Joschy,

das Problem ist, dass dein Makro "VorSort" immer im aktiven Sortiert.
Ist das Blatt "Spielplan aktiv, dann befinden sich im zu sortierendne Bereich verbundene Zellen (z.B. M5:N5). Du musst im Makro entweder das Blatt "Berechnung" zu Beginn aktivieren oder wie nachfolgend den Bezug für alle Range/Cells zum korrekten Tabellenblatt herstellen.

Gruß
Franz

Sub VorSort()
  With Sheets("Berechnung")
    .Range(.Cells(4, 13), .Cells(7, 22)).Sort _
          key1:=.Range(.Cells(4, 18), .Cells(7, 18)), order1:=xlDescending, _
          key2:=.Range(.Cells(4, 22), .Cells(7, 22)), order2:=xlDescending, _
          key3:=.Range(.Cells(4, 19), .Cells(7, 19)), order3:=xlDescending
    If .Cells(4, 17).Value = 0 Then
        .Range(.Cells(4, 13), .Cells(7, 22)).Sort _
          key1:=.Range(.Cells(4, 13), .Cells(7, 13)), order1:=xlAscending
    End If
  End With
End Sub



  

Betrifft: AW: Laufzeitfehler 1004 von: joschy
Geschrieben am: 19.08.2014 07:51:40

Hi Franz,
vielen Dank für die Antwort! :) Könntest du evtl noch posten, wie ich das Blatt "Berechnung" aktiviere und mir noch kurz erklären, ob das bedeutet, dass dann das Makro NUR auf dem aktivierten Blatt ausgeführt wird. Und mir bitte noch kurz dazu erklären, wie ich dann dieses nur für "Berechnung" geltende Makro in dem Makro "VorrundeSortiern" (das nur in "Spielplan" vorkommen soll) aufrufe..?


  

Betrifft: AW: Laufzeitfehler 1004 von: fcs
Geschrieben am: 19.08.2014 09:37:02

Hallo Joschy,

die Anweisungen Activate und Select sind bei der VBA-Programmierung eigentlich nur in wenigen Ausnahmefällen erforderlich. Meistens um dem Anwender eine Mappe/Blatt in einem vordefinierten Zustand anzuzeigen.

Die häufige Verwendung von .Activate, .Select und Selection. (insbesondere bei Anfängern) hat ihre Ursache darin, dass der Makrorecorder so arbeitet.
Man kann diese fast immer vermeiden durch direkte Benennung der Objekte und Verwendung von Variablen, denen man die Objekte zuweist.

Ich hatte dir ja in meiner Antwort aufgezeigt, wie du dein Makro "VorSort" anpassen kannst. Dann kommst du ohne Activate aus und dein Schaltflächenmakro funktioniert.

Wenn du unbedingt mit Activate arbeiten möchtest, dann musst du das Makro "VorrundeSortiern" zu deiner Schaltfläche im Blatt "Spielplan" wie folgt anpassen.

Sub VorrundeSortiern()
    Sheets("Berechnung").Activate
    Call VorSort
    Sheets("Spielplan").Activate
End Sub
Dies ist aber nicht die von mir persönlich bevorzugte Variante.

Gruß
Franz


  

Betrifft: AW: Laufzeitfehler 1004 von: joschy
Geschrieben am: 19.08.2014 09:58:36

Ok, wenn du mir das so erklärst stimm ich mit dir überein! :) Hab deine Variante inzwischen auch schon eingearbeitet, danke nochmals! :)


 

Beiträge aus den Excel-Beispielen zum Thema "Laufzeitfehler 1004"