¿Como limitar Worksheet_SelectionChange(ByVal Target As Range) para que solo se active al dar clik en columna dada con macro ?

Y felices fiestas mis bendiciones para usted y su familia :3

Quiero es que esta macro solo se active al dar clic solo en la columna B que ya determine, funciona bien pero ejecuta la macro al dar clic en cualquier columna. Toma el valor de la fila donde este posicionada al dar clic y hace la comparación de lo que contenga la columna B y la fila en la que se dio clic con los nombres de los documentos que tengo en mi pc si lo encuentra pregunta si desea abrirlo y en caso de no encontrarlo pregunta si desea buscarlo manualmente

De igual manera agradecería si me pudieran decir como captar la letra de la columna y numero de fila al mismo tiempo

Este es el código que tengo hasta ahorita

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ChDir "C:\Users\cari\Documents\libros\"
nombre = Range("b" & ActiveCell.Row).Value
Set fso = CreateObject("scripting.filesystemobject")
If fso.fileexists(CurDir() & "\" & nombre) Then
x = MsgBox("el archivo existe. Desea abrirlo??", vbYesNo, "ATENCION")
If x = vbNo Then Exit Sub

Shell "C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe " & nombre
Else: y = MsgBox("El archivo no fue localizado desea buscarlo manualmente", vbYesNo, "ATENCION")

If y = vbNo Then Exit Sub
On Error GoTo salida
ChDir "C:\Users\cari\Documents\libros\"
archivo = Application.GetOpenFilename
If archivo = False Then Exit Sub
Shell "C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe " & archivo
Exit Sub

End If

End Sub

Funciona bien pero quiero que solo se active al seleccionar alguna fila de la columna B

De antemano les agradezco la ayuda :3

1 respuesta

Respuesta
1

Al inició de la macro debes establecer las condiciones. Por ej:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.column<> 2 Then Exit sub  'sólo se ejecutará en col B

If Target.Row < 3 Then Exit Sub   'sólo se ejecuta a partir de la fila 3

If Target.Count > 1 Then Exit sub  'no se ejecuta si se selecciona un rango, por ej cuando se selecciona un rango para limpiarlo

' Recién a partir de entonces se inicia el proceso.

La condición que solícitas es la primera pero te dejó otros ejemplos que seguramente también te servirán.

Sdos y Felices Fiestas!

muchas gracias :3 un ultimo detalle como podría captar la letra de la columna y el numero de fila en una sola variable 

En este evento, como así también en Change y otros, la celda activa es 'Target'

Entonces si se ejecuta al seleccionar alguna celda de la col B, por ej B5, la dirección la podes obtener como:

dire = Target.Address     'te devolverá $B$5

dire = Target.Address(false, false)    'te devolverá B5

Y tu instrucción: nombre = Range("b" & ActiveCell.Row).Value podés escribirla como: 

nombre = Target.Value

¡Gracias! en verdad fue lo que necesitaba :3

Muy buenos días espero este  teniendo un excelente inicio de semana y año

disculpe como se podría limitar la macro para que no se ejecute en celdas bacías?

En las primeras lo neas donde colocamos todas las condiciones podes agregar esta:

If Target.value = "" Then Exit Sub

Sdos. Si luego se te presentan más variantes sobre este gema tendrás que dejarme una nueva consulta.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas