Saltar al contenido

Codigo que evite que macro de busqueda referenciada se ejecute en celdas ocultas por subtotales.


Recommended Posts

publicado

Saludos

Tengo dos bases de datos para cruzar las cuales las tengo organizadas por subtotales en la opcion 2 (que es cuando muestra solo los totales de cada referencia). Para esta tarea ejecuto una macro de busqueda referenciada que funciona bien, pero como comente anteriormente los datos esta organizados por subtotales en la opcion 2 la macro me trae el valor exacto pero se ejecuta tambien en las celdas que estan ocultas.

  • Mi duda es si existe alguna forma o codigo que evite que la macro se ejecute en las celdas ocultas

Espero haberme expresado de la mejor forma, Sin embargo Dejo un ejemplo Gracias por sus respuestas.

EjemploLSV.rar

publicado

Hola LuisV6

Prueba esto


Sub FuncionDeBusqueda()
Dim RangoBusqueda As Range
Dim resultado, Valor
Dim I As Long
Application.ScreenUpdating = False
Range("A8").Select
Set RangoBusqueda = Sheets("Datos 1").Range("a2:p5000")
With Sheets("Datos 2")
Do While ActiveCell.Value <> ""

[COLOR=#0000ff] Do[/COLOR]
I = ActiveCell.Row
ActiveCell.Offset(1, 0).Select
[COLOR=#0000ff] Loop While Rows(ActiveCell.Row).Hidden[/COLOR]

Valor = .Cells(I, 1).Value

On Error Resume Next
'If Application.WorksheetFunction.Subtotal(106, Cells(I, 1)) <> 0 Then
resultado = Application.WorksheetFunction.VLookup(Valor, RangoBusqueda, 16, False)
If Err.Number = 1004 Then
.Cells(I, 14).Value = "> Rango"
Err.Clear
Else
.Cells(I, 14).Value = resultado
End If
'End If
Loop
End With
MsgBox "Busqueda finalizada"
Set RangoBusqueda = Nothing
Call DiferenciaFinal
End Sub
[/CODE]

No acabo de entender lo que quieres pero con ese bucle te aseguras que solo trabaje con celdas no ocultas

Un Saludo

publicado

Saludos nachobm,

He seguido tu consejo y funciona pero esta trayendo el valor de la fila anterior a la del subtotal como comentaba los datos esta en subtotales nivel 2 que es donde me muestra el subtotal del grupo y es en esta fila donde quiero que me traiga el valor buscado.

No se si la fila del subtotal tiene un formato especial y por eso no la reconoce.

publicado



[COLOR=#000000]Do[/COLOR][INDENT=2]I = ActiveCell.Row
[/INDENT]
[INDENT=2]ActiveCell.Offset(1, 0).Select
[/INDENT]

[INDENT][COLOR=#000000]Loop While Rows(ActiveCell.Row).Hidden[/COLOR]



[/INDENT]


[/CODE]

En este código el error está en la asignacion de I, tal y como está se queda

con el valor de la celda anterior a la que cumple con la salida del bucle,

[CODE]

[INDENT] Do
[/INDENT]


[INDENT] ActiveCell.Offset(1, 0).Select
Loop While ActiveSheet.Rows(ActiveCell.Row).Hidden
[/INDENT]


[INDENT]I = ActiveCell.Row



[/INDENT]


[/CODE]

Esta es la forma correcta, coge el valor de la columna de la celda que no está oculta.

Espero que te sirva.

[color=blue]- - - - - Mensaje combinado - - - - -[/color]

otra cosa que puedes hacer, para evitar el último [color=#0000cd]">range"[/color] es modificar el bucle principal por algo así :

[CODE]

Do
ActiveCell.Offset(1, 0).Activate
Loop While Rows(ActiveCell.Row).Hidden
I = ActiveCell.Row
With Sheets("datos 2")

Valor = .Cells(I, 1).Value
Do

On Error Resume Next
resultado = Application.WorksheetFunction.VLookup(Valor, RangoBusqueda, 16, False)
If Err.Number = 1004 Then
.Cells(I, 14).Value = "> Rango"
Err.Clear
Else
.Cells(I, 14).Value = resultado
End If
Do
ActiveCell.Offset(1, 0).Activate
Loop While Rows(ActiveCell.Row).Hidden
I = ActiveCell.Row
Valor = .Cells(I, 1).Value
Loop Until ActiveCell.Value = ""

End With



[/CODE]

o bien poner un [color=#0000cd]if valor="" then exit do[/color] después de asignarle el valor de la celda

como tu veas

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.