EVITAR PARPADEO DE CELDAS

2 envíos / 0 nuevos
Último envío
jazo
Imagen de jazo
Offline
última acción: Hace 9 años 7 meses
alta: 29/07/2012 - 05:11
Puntos: 5
EVITAR PARPADEO DE CELDAS

Tengo una hoja "PRE-RUTEO" en el tengo una tabla dinamica donde el seleccionar una celda llamada "orden" de la columna B me muestra un formulario y al hacer Clik en cualquiera de las celdas que contengan datos de la columna B me muestran los registros asociados la celda en el formulario. El problema es que al seleccionar cualquier celda de cualquier columna de la hoja "PRE-RUTEO" esta parpadea, acepto que parpadee solo al seleccionar celdas de la columna B porque entiendo es ahi donde se produce el evento de buscar los registros pero no en cualquier otra celda porque no permite recorrer celdas sin que la hoja deje de parpadear.

ESTE ES EL CODIGO

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lFilaA&, lFilaB&, lFila1&
Dim Z&, A#, B#, C#, D#, old&, X&
Dim Ws1 As Worksheet
Dim Nuevo As Object ', IndiceIcono As Integer
Dim valor As Variant
Dim V As Integer
If ActiveCell.FormulaR1C1 = "Orden" Then
   UserForm6.Show
   UserForm6.Left = (Application.ActiveWindow.Width - UserForm6.Width) / 2
   UserForm6.Top = (Application.ActiveWindow.Height - UserForm6.Height) / 2
   UserForm6.Caption = " DETALLE: ORDEN DE VENTA"
 For V = UserForm6.ListView1.ListItems.Count To 1 Step -1
'Cambiar Posición.
UserForm6.ListView1.ListItems.Remove (V)
Next V
End If

With Application
     .ScreenUpdating = False
     old = .Calculation
     .Calculation = xlCalculationManual
     .EnableEvents = False
End With
If UserForm6.ListView1.ColumnHeaders.Count > 0 Then
If Not Intersect(Target, Range("B:B")) Is Nothing And Selection.Count = 1 And ActiveCell.FormulaR1C1 <> "Orden" Then
   Set Ws1 = Worksheets("ASG 61,10,2")
  
For V = UserForm6.ListView1.ListItems.Count To 1 Step -1
'Cambiar Posición.
UserForm6.ListView1.ListItems.Remove (V)
Next V
  
   lFilaB = 2
   While Ws1.Cells(lFilaB, 10).Value <> ""
         lFilaB = lFilaB + 1
   Wend
 
   A = 0#
   B = 0#
   C = 0#
   D = 0#
   lFilaA = 1

   valor = Intersect(Target, Range("B:B")).Value
   X = 1
   For lFila1 = 2 To lFilaB
       If valor = Ws1.Cells(lFila1, 11).Value Then
      
       Set Nuevo = UserForm6.ListView1.ListItems.Add(, , X)
           Nuevo.SubItems(1) = Ws1.Cells(lFila1, 11).Value
           Nuevo.SubItems(2) = Ws1.Cells(lFila1, 17).Value
           Nuevo.SubItems(3) = Ws1.Cells(lFila1, 18).Value
           Nuevo.SubItems(4) = Ws1.Cells(lFila1, 19).Value
           Nuevo.SubItems(5) = Ws1.Cells(lFila1, 21).Value
           Nuevo.SubItems(6) = Ws1.Cells(lFila1, 22).Value
          If Nuevo.SubItems(5) > Nuevo.SubItems(6) Then
             Nuevo.ListSubItems(6).ForeColor = vbRed
            'Nuevo.ListSubItems(6).Interior.ColorIndex = 36
            'Nuevo.ListSubItems(6).Font.ColorIndex = 3
            'Nuevo.ListSubItems(6).Font.Bold = True
          End If
           A = A + Val(Replace(Nuevo.SubItems(6), ",", "."))
           Nuevo.SubItems(7) = Ws1.Cells(lFila1, 1).Value
           B = B + Val(Replace(Nuevo.SubItems(7), ",", "."))
           Nuevo.SubItems(8) = Ws1.Cells(lFila1, 23).Value
           If Nuevo.SubItems(6) > Nuevo.SubItems(8) Then
             Nuevo.ListSubItems(8).ForeColor = vbRed
           End If
           C = C + Val(Replace(Nuevo.SubItems(8), ",", "."))
           Nuevo.SubItems(9) = Ws1.Cells(lFila1, 4).Value
           D = D + Val(Replace(Nuevo.SubItems(9), ",", "."))
           X = X + 1
       End If
   Next lFila1
     
   With UserForm6
        .TextBox4.Text = A
        .TextBox4.ForeColor = vbBlue
        .TextBox3.Text = B
        .TextBox3.ForeColor = vbBlue
        .TextBox2.Text = C
        .TextBox1.Text = D
   End With
End If
End If
With Application
     .ScreenUpdating = True
     .Calculation = old
     .EnableEvents = True
End With

Set Ws1 = Nothing

End Sub    

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 semana 6 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: EVITAR PARPADEO DE CELDAS

El evento SelectionChange que estás empleando se produce cada vez que cambia la celda activa.

Si sólo quieres que tenga en cuenta celdas de la columna B, pon al principio de todo una comprobación que termine la macro, así no da pasos que no necesitas.

algo parecido a esto.

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 If Target.Column <> 2 Then Exit Sub  'salimos de la macro si la celda no está en la columna 2

' a continuación tu macro

...

 

------
Ya sé Excel, pero necesito más.