2016-08-11 1 views
2

Ich versuche, eine einzelne Zeile aus einem Bereichsobjekt innerhalb einer Funktion zu extrahieren. Der Bereich wird als eine Variante deklariert und dann auf einen Bereich innerhalb meines Blattes festgelegt. Ich möchte in der Lage sein, eine bestimmte Zeile auszuwählen, also habe ich versucht, .Rows(indexfrom, indexto) aufzurufen, aber ich erhalte den Fehler Object Required. Ich habe versucht, compareRow anstatt nur zu deklarieren, aber das scheint nichts zu ändern. Ich glaube, dass es verursacht wird, weil callLogRange nur als Verweis auf das Bereichsobjekt existiert. Wenn dies der Fall ist, wie kann ich die Referenz verwenden, um die Zeile aus dem Bereich zu erhalten? Oder vermisse ich gerade etwas, mit dem du die Reihe bekommen kannst?VBA-Objekt erforderlich beim Abrufen der Zeile aus dem Bereich

Vielen Dank.

Dim callLogRange As Variant 
callLogRange = (Sheets("CallLog").Range("B2:L" & lastRow)) 

Dim compareRow As Variant 
compareRow = callLogRange.Rows(thisRow, thisRow) 

Antwort

3

sie als Ranges dimmen und verwenden Set:

Sub dural() 
    Dim callLogRange As Range, thisRow As Long, lastRow As Long 
    lastRow = 13 

    Set callLogRange = Sheets("CallLog").Range("B2:L" & lastRow) 

    thisRow = 5 
    Dim compareRow As Range 
    Set compareRow = callLogRange.Rows(thisRow) 

    MsgBox compareRow.Address(0, 0) 
End Sub 

enter image description here

EDIT # 1:

  • Die Zellen werden in der sechsten Reihe der sie arbeiten et, das die fünfte Zeile des primären Bereichs liegt
  • wenn Sie compareRow ohne Set instanziieren, erstellen Sie tatsächlich einen interne VBAArray statt einem Range.
+0

++ Das war schnell werden die Zuordnung: D –

+0

Gibt es eine Möglichkeit, um schnell Index der 'callLogRange' als' Range'? Wenn ich es als eine Variante einstelle, kann ich einfach 'callLogRange (1,1)' verwenden, um den Wert bei row = 1, col = 1, zu erhalten. – RWA4ARC

+1

Beachten Sie, dass die 'Set'-Zuweisung immer noch fehlschlagen würde, wenn die umgebenden Klammern nicht gelöscht wurden. –

2

Löschen Sie die Klammern. Diese

:

callLogRange = (Sheets("CallLog").Range("B2:L" & lastRow)) 

prüft Sheets("CallLog").Range("B2:L" & lastRow) als Wert. Entfernen Sie die Klammern und Sie werden stattdessen ein 2D-Array zuweisen.

Oder Set die Referenz und Sie erhalten eine Range Objektreferenz, wie in Gary's answer

+0

Das funktioniert perfekt. Danke auch für die Referenz. Ich denke auch über Garys Antwort nach, aber ich bin mir nicht sicher, welche "korrekter" wäre. – RWA4ARC

+1

Garys Antwort ist besser, weil es sich um ein 'Range'-Objekt handelt - ich habe hier nur den spezifischen "Object Required" -Fehler angesprochen. Es ist immer besser, mit Objekten und expliziten Typen zu arbeiten als mit einer 'Variante'. –

+0

Danke, ich war mir nicht sicher. Sehr dankbar für die Hilfe. Und das Thema der Bewertung der Klammern wird mir von jetzt an im Gedächtnis bleiben. – RWA4ARC

Verwandte Themen