Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Problem mit VBA-Programm - Laufzeitfehler 438

Problem mit VBA-Programm - Laufzeitfehler 438
25.04.2017 17:56:23
Moritz
Hallo zusammen!
Arbeite im Moment an einem VBA-Programm (und bin nicht so wahnsinnnig erfahren). Um Zeilen in einer bestimmten Reihenfolge zu sortieren, habe ich folgendes Programm geschrieben:
Sub Ordnen()
Dim a As Long, b As Long, RowEnd As Long
a = 2
b = 2
RowEnd = Sheets("Zeilennummer").Cells(65536, 1).End(xlUp).Row
Do Until a = RowEnd
Do Until Sheets("Zeilennummer").Cells(a, b) = ""
Sheets("Geordnet").Row(a)=Sheets("Ungeordnet").Row(Sheets("Zeilennummer").Cells(a, b))
b = b + 1
Loop
a = a + 1
b = 2
Loop
End Sub

Damit sollen Zeilen aus dem einen Tabellenblatt in ein anderes Tabellenblatt eingefügt werden. In dem Tabellenblatt Zeilennummer ist notiert, in welche Zeilen kopiert werden soll. Beim Ausführen taucht immer die Fehlermeldung "Laufzeitfehler 438 - Objekt unterstützt diese Eigenschaft oder Methode nicht" auf. Laut Debugger muss das etwas mit der fett gedruckten Zeile zu tun haben. Habe die auch schon öfter umgeändert, finde aber die Lösung nicht alleine.
Hoffe, dass ich hier richtig bin!
Vielen Dank im Voraus.
Lg
Moritz
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit VBA-Programm - Laufzeitfehler 438
25.04.2017 18:24:58
ChrisL
Hi Moritz
Ich vermute...
Sheets("Geordnet").Rows(a)=Sheets("Ungeordnet").Rows(Sheets("Zeilennummer").Cells(a, b)).Value
aber so überträgst du alle Spalten, darum solltest eine Range über die verwendete Spaltenanzahl machen.
Für alles weitere, bitte um Beispieldatei und eine kurze Erklärung, wie das Blatt Zeilennummer entsteht.
Solche Do-Loops (oder For-Next Schleifen, was übrigens die übersichtlichere Variante wäre), sind bezüglich Laufzeit schwach. Besonders dann, wenn du Schleife in Schleife ausführst (die Durchläufe multiplizieren sich). Darum würde ich die Zeilenzahlen direkt mit den unsortierten Daten ergänzen und anschliessend normal sortieren.
cu
Chris
Anzeige
AW: Problem mit VBA-Programm - Laufzeitfehler 438
25.04.2017 18:25:15
Nepumuk
Hallo,
teste mal:
Sheets("Geordnet").Rows(a).Value = Sheets("Ungeordnet").Rows(Sheets("Zeilennummer").Cells(a, b)).Value

Gruß
Nepumuk
AW: Problem mit VBA-Programm - Laufzeitfehler 438
25.04.2017 18:29:45
Zwenn
Hallo Moritz,
so kannst Du keine Zeile kopieren. Schon allein deshalb nicht, weil Du auf der rechten Seite nur eine Zelle angibst. Damit stimmen ja schon der Ziel- und der Quellbereich rein größenmäßig nicht überein. Es funktioniert aber generell nicht so, wie Du es versuchst, sondern so:

Sheets("Ungeordnet").Rows(ZEILENNUMMER).Copy Destination:=Sheets("Geordnet").Rows( _
ZEILENNUMMER)
Viele Grüße,
Zwenn
Anzeige
Wie wär's mit Folgendem, ...
25.04.2017 18:47:43
Luc:-?
…Moritz:
Do While Sheets("Zeilennummer").Cells(a, b) ""
Sheets("Geordnet").Rows(a) = Sheets("Ungeordnet").Rows(Sheets("Zeilennummer").Cells(a, b))

Der Objekt-fehlt-Fehler kann eigentlich nur auftauchen, wenn die 1. leere Zelle erreicht wurde, weil das Konstrukt dann keine ZeilenNr liefert. Bei Until nach Do wird die Schleife bei Erreichen der Bedingung noch 1× abgearbeitet, bei Until nach Loop nicht!
Ob das nun die beste Lösung dieser Aufgabe ist, sei mal dahingestellt…
🙈 🙉 🙊 🐵 Gruß, Luc :-?
Besser informiert mit …
Anzeige
Nicht aufgepasst! Sollte zu Moritz! owT
25.04.2017 18:51:24
Luc:-?
:-?
Und stimmt auch nicht, Auch bei 'Until' nach ...
25.04.2017 18:58:49
Luc:-?
Do wird nicht mehr ausgeführt, Moritz,
ist halt nur ungewöhnlicher…
Das fehlende Objekt liegt dann wohl nur an Row statt Rows.
Luc :-?
AW: Problem mit VBA-Programm - Laufzeitfehler 438
25.04.2017 18:38:47
Moritz
Danke euch allen.
Habe eure Varianten ausprobiert und funktioniert, wie es soll.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit Laufzeitfehler 438 in VBA


Schritt-für-Schritt-Anleitung

  1. Fehlermeldung verstehen: Der Laufzeitfehler 438 tritt auf, wenn ein Objekt eine bestimmte Eigenschaft oder Methode nicht unterstützt. In deinem Fall kommt die Meldung „Laufzeitfehler 438 - Objekt unterstützt diese Eigenschaft oder Methode nicht“ vermutlich von der falschen Verwendung der Rows- oder Row-Eigenschaften.

  2. VBA-Code anpassen: Ändere die fehlerhafte Zeile in deinem Code. Statt Sheets("Geordnet").Row(a) verwende Sheets("Geordnet").Rows(a). Hier ist eine korrigierte Version deines Codes:

    Sub Ordnen()
       Dim a As Long, b As Long, RowEnd As Long
       a = 2
       b = 2
       RowEnd = Sheets("Zeilennummer").Cells(65536, 1).End(xlUp).Row
       Do Until a = RowEnd
           Do Until Sheets("Zeilennummer").Cells(a, b) = ""
               Sheets("Geordnet").Rows(a).Value = Sheets("Ungeordnet").Rows(Sheets("Zeilennummer").Cells(a, b)).Value
               b = b + 1
           Loop
           a = a + 1
           b = 2
       Loop
    End Sub
  3. Testen: Führe den Code aus, um sicherzustellen, dass der Fehler behoben ist.


Häufige Fehler und Lösungen

  • Objekt unterstützt diese Eigenschaft oder Methode nicht: Dieser Fehler tritt häufig auf, wenn du Row anstelle von Rows verwendest. Stelle sicher, dass du die korrekte Methode für Zeilen verwendest.

  • Falsche Zellenreferenz: Wenn du nur eine Zelle angibst, kann dies zu Größenunterschieden zwischen Quell- und Zielbereich führen. Verwende Rows für den gesamten Zeilenbereich.


Alternative Methoden

Eine alternative und oft effizientere Methode ist die Verwendung des Copy-Befehls, um Zeilen zu übertragen. Hier ein Beispiel:

Sheets("Ungeordnet").Rows(ZEILENNUMMER).Copy Destination:=Sheets("Geordnet").Rows(ZEILENNUMMER)

Diese Methode ist schneller und vermeidet die Probleme mit dem Laufzeitfehler 438.


Praktische Beispiele

Stelle dir vor, du hast die folgenden Daten auf dem Blatt „Ungeordnet“ und möchtest diese in das Blatt „Geordnet“ übertragen:

A B
1 X
2 Y
3 Z

Wenn das Blatt „Zeilennummer“ angibt, dass die zweite Zeile übernommen werden soll, kannst du den angepassten Code verwenden, um die Zeilen korrekt zu kopieren.


Tipps für Profis

  • Verwende For-Next-Schleifen: Diese sind oft übersichtlicher und effizienter als Do-Until-Schleifen.

  • Debugging: Nutze die Debugging-Tools in Excel VBA, um den Fehler zu lokalisieren. Setze Breakpoints und analysiere die Variablenwerte während der Ausführung.

  • Fehlermeldungen verstehen: Achte darauf, die genaue Fehlermeldung zu lesen. Oft geben sie Hinweise darauf, wo das Problem liegt.


FAQ: Häufige Fragen

1. Was ist der Laufzeitfehler 438?
Der Laufzeitfehler 438 tritt auf, wenn ein VBA-Objekt eine spezifische Eigenschaft oder Methode nicht unterstützt.

2. Wie kann ich den Fehler beheben?
Überprüfe deinen Code auf die Verwendung von Row anstelle von Rows und stelle sicher, dass du die korrekten Zellreferenzen verwendest.

3. Gibt es eine Möglichkeit, alle Zeilen auf einmal zu kopieren?
Ja, du kannst den Copy-Befehl verwenden, um ganze Zeilen einfach und effizient zu übertragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige