2009-07-16 4 views
0

Ich möchte auf eine Zelle als einen Bereich in VBA zeigen. Ich habe versucht mit:VBA-Punktvariable im Bereich

  Dim range 
     range = Sheet("sheet").Range("A1") 

Aber dies gibt nur den Wert im Bereich zurück. Was ich eigentlich möchte, ist das Bereichsobjekt, so dass ich es manipulieren kann, z. durch Einstellung von range.Value = "Hello"

Irgendwelche Ideen?

Antwort

4

Zuerst empfehle ich Ihnen dringend, die explizite Deklaration von Variablen in Ihrem Code obligatorisch zu machen. Gehe zu Tools - Optionen, in der Editor Registerkarte überprüfen "Require Variable Deklaration", oder Option Explicit in der ersten Zeile aller Skripte.

Zweitens, ich denke, es gibt einen kleinen Tippfehler in Ihrem Code, sollte es Sheets.("sheet") sein.

Um Ihre Frage zu beantworten, vergeben Sie mit range = Sheets("sheet").Range("A1") eine Wertvariable, kein Objekt. Daher wird die Standardvariable des Bereichsobjekts implizit zugewiesen, dh value. Um ein Objekt zuzuordnen, verwenden Sie das Schlüsselwort Set. Mein vollständiger Beispielcode sieht so aus:

Option Explicit 

Public Sub Test() 
    Dim RangeObject As range 
    Set RangeObject = Sheets("Sheet1").range("A1")  
    RangeObject.Value = "MyTestString" 
End Sub 

Dies sollte den Text "MyTestString" in Zelle A1 setzen.

Bearbeiten: Wenn Sie benannte Bereiche verwenden, versuchen Sie RangeObject.Value2 anstelle von RangeObject.Value. Benannte Bereiche haben keine Value Eigenschaft.

+2

Die Verwendung von "Variablendeklaration anfordern" wirkt sich nicht rückwirkend auf vorhandene Module aus - es steuert nur, ob Excel Option Explicit automatisch an die Spitze aller * neuen * Module setzt. Selbst wenn Sie diese Option aktivieren, müssen Sie dennoch alle vorhandenen Module durchlaufen und Option Explicit hinzufügen. –

+0

Wenn Sie eine Anzahl von benannten Bereichen haben, nennen wir sie "Name1", "Name2" und "Name3" Ich möchte auf sie wie folgt zugreifen: Set nameRange = Bereich ("Name" & Nummer) und tun Sie Folgendes: If nameRange. Wert <> someValue Dann nameRange.Value = someValue - Das scheitert jedoch! – Karl