Warum kann ich diesen Bereich nicht einstellen?

1

Ich versuche, einen Bereich in VBA zu definieren, aber aus irgendeinem Grund schlägt meine Methode fehl. Im folgenden Codebeispiel funktionieren die beiden ersten Zeilen, die letzte Zeile schlägt jedoch mit der Meldung " Methode 'Range' des Objekts '_Worksheet' fehl " fehl :

Set c = Parametre.Range("B2")
Set c = Parametre.Range("XFD2").End(xlToLeft)
Set c = Range(Parametre.Range("B2"), Parametre.Range("XFD2").End(xlToLeft))

Ich habe überprüft, dass das Blatt nicht geschützt ist, dass das zweite Argument rechts vom ersten ist (es ist L2), und bin im Moment ziemlich ratlos, warum meine Methode fehlschlägt. Jede Eingabe, was das Problem sein könnte, wäre sehr dankbar.

Eirikdaude
quelle
Vorausgesetzt, es Parametrehandelt sich um ein worksheetObjekt, ist Ihr Code vollkommen gültig. Ich habe es kopiert + eingefügt und es funktioniert einwandfrei, auch wenn Parametrees sich nicht um das aktive Arbeitsblatt handelt.
Kyle
Ja, das war nach meiner Erfahrung auch meine Annahme, da dies normalerweise funktioniert. Ich kann nicht genau herausfinden, was diese Instanz von normal unterscheidet. @ Kyle
Eirikdaude

Antworten:

2

Sie scheinen das Parametre-Objekt zu verpassen, sodass es standardmäßig wieder in Worksheet angezeigt wird und aus diesem Grund fehlschlägt. Versuchen Sie den folgenden Code zu verwenden:

Set c = Parametre.Range(Parametre.Range("B2"), Parametre.Range("XFD2").End(xlToLeft))

oder alternativ, wenn Sie saubereren Code schreiben möchten, verwenden Sie Folgendes:

with Parametre
    Set c = .Range("B2")
    Set c = .Range("XFD2").End(xlToLeft)
    Set c = .Range(.Range("B2"), .Range("XFD2").End(xlToLeft))
end with
LPChip
quelle
Das Objekt ist jedoch vorhanden: i.imgur.com/6USk9fn.png Und wenn es fehlschlägt, weil standardmäßig das Arbeitsblatt verwendet wird, sollten dann nicht auch die ersten beiden Instanzen fehlschlagen? Abgesehen davon denke ich, dass Ihre dritte Deklaration aufgrund eines ungültigen Funktionsaufrufs fehlschlagen wird.
Eirikdaude
1
Sie schreiben parametre.rangefür die ersten beiden und die dritte, Sie schreiben nur range. VBA ist nicht intelligent genug, um den Bereich zu verstehen, und versucht, dies auf das Arbeitsblattobjekt anzuwenden, und schlägt fehl. Probieren Sie es aus und Sie werden sehen, dass es funktioniert.
LPChip 20.11.15
2
@eirikdaude Das ist richtig, obwohl ich nicht ganz sicher bin, was der Code überhaupt macht.
Raystafarian