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

Range mit Cells angeben

Forumthread: Range mit Cells angeben

Range mit Cells angeben
15.10.2015 12:13:24
Fabian
Hallihallo,

ThisWorkbook.Worksheets(1).Range(Cells(j, 3), Cells(j, 6)).Value = ActiveWorkbook.Worksheets(1). _
Range(Cells(i, 2), Cells(i, 5)).Value
Laufzeitfehler '1004':
Die Methode 'Cells' für das Objekt '_Global' ist fehlgeschlagen
Ich verstehe es einfach nicht... Warum funktioniert das nicht?
Ich habe ein zweites Workbook geöffnet, dieses ist aktiv. In das Workbook mit dem Makro möchte ich mittels einer Schleife (deshalb i und j, beide Long) spezielle Werte übertragen. Die Werte sind Zahlen.
Ich hoffe, ihr habt da eine Idee.
Viele Grüße
Fabian :)

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range mit Cells angeben
15.10.2015 12:39:00
Daniel
Hi
bei Range(Cells(), Cells()) müssen Workbook und Worksheet auch vor den beiden Cells hingeschrieben werden.
Dafür darf in allgemeinen oder Userformmodulen diese Angabe vor der Range entfallen, in Tabellenblattmodulen müssen diese auch vor der Range angegeben werden.
Hintergrund ist, dass sich Zellbezuge (Range, Cells, Columns, Rows) ohne Tabellenblattangabe davor immer auf das aktive (allgem. Modul, Userform) bzw auf das Modul-Tabellenlblatt beziehen.
Das gilt auch für Zellbezüge innerhalb von Funktionen wie Range() oder .FIND oder .SORT.
die kürztere Schreibweise wäre hier, die Zellbereiche über die Resize-Funkion zu beschreiben, da muss dann Worksheet und Tabellenblatt nur einmal angegeben werden:
Thisworkbook.Worksheets(1).Cells(j, 3).resize(1, 4).Value = _
ActiveWorkbook.Worksheets(1).Cells(i, 2).Resize(1, 4).Value
über diese Schreibweise kann man auch einfacher sicher stellen, dass die Zellbereiche gleich gross sind.
Gruss Daniel

Anzeige
AW: Range mit Cells angeben
16.10.2015 12:39:00
Fabian
Danke schön! Sehr praktisch diese Resize-Funktion :)
Vielen Dank für die Erklärung!
Viele Grüße und ein schönes Wochenende
Fabian
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Range mit Cells angeben in Excel VBA


Schritt-für-Schritt-Anleitung

Um in VBA eine Range mit Cells anzugeben, solltest du sicherstellen, dass du das richtige Workbook und Worksheet referenzierst. Hier ist ein einfaches Beispiel, wie du das machen kannst:

  1. Workbook und Worksheet festlegen: Beginne damit, das Workbook und das Worksheet klar zu definieren.
  2. Range mit Cells angeben: Verwende die Syntax ThisWorkbook.Worksheets(1).Range(Cells(j, 3), Cells(j, 6)).
  3. Werte zuweisen: Weise die Werte von einer anderen Zelle oder Range zu.

Der Code könnte wie folgt aussehen:

ThisWorkbook.Worksheets(1).Range(Cells(j, 3), Cells(j, 6)).Value = _
ActiveWorkbook.Worksheets(1).Range(Cells(i, 2), Cells(i, 5)).Value

Achte darauf, dass j und i als Long-Variablen definiert sind und die Schleife entsprechend gesetzt ist.


Häufige Fehler und Lösungen

Ein häufiger Fehler ist der Laufzeitfehler '1004', der besagt, dass die Methode 'Cells' für das Objekt '_Global' fehlgeschlagen ist. Um diesen Fehler zu vermeiden, solltest du sicherstellen, dass du die Worksheet-Referenz vor den Cells angibst.

Lösung: Füge die Workbook- und Worksheet-Referenz hinzu:

ThisWorkbook.Worksheets(1).Range(ThisWorkbook.Worksheets(1).Cells(j, 3), ThisWorkbook.Worksheets(1).Cells(j, 6)).Value = _
ActiveWorkbook.Worksheets(1).Range(ActiveWorkbook.Worksheets(1).Cells(i, 2), ActiveWorkbook.Worksheets(1).Cells(i, 5)).Value

Alternative Methoden

Eine alternative und oft einfachere Methode ist die Verwendung der Resize-Funktion. Diese reduziert die Notwendigkeit, die Range mehrmals zu definieren und vereinfacht den Code:

ThisWorkbook.Worksheets(1).Cells(j, 3).Resize(1, 4).Value = _
ActiveWorkbook.Worksheets(1).Cells(i, 2).Resize(1, 4).Value

Hierbei wird der Bereich von Zellen automatisch auf die angegebene Größe angepasst.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die Cells- und Range-Methoden in VBA nutzen kannst:

  1. Werte aus einem Bereich kopieren:
Dim i As Long
Dim j As Long

For i = 1 To 10
    For j = 1 To 5
        ThisWorkbook.Worksheets(1).Cells(j, i).Value = ActiveWorkbook.Worksheets(1).Cells(j, i).Value
    Next j
Next i
  1. Summen aus einem Bereich berechnen:
Dim sumValue As Double
sumValue = Application.WorksheetFunction.Sum(ThisWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(10, 1)))
Debug.Print sumValue

Tipps für Profis

  • Verwende With-Anweisungen: Dies kann den Code lesbarer machen und die Leistung verbessern.
With ThisWorkbook.Worksheets(1)
    .Range(.Cells(j, 3), .Cells(j, 6)).Value = _
    ActiveWorkbook.Worksheets(1).Range(ActiveWorkbook.Worksheets(1).Cells(i, 2), ActiveWorkbook.Worksheets(1).Cells(i, 5)).Value
End With
  • Zellenformatierung: Vergiss nicht, die Formatierung der Zellen zu berücksichtigen, wenn du Werte überträgst.

FAQ: Häufige Fragen

1. Warum funktioniert Cells nicht ohne Workbook-Referenz?
Weil Excel standardmäßig auf das aktive Workbook zugreift, wenn kein spezifisches Workbook angegeben ist. Dies kann zu Laufzeitfehlern führen, wenn das aktive Workbook nicht das ist, mit dem du arbeiten möchtest.

2. Wie kann ich eine Range mit Cells umwandeln?
Du kannst die Range-Methode in Kombination mit Cells verwenden, um spezifische Zellen in einem Bereich anzusprechen. Achte darauf, dass die Syntax korrekt ist und die Workbook-Referenzen gesetzt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige