En macro Excel Crear un IF (si) C46 ocupada

 

If Range("c46") = "" Then  'SI c46 VACIA, ESTE, 1ª pagina

    u = Range("B" & Rows.Count).End(xlUp).Row
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
    If u > 17 Then ActiveWindow.ScrollRow = u - n

Else, (si no) 2ª pagina

    u = Range("m" & Rows.Count).End(xlUp).Row
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
    If u > 17 Then ActiveWindow.ScrollRow = u - n 'COMENTARIO = SI b ES MAYOR DE 17 (LINEAS

End If

¿Podrías dejar algunos comentarios en este código para que yo la entienda mejor? Gracias

¿Es correcto o merece alguna corrección? Lo que me da mala cara son ya los 2 If que tiene y por eso no se si podrá ser lo que pretendo

1 Respuesta

Respuesta
1

Pero no entiendo qué es lo que pretendes.

En la imagen tengo por decirlo así, 2 páginas la de la izquierda y la de la derecha

La página 1 va desde B hasta QUE y la 2ª desde M hasta V.

Si estoy insertando en la página 1 seria la columna B

    u = Range("B" & Rows.Count).End(xlUp).Row

Si tengo ya la pagina 1 llena, (hasta la B46 y estoy en la pagina 2 seria para la pagina 2 la columna M

    u = Range("M" & Rows.Count).End(xlUp).Row

Pagina 1 = B pagina 2 = M

Un  If que determine si estoy en la 2 o en la 1

Repito, algo de esto y repara que en una esta la letra B (1ª página) y la otra la M (2ª página)

Si la C46 esta vacía esta bien la letra de columna B pero si esta ocupada pasa a Else y letra M que es de la pagina2

If Range("c46") = "" Then
    u = Range("B" & Rows.Count).End(xlUp).Row
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
    If u > 17 Then ActiveWindow.ScrollRow = u - n
Else
    u = Range("M" & Rows.Count).End(xlUp).Row
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
    If u > 17 Then ActiveWindow.ScrollRow = u - n
End If 

El if es correcto, con eso obtienes la última fila, pero tienes que decirle en cuáles columnas vas a escribir, por ejemplo tienes esto:

Cells(u, "B") = TextBox1 'Item #

Ahora tienes que poner:

Cells(u, "M") = TextBox1 'Item #


Pero también tienes esto:

Range("C8") = TextBox6  'Fecha

Entonces tienes que cambiar a:

Range("N8") = TextBox6  'Fecha


Tienes que revisar todos los programas y corregir las columnas, si ya se llenó la fila 46 hacer en una columna u otra, es decir, este if:

If Range("c46") = "" Then

Lo tienes que poner en todos los programas y dependiendo del resultado elegir el destino de la información.

sal u dos

Si por supuesto, para eso en el código del evento cmbInsertar ya esta esto

 'inserta producto
            u = Range("B" & Rows.Count).End(xlUp).Row + 1
        End If
        If Range("c46") = "" Then
            Cells(u, "B") = TextBox1    'Item #
            Cells(u, "C") = TextBox2    'Producto #
            Cells(u, "D") = TextBox3    'Descripcion del Producto
            Cells(u, "J") = Val(TextBox4)  'Cant.
            If CheckBox3 Then
                Cells(u, "J").Font.ColorIndex = 3
                Cells(u, "J").Font.Bold = True
            End If
            Cells(u, "K") = TextBox5    'Pagina #
        Else 'Si encuentra la 1ª pagina llena pasa a la 2ª
            u = Range("m" & Rows.Count).End(xlUp).Row + 1
            Cells(u, "M") = TextBox1    'Item #
            Cells(u, "N") = TextBox2    'Producto #
            Cells(u, "O") = TextBox3    'Descripcion del Producto
            Cells(u, "U") = TextBox4  'Cant.
            If CheckBox3 Then
                Cells(u, "U").Font.ColorIndex = 3
                Cells(u, "U").Font.Bold = True
            End If
            Cells(u, "V") = TextBox5    'Pagina #
        End If
''''''''''''

Al final de este evento (codigo) pongo este

If Range("c46") = "" Then
    u = Range("B" & Rows.Count).End(xlUp).Row
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
    If u > 17 Then ActiveWindow.ScrollRow = u - n
Else
    u = Range("M" & Rows.Count).End(xlUp).Row
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
    If u > 17 Then ActiveWindow.ScrollRow = u - n
End If

Como dice que el If esta correcto, bien
Gracias Dante
¿Podrias agregar algun comentario en las lineas de esto? para que las entienda mejor

    u = Range("M" & Rows.Count).End(xlUp).Row
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
    If u > 17 Then ActiveWindow.ScrollRow = u - n

Comentarios:

'Obtener la última fila con datos de la columna M
    u = Range("M" & Rows.Count).End(xlUp).Row
'Si la ventana tiene los paneles inmovilizados, entonces n va a ser igual a 10 de lo contrario n =17
    If ActiveWindow.FreezePanes = True Then n = 10 Else n = 17
'Ahora si la última fila con dato es mayor a 17, significa que tengo que mover los datos de la ventana "scroll"
'Entonces voy a mover la ventana haciendo un scroll hasta la última fila pero le resto las filas que quiero que permanezcan visibles.
    If u > 17 Then ActiveWindow.ScrollRow = u - n

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas