2012-10-04 44 views
6

Creo que lo que intento hacer es bastante simple. Quiero iterar sobre un parámetro Range y cambiar el valor para cada celda en ese rango.Excel VBA: Iteración sobre el parámetro de rango y valores de celda de cambio

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

Lo anterior es un simple ejemplo de lo que quiero hacer, pero parece que no funciona. Cuando depuro esto, Excel parece lanzar un error cuando llega al c.Value = 1. ¿Por qué esto no funciona?

+1

Funciona para mí. ¿Cómo lo llamas? ¿No espera de una hoja de trabajo como UDF? –

+0

Asegúrese de declarar c como un Rango. – RBarryYoung

+0

¿Hay una necesidad de ciclo de cada celda? ¿Puedes usar 'thisRange.Value = 1' – user3357963

Respuesta

3

Esto funciona para mí

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 

Por cierto que no es necesario utilizar una función. Una función se usa para devolver un valor. Pruebe esto

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

Sí, eso funciona. Gracias de nuevo, estaba llamando a la función como un UDF y ese era mi problema. – stevebot

+0

Sí, como mencioné en mi comentario anterior, no puedes usarlo como UDF :) –

Cuestiones relacionadas