Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1348to1352
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Worksheets().Range in Verbindung mit letzter Zeile

Worksheets().Range in Verbindung mit letzter Zeile
07.02.2014 18:45:34
schluk5
Hallo,
ich weiss grad nicht, wo hier der Fehler liegt und finde auch nichts passendes dazu hier im Forum.
Was ist am folgenden Code nicht in Ordnung?

Range("M:M").Value = Worksheets("Daten").Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)). _
Value

Ohne den Teil, der nur den "beschrieben Bereich" beruecksichtigt geht es ja:

Range("M:M").Value = Worksheets("Daten").Range("A:A").Value

Hier fehlen mir vermutlich noch ein paar Grundlegende VBA Kentnisse...
Viele Gruesse!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Immer wieder das gleiche...
07.02.2014 19:14:00
EtoPHG
schluk,
Die Objekte Range("M:M"), Cells(r,c) und Rows.Count referenzieren nicht auf die vorangestellten Objekte.
Wichtig: In was für einem Klassenmodul (Arbeitsmappe, Tabelle, Modul) steht der Code?
Je nachdem beziehen sich die unreferenzierten Objekte auf das gerade aktive Blatt oder eben die Tabelle in deren Klassenmodul der Code steht. Zudem willst du einen Teil einer Spalte einer gesamten Spalte zuordnen. Ist das beabsichtigt?
Eine vollständige Referenzierung könnte z.B. lauten:
With ThisWorkbook.Worksheets("Daten")
.Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Copy
ActiveSheet.Cells(1,13).PasteSpecial Paste:=xlPasteValues
End With
Gruess Hansueli

Anzeige
AW: Immer wieder das gleiche...
07.02.2014 19:28:32
Franc
k .. ich hätte erst deinen Beitrag lesen sollen bevor ich "falsch" antworte ;-)
Wieder was dazugelernt. ^^
wußte gar nicht, das Cells(Rows.Count, 1).End(xlUp) so funktioniert
normal liefert das doch nur den Wert zurück ...
naja - wieder was dazugelernt

Was liefert was ?...
07.02.2014 20:34:36
EtoPHG
Franc,
Grundsätzlich liefert Cells(Rows.Count, 1).End(xlUp) gar nichts, sondern stellt ein Objekt dar, nämlich die letze Zelle mit Inhalt einer Spalte von unten nach oben gesehen.
Die Default-Eigenschaft einer Zelle ist deren Wert, spricht .Value.
Wenn du also eine einfache Zuweisung des Zellobjekts zu einer Variablen machst, z.B. durch
V = Cells(Rows.Count, 1).End(xlUp) dann wird in V der Wert des Objekts übergeben.$
Wenn du .Row anhängst, dann eben die Eigenschaft Row, als die Zeilennummer der Zelle.
Schreibst du hingegen Set V = Cells(Rows.Count, 1).End(xlUp), wird die Variable V (sofern als Objekt oder Variant definiert) zu einem weiteren Objekt, das die wiederum die Eigenschaft .Value hat.
Also: Immer gut unterscheiden, was ist ein Objekt, was eine Methode (z.B. End), was eine Eigenschaft!
Gruess Hansueli

Anzeige
AW: Was liefert was ?...
07.02.2014 20:54:19
EtoPHG
Franc, denn richtigerweise hätte der Anfang lauten sollen:
Die Methode .End mit dem Parameter xlup angewandt auf das Objekt Cells(Rows.Count, 1) liefert als Objekt die erste, nicht leere Zelle aus der Richtung des letzten Zelleadresse der Spalte A nach oben gesehen zurück.
Die Methode liefert übrigens eine von den meisten Anwendern unerwartete Zelle zurück, wenn die letzte Zelle der Spalte einen Inhalt hat. Welche und warum?
Gruess Hansueli

AW: Was liefert was ?...
08.02.2014 00:48:30
Franc
Ich weiß schon, warum ich bei VBA "kaum Kenntnisse ausgewählt habe" ^^
Ich finde zwar Möglichkeiten wie ich Dinge umsetzen/anpassen kann aber das Problem ist wohl das ich häufig nicht weiß warum/wie das funktioniert.
Deshalb hatte ich auch erwartet, das
Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
auf Fehler läuft, weil für mein Verständnis nicht nur die Spaltenangabe fehlt sondern auch .End(xlUp) unvollständig war.
Das mit Objekt/Methode/Eigenschaft war mir auch nicht (so) bekannt. (ahh mir wird grad bewusst wie wenig ich weiß ...)
Ich denk aber ich habe was dazugelernt und dafür bin ich dir dankbar.

Anzeige
AW: Immer wieder das gleiche...
07.02.2014 19:31:29
schluk5
Ah ok. Das wusste ich natuerlich nicht...:-( Danke Hansueli!!
Der Code steht in einem Tabellenblatt "Suche". In dieses wollte ich beispielhaft einen Bereich aus dem Tabellenblatt "Daten" kopieren.
Das Mit der Zuordnung der verschieden grossen Bereiche war natuerlich unguenstig gewaehlt.
Eigenltich bin ich auf der Suche nach einer Loesung fuer ein etwas anderes Problem und hatte obiges Besipiel nur gewaehlt, da ich dachte es waere einfacher zu erklaeren.
Mein eigentliches Problem ist folgendes (der code steht wieder im Arbeistblatt "Suche"):

If Application.CountIf(Worksheets("Daten").Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)),  _
Range("D30")) Then
Else: MsgBox "ungueltige Artikelnummer"

Es soll ueberprueft werden ob der Zelleninhalt in "D30" aus dem Tabellenblatt "Suche" in einer Liste in Tabellenblatt "Daten" vorhanden ist.
So funktioert es (aus nun bekannten Gruenden) jedenfalls nicht.
Muss ich hier wieder mit der with-Umgebung arbeiten?

Anzeige
Alle aufdröseln...
08.02.2014 08:41:37
EtoPHG
Hallo schluk,
    Dim rBereich As Range
Dim vKriterium As Variant
With ThisWorkbook.Worksheets("Daten")
Set rBereich = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
vKriterium = ThisWorkbook.Worksheets("Daten").Range("D30").Value
If WorksheetFunction.CountIf(rBereich, vKriterium) Then
' kommt vor
Else
MsgBox "ungueltige Artikelnummer"
End If
Gruess Hansueli

AW: Worksheets().Range in Verbindung mit letzter Zeile
07.02.2014 19:24:05
Franc
3 Fehler ^^
1.
Cells(Rows.Count, 1).End(xlUp) ist unvollständig
Um die letzte Zeile zu finden muss .row ergänzt werden also
Cells(Rows.Count, 1).End(xlUp).Row
2.
dann gehts aber immer noch nicht
Nehmen wir an die letzte Zeile ist 10, dann würde der Audrück diesen Bereich ergeben
Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp).Row)
Cells(1, 1) = A1
Cells(Rows.Count, 1).End(xlUp).Row = 10
Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp).Row) = Range("A1:10")
Wie wir sehen, fehlt die Spaltenangabe
3.
Du musst auch den Bereich eingrenzen, wo du es einfügst (bei mir stand ansonsten überall unterhalb der letzten Zeile "#nv"
Richtig ist (hab letzt zeile ausgelagert, damit es übersichtlicher wird
lLetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
Range("M1:M" & lLetzteZeile).Value = Worksheets("Daten").Range(Cells(1, 1), Cells(lLetzteZeile, 1)).Value
Anzeige

83 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige