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

VBA ohne Sheets(xxx).Select

Forumthread: VBA ohne Sheets(xxx).Select

VBA ohne Sheets(xxx).Select
27.05.2021 21:13:30
W
Hallo Forum,
Ich verarbeite derzeit ca. 50 Datenbestände, die ich zuerst in einen Array einlese. Danach möchte ich das jeweilige Tabellenblatt inhaltlich löschen, um dann den Array in das leere Blatt zu laden.
Der Ablauf funktioniert, wenn ich zuvor das Ziel-Blatt mit Sheets(xx).Select aktiviere.
Lasse ich den Sheets(xxx).Select weg, erhalte ich an 2 Stellen einen Laufzeitfehler 410. Es sind die Befehle, die fett geschrieben sind.
Meine 4 Befehle:
Worksheets(BlattName).Select
Worksheets(BlattName).Cells.Select
Selection.Delete Shift:=xlUp
Worksheets(BlattName).Range(Cells(1, 1), Cells(AddRows + 1, AddCols + 1)) = WorksheetFunction.Transpose(FuncRC)
Das Füllen des Tabellenblattes habe ich auch schon ohne Transpose gemacht
Wie kann ich das Problem lösen, ohne bei den oben genannten Befehlen vorher das entsprechende Tabellenblatt zu aktivieren?
Gruß
Werner
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA ohne Sheets(xxx).Select
27.05.2021 21:28:44
EtoPHG
Hallo Werner,
so?

With Worksheets(Blattname)
.UsedRange.Delete Shift;=xlUp
.Range(.Cells(1, 1), .Cells(AddRows + 1, AddCols + 1)) = WorksheetFunction.Transpose(FuncRC)
End With
Gruess Hansueli
AW: VBA ohne Sheets(xxx).Select
27.05.2021 21:49:01
W
Hallo Hansueli,
herzlichen Dank für Deinen Codiervorschlag, mit dem ich erfolgreich und ohne Select die Daten in die Tabelle gebracht habe.
Außerdem habe ich festgestellt, dass meine Daten falsch in die Tabelle geschrieben werden, wenn ich "WorksheetFunction.Transpose(FuncRC)" verwende. Es ist eine 2D-Array. Nur mit "= FuncRC" werden die Daten richtig übertragen.
Hätte nicht gedacht, dass das Problem noch heute gelöst würde.
Gruß
Werner
Anzeige
AW: VBA ohne Sheets(xxx).Select
27.05.2021 21:43:07
Daniel
Hi
1. Referenziere vollständig, dh wenn du mit mehrern Tabellenblättern arbeitest, muss das Sheet(xxx) vor JEDES Range, Cells, Columns und Rows gesetzt werden.
ohne die Sheetangabe geht der Bezug immer auf das aktive Tabellenblatt.
das gilt auch für die Cells innerhalb von Range! der Fehler kommt, wenn die Cells auf ein anderes Tabellenblatt refernzieren als die Range, die sie definieren sollen.
da das Range(Cells, Cells) mit Tabellenblattangabe vor den beiden Zells zu aufwendig wird, verwende die Resize-Funktion um den Bereich zu beschreiben, das vermeidet auch weitere Umrechungen, falls der Zielbereich nicht in A1 beginnt, sondern in einer anderen Zelle

Worksheets(BlattName).Cells(1, 1), Resize(AddRows + 1, AddCols + 1) = WorksheetFunction.Transpose(FuncRC)
2. Selektiere nicht. Hänge ansatt .Select den eigentlichen Befehl an den Zellbereich direkt an
aus

Worksheets(BlattName).Select
Worksheets(BlattName).Cells.Select
Selection.Delete Shift:=xlUp
wird

Worksheets(BlattName).Cells.Delete Shift:=xlUp
Gruß Daniel
Anzeige
AW: VBA ohne Sheets(xxx).Select
27.05.2021 22:01:04
W
Hallo Daniel.
Danke für Deine Infos. Wieder etwas dazugelernt.
Gruß
Werner
;
Anzeige

Infobox / Tutorial

VBA ohne Sheets(xxx).Select


Schritt-für-Schritt-Anleitung

  1. Referenziere die Worksheets: Anstatt Sheets(xxx).Select zu verwenden, referenziere das gewünschte Blatt direkt in deinen Befehlen. Zum Beispiel:

    With Worksheets(BlattName)
       .UsedRange.Delete Shift:=xlUp
       .Range(.Cells(1, 1), .Cells(AddRows + 1, AddCols + 1)) = WorksheetFunction.Transpose(FuncRC)
    End With
  2. Vermeide die Verwendung von .Select: Du kannst die Zellen direkt ohne vorherige Auswahl bearbeiten. Ein Beispiel:

    Worksheets(BlattName).Cells.Delete Shift:=xlUp
  3. Nutze die Resize-Funktion: Wenn du den Bereich dynamisch anpassen möchtest, kannst du die Resize-Methode verwenden:

    Worksheets(BlattName).Cells(1, 1).Resize(AddRows + 1, AddCols + 1) = WorksheetFunction.Transpose(FuncRC)
  4. Fehlerbehebung: Achte darauf, dass alle Zellreferenzen den richtigen Bezug zum Arbeitsblatt haben, um Laufzeitfehler zu vermeiden.


Häufige Fehler und Lösungen

  • Laufzeitfehler 410: Dieser Fehler tritt häufig auf, wenn man versucht, auf Zellen ohne vorherige Arbeitsblattaktivierung zuzugreifen. Stelle sicher, dass alle Zellreferenzen korrekt sind und das entsprechende Arbeitsblatt referenziert wird.

  • Falsche Datenübertragung: Wenn du ein 2D-Array mit WorksheetFunction.Transpose überträgst und die Daten falsch erscheinen, verwende einfach = FuncRC ohne die Transpose-Funktion.


Alternative Methoden

Eine alternative Methode, um Daten in ein Arbeitsblatt zu übertragen, besteht darin, Arrays direkt ohne .Select zu verwenden. Hier ist ein Beispiel:

Dim myArray As Variant
myArray = Array(1, 2, 3, 4)

Worksheets(BlattName).Range("A1:D1") = myArray

Praktische Beispiele

  • Daten löschen und einfügen:

    With Worksheets("Datenblatt")
        .UsedRange.Delete Shift:=xlUp
        .Range("A1").Resize(10, 2) = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    End With
  • Daten aus einem Array einfügen:

    Dim myData As Variant
    myData = Array(Array("A", "B"), Array("C", "D"))
    Worksheets("Zielblatt").Range("A1:B2") = myData

Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, alle Variablen zu deklarieren und potenzielle Fehler frühzeitig zu erkennen.

  • Nutze Fehlerbehandlung: Implementiere On Error Resume Next und überprüfe dann, ob ein Fehler aufgetreten ist, um deine Makros robuster zu machen.

  • Kombiniere VBA mit Excel-Funktionen: Du kannst viele Excel-Funktionen direkt in VBA verwenden, was deinen Code effizienter macht.


FAQ: Häufige Fragen

1. Warum sollte ich .Select vermeiden? Es ist besser, .Select zu vermeiden, da es deinen Code langsamer macht und potenziell zu Laufzeitfehlern führen kann. Direktes Referenzieren ist effizienter.

2. Wie kann ich sicherstellen, dass alle Zellreferenzen korrekt sind? Stelle sicher, dass du die Arbeitsblätter in deinen Befehlen referenzierst, wie in Worksheets(BlattName).Cells(...). Dies verhindert, dass fälschlicherweise auf das aktive Blatt zugegriffen wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige