If Selection.Count = 1 'está mal

15/09/2006 - 13:44 por javier | Informe spam
Hola amigos,

Estaba intentando utilizar éste codigo, pero no me funciona cuando
selecciono mas de una celda (error en tiempo de ejecución, no coinciden los
tipos):

If Selection.Count = 1 And Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If


.

también probé algo así:

If Range.Select.Count = 1 Then
If Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If
End If
pero me dice que el argumento (range) no es opcional

¿Cómo lo puedo corregir?
Pretendo que sólo se ejecute si en la columna de la izquierda tengo el valor
2 y cuando seleccione una sola celda.

Saludos. Gracias.
javier

Preguntas similare

Leer las respuestas

#1 Luis Garcia
15/09/2006 - 13:49 | Informe spam
Hola, prueba esto a ver que tal:

If Selection.Cells.Count = 1 Then
If Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If
End If

Saludos

"javier" escribió en...
Hola amigos,

Estaba intentando utilizar éste codigo, pero no me funciona cuando
selecciono mas de una celda (error en tiempo de ejecución, no coinciden


los
tipos):

If Selection.Count = 1 And Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If


.

también probé algo así:

If Range.Select.Count = 1 Then
If Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If
End If
pero me dice que el argumento (range) no es opcional

¿Cómo lo puedo corregir?
Pretendo que sólo se ejecute si en la columna de la izquierda tengo el


valor
2 y cuando seleccione una sola celda.

Saludos. Gracias.
javier

Respuesta Responder a este mensaje
#2 AnSanVal
15/09/2006 - 16:54 | Informe spam
Yo lo haría asi:
If selection.Cells.count>1 then exit sub (también este IF podria anidar al
otro).
If ActiveCell.OffSet(0,-1).Value=2 then Call miMacro

Saludos desde Tenerife.
"javier" escribió en el mensaje
news:
Hola amigos,

Estaba intentando utilizar éste codigo, pero no me funciona cuando
selecciono mas de una celda (error en tiempo de ejecución, no coinciden
los
tipos):

If Selection.Count = 1 And Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If


.

también probé algo así:

If Range.Select.Count = 1 Then
If Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If
End If
pero me dice que el argumento (range) no es opcional

¿Cómo lo puedo corregir?
Pretendo que sólo se ejecute si en la columna de la izquierda tengo el
valor
2 y cuando seleccione una sola celda.

Saludos. Gracias.
javier

Respuesta Responder a este mensaje
#3 javier
15/09/2006 - 17:44 | Informe spam
Gracias Luis y AnSanVal, el ejemplo que me habéis dejado funciona
perfectamente. Lo que pasa es que no he planteado correctamente el ejemplo
mio.
En realidad necesito que se ejecute el codigo sólo si se cumplen tres
requisitos:

Que la selección esté dentro del rango [B3:B50] -
Que sólo seleccione una celda >>>> Selection.Cells.Count = 1
Y que en la celda de la izquierda exista el valor 2 -- >>>
Selection.Offset(0, -1).Value = 2

Yo he adaptdo este código y me funciona bien:

If Range(Selection, Range("B3:B50")).Address = Range("B3:B50").Address Then
If Selection.Cells.Count = 1 Then
If Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If
End If
End If

pero no sé si existe otra manera mas eficiente de escribirlo.
Si alguien sabe otra manera mas eficaz..., se los agradezco

Gracias. Saludos
javier


"AnSanVal" escribió:

Yo lo haría asi:
If selection.Cells.count>1 then exit sub (también este IF podria anidar al
otro).
If ActiveCell.OffSet(0,-1).Value=2 then Call miMacro

Saludos desde Tenerife.
"javier" escribió en el mensaje
news:
> Hola amigos,
>
> Estaba intentando utilizar éste codigo, pero no me funciona cuando
> selecciono mas de una celda (error en tiempo de ejecución, no coinciden
> los
> tipos):
>
> If Selection.Count = 1 And Selection.Offset(0, -1).Value = 2 Then
> Call miMacro
> End If
>
>
> .
>
> también probé algo así:
>
> If Range.Select.Count = 1 Then
> If Selection.Offset(0, -1).Value = 2 Then
> Call miMacro
> End If
> End If
> pero me dice que el argumento (range) no es opcional
>
> ¿Cómo lo puedo corregir?
> Pretendo que sólo se ejecute si en la columna de la izquierda tengo el
> valor
> 2 y cuando seleccione una sola celda.
>
> Saludos. Gracias.
> javier
>



Respuesta Responder a este mensaje
#4 KL
15/09/2006 - 20:18 | Informe spam
If Not TypeOf Selection Is Range Then Exit Sub
With Selection
If Intersect(.Cells, [B3:B50]) Is Nothing Then Exit Sub
If .Cells.Count = 1 Then _
If .Offset(, -1).Value = 2 Then Call miMacro
End With


Saludos,
KL


"javier" wrote in message news:
Gracias Luis y AnSanVal, el ejemplo que me habéis dejado funciona
perfectamente. Lo que pasa es que no he planteado correctamente el ejemplo
mio.
En realidad necesito que se ejecute el codigo sólo si se cumplen tres
requisitos:

Que la selección esté dentro del rango [B3:B50] -
Que sólo seleccione una celda >>>> Selection.Cells.Count = 1
Y que en la celda de la izquierda exista el valor 2 -- >>>
Selection.Offset(0, -1).Value = 2

Yo he adaptdo este código y me funciona bien:

If Range(Selection, Range("B3:B50")).Address = Range("B3:B50").Address Then
If Selection.Cells.Count = 1 Then
If Selection.Offset(0, -1).Value = 2 Then
Call miMacro
End If
End If
End If

pero no sé si existe otra manera mas eficiente de escribirlo.
Si alguien sabe otra manera mas eficaz..., se los agradezco

Gracias. Saludos
javier


"AnSanVal" escribió:

Yo lo haría asi:
If selection.Cells.count>1 then exit sub (también este IF podria anidar al
otro).
If ActiveCell.OffSet(0,-1).Value=2 then Call miMacro

Saludos desde Tenerife.
"javier" escribió en el mensaje
news:
> Hola amigos,
>
> Estaba intentando utilizar éste codigo, pero no me funciona cuando
> selecciono mas de una celda (error en tiempo de ejecución, no coinciden
> los
> tipos):
>
> If Selection.Count = 1 And Selection.Offset(0, -1).Value = 2 Then
> Call miMacro
> End If
>
>
> .
>
> también probé algo así:
>
> If Range.Select.Count = 1 Then
> If Selection.Offset(0, -1).Value = 2 Then
> Call miMacro
> End If
> End If
> pero me dice que el argumento (range) no es opcional
>
> ¿Cómo lo puedo corregir?
> Pretendo que sólo se ejecute si en la columna de la izquierda tengo el
> valor
> 2 y cuando seleccione una sola celda.
>
> Saludos. Gracias.
> javier
>



Respuesta Responder a este mensaje
#5 javier
15/09/2006 - 23:40 | Informe spam
Gracias KL, funciona muy bien.
Aunque no entiendo mucho, creo que éste código es mejor porque si no
selecciono un rango, o si éste rango no está dentro de [B3:B50]), entonces
abandona el procedimiento (Exit Sub).
Gracias. Saludos.
javier


..
"KL" escribió:

If Not TypeOf Selection Is Range Then Exit Sub
With Selection
If Intersect(.Cells, [B3:B50]) Is Nothing Then Exit Sub
If .Cells.Count = 1 Then _
If .Offset(, -1).Value = 2 Then Call miMacro
End With


Saludos,
KL


"javier" wrote in message news:
> Gracias Luis y AnSanVal, el ejemplo que me habéis dejado funciona
> perfectamente. Lo que pasa es que no he planteado correctamente el ejemplo
> mio.
> En realidad necesito que se ejecute el codigo sólo si se cumplen tres
> requisitos:
>
> Que la selección esté dentro del rango [B3:B50] -
> Que sólo seleccione una celda >>>> Selection.Cells.Count = 1
> Y que en la celda de la izquierda exista el valor 2 -- >>>
> Selection.Offset(0, -1).Value = 2
>
> Yo he adaptdo este código y me funciona bien:
>
> If Range(Selection, Range("B3:B50")).Address = Range("B3:B50").Address Then
> If Selection.Cells.Count = 1 Then
> If Selection.Offset(0, -1).Value = 2 Then
> Call miMacro
> End If
> End If
> End If
>
> pero no sé si existe otra manera mas eficiente de escribirlo.
> Si alguien sabe otra manera mas eficaz..., se los agradezco
>
> Gracias. Saludos
> javier
>
>
> "AnSanVal" escribió:
>
>> Yo lo haría asi:
>> If selection.Cells.count>1 then exit sub (también este IF podria anidar al
>> otro).
>> If ActiveCell.OffSet(0,-1).Value=2 then Call miMacro
>>
>> Saludos desde Tenerife.
>> "javier" escribió en el mensaje
>> news:
>> > Hola amigos,
>> >
>> > Estaba intentando utilizar éste codigo, pero no me funciona cuando
>> > selecciono mas de una celda (error en tiempo de ejecución, no coinciden
>> > los
>> > tipos):
>> >
>> > If Selection.Count = 1 And Selection.Offset(0, -1).Value = 2 Then
>> > Call miMacro
>> > End If
>> >
>> >
>> > .
>> >
>> > también probé algo así:
>> >
>> > If Range.Select.Count = 1 Then
>> > If Selection.Offset(0, -1).Value = 2 Then
>> > Call miMacro
>> > End If
>> > End If
>> > pero me dice que el argumento (range) no es opcional
>> >
>> > ¿Cómo lo puedo corregir?
>> > Pretendo que sólo se ejecute si en la columna de la izquierda tengo el
>> > valor
>> > 2 y cuando seleccione una sola celda.
>> >
>> > Saludos. Gracias.
>> > javier
>> >
>>
>>
>>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida