2012-10-04 6 views
6

Ich glaube, was ich versuche zu tun, ist ziemlich einfach. Ich möchte über einen Range-Parameter iterieren und den Wert für jede Zelle in diesem Bereich ändern.Excel VBA: Iterieren über Bereichsparameter und ändern Zelle Werte

Das obige ist ein einfaches Beispiel von dem, was ich tun möchte, aber scheint nicht zu funktionieren. Wenn ich dies debugge, scheint Excel einen Fehler zu werfen, wenn es c.Value = 1 trifft. Warum funktioniert das nicht? Diese

+1

Es funktioniert für mich. Wie nennst du es? Hoffe nicht von einem Arbeitsblatt als UDF? –

+0

Stellen Sie sicher, dass Sie c als Bereich deklarieren. – RBarryYoung

+0

Muss jede Zelle gecycelt werden? Kannst du einfach 'thisRange.Value = 1' verwenden? – user3357963

Antwort

3

funktioniert für mich

Option Explicit 

Sub Sample() 
    Dim ret 
    ret = test(Sheets("Sheet1").Range("A1:A15")) 
End Sub 

Function test(thisRange As Range) 
    Dim c As Range 
    For Each c In thisRange.Cells 
     c.Value = 1 
    Next 
End Function 

BTW wir nicht brauchen, um eine Funktion zu verwenden. Eine Funktion wird verwendet, um einen Wert zurückzugeben. Versuchen Sie diese

Option Explicit 

Sub Sample() 
    test Sheets("Sheet1").Range("A1:A15") 
End Sub 

Sub test(thisRange As Range) 
    Dim c As Range 
    For Each c In thisRange.Cells 
     c.Value = 1 
    Next 
End Sub 
+0

Ja, das funktioniert. Nochmals vielen Dank, ich nannte die Funktion als UDF und das war mein Problem. – stevebot

+0

Ja, wie ich bereits in meinem Kommentar erwähnt habe, können Sie es nicht als UDF verwenden :) –