Microsoft Excel: trabas con el for each, valores de la matriz y rango activo de la hoja

Hola Fernando !
Tengo problemas con el for each.
El ejemplo de la ayuda deberia llenar una matriz con el valor del indice
Sub ss()
Dim PruebaMatriz(10) As Integer, I As Variant
For Each I In PruebaMatriz
PruebaMatriz(I) = I
Next I
End Sub
Resulta que los valores de la matriz no toman los valores del indice, yo esperatia
valor(0)=0, valor(1)=1... Etc...
Que sucede. Se que puedo usar un contador y resuelve mi problema.
Otro.
¿Cómo obtengo el rango activo de la hoja?
Por ejemplo
Sub ss()
Dim rango As Range
Set rango = ActiveCell.CurrentRegion.Cells
For Each I In rango
I.Value = 1
Next I
End Sub
Me llena con uno solo el extremo superior izquierdo de mi selección, ¿cómo lo hago?
Gracias.

1 respuesta

Respuesta
1
Y si. Estoy hasta las manos de trabajo. (Tu sabes que trato de contestar lo más rápido *posible*)
Respecto a tus preguntas, sólo hice unas pequeñas modificaciones y funcionan:
Sub ss()
Dim PruebaMatriz(10) As Integer, I As Variant
For I = 1 To 10 '<- Nota que -en este caso- tienes que indicarle desde que elemento hasta cuál ciclar.
PruebaMatriz(I) = I
Next I
End Sub
En el segundo ejemplo, tomó solo la celda superior izquierda. Si, en cambio, le indicas el nombre del rango total, funcionará de maravilla.
Sub sDs()
Dim rango As Range
Set rango = Range(ActiveCell.CurrentRegion.Cells.Address) '<-- aquí estaba el problema
For Each I In rango
I.Value = 1
Next I
End Sub
Espero que te sirva y disculpa la demora...
Que tengas un gran fin de semana!
Fernando
¿Estás muy ocupado...? No creo que sea difícil...
Chao...
Para el primer caso, tu solución sirve, ya la sabía, en realidad mi problema es con el for each por que no funciona, ademas este ejemplo sale en la ayuda...
El segundo caso no me funciona, ¿solo me marca la primera celda?
Gracias.
Creo que debes tener un problema en la definición del rango a llenar.
Yo probé con un rango que tuviera datos en las celdas a llenar, toda vez que la instrucción:
ActiveCell. CurrentRegion. Cells
Selecciona un rango limitado por cualquier combinación de filas y columnas vacías.
En un rango con datos tomará desde la primera columna llena hasta la primera vacía hacia la izquierda (esta no será seleccionada) y desde el aprimer fila con datos hasta la última que tenga algo.
Si el rango estuviera vacío, efectivamente, sólo llenará la primer celda superior izquierda.
Si, como creo, lo que quieres es seleccionar manualmente un rango y que lo llene, tu macro debería ser:
Sub sDs()
Dim rango As Range
Set rango = Selection '<-- rango previamente seleccionado
For Each I In rango
I.Value = 1
Next I
End Sub
O, lo que sería equivalente:
Sub sDs()
For Each I In Selection
I.Value = 1
Next I
End Sub
Purébalos y dime. Pero cualquiera de las macros que te dí funciona correctamente si el rango estuviera claramente identificado.
Un abrazo!
Fernando
Ok. Eso era creo que no me había explicado bien, exactamente el rango era el de la selección manual. Muchas gracias...
Lo de For Each...lo dejamos...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas