Excel 2007: insertar fila automáticamente si se completa la fila anterior

Excel 2007: insertar fila automáticamente si se completa la fila anterior

Quiero hacer una hoja de trabajo que pueda usarse como recibo impreso para los clientes, este es el diseño básico:

  • Datos de contacto del cliente (nombre, dirección, etc.): estos son campos fijos que pueden estar vacíos
  • Fila de encabezado: "Artículo|Cant.|precio|total"
  • Tabla dinámica que contiene cualquier número de líneas, una para cada artículo que compra el cliente.
  • Fila de pie de página que contiene el número total de artículos y el importe total

Lo que me cuesta es cómo hacer que funcione la tabla dinámica. Actualmente inserto manualmente una fila para cada artículo nuevo, pero esto es engorroso en situaciones en las que hay mucho trabajo. Me gustaría que Excel muestre una línea en blanco de forma predeterminada y luego inserte una línea siguiente cada vez que la línea anterior contenga datos, moviendo automáticamente la fila del pie de página una línea hacia abajo y actualizando la fórmula utilizada para calcular la cantidad total. y cantidad.

¿Es esto posible en absoluto?

Respuesta1

Sólo como advertencia para usted y cualquier otra persona que intente hacer esto:

Ahora deberías pensar en:

  • ¿Con qué frecuencia usaré esto por cliente?
  • cuantos clientes hay?
  • ¿Cómo ingresaré estos elementos?
  • ¿Cuántos artículos diferentes hay?

Estas son las preguntas más importantes. lo he hecho bastanteexactamente, lo que está intentando hacer, para una empresa muy pequeña, con alrededor de 3 recibos por mes.

Como siempre, rápido, barato y excelOnly. Sin embargo, nadie hizo esas preguntas anteriores. Principalmente por cheap & excelOnly. Y ahora, es muy evidente cuánto tiempo se pierde cada vez que se busca y corrige un recibo, pero principalmente cuando se añaden los artículos. Sin mencionar cuántas formas diferentes existen del mismo artículo. Sin embargo, es posible corregir esto con Excel, pero en mi humilde opinión, es una verdadera molestia. Convencido también al cliente, ahora se ha configurado un EPR.

Esta es una tarea de base de datos. ¡Es como uno de los mejores ejemplos de una tarea de base de datos!

Además, esto podría incluso valer la pena para un sistema ERP para pequeñas empresas. Aquí en Alemania te recomendaría JTL-Wawi.

Pero, si esto es un salto demasiado grande, deberías pensar en usar Access.

Algunas ventajas:

  • puedes gestionar tus clientes
  • puedes administrar tus artículos
  • puedes mover tu comportamiento dinámico para acceder
  • puedes gestionar tus recibos fácilmente
  • Aún puedes usar Excel como tu sistema de salida.

¿Cómo funcionaría esto?

Tendría algunas tablas, para clientes y artículos, y para recibos. La tabla de recibos conectaría a un cliente con sus artículos y otros atributos relevantes del recibo.

Luego podrías crear un informe diseñado para un recibo básico e imprimirlo desde el acceso. O utilice Excel para seleccionar un recibo, obtener los datos e imprimirlo. Debido a que los datos estarían predeterminados, sabría cuántas filas/columnas vienen y cuál es su contexto.

Sin embargo, esta rueda ya se inventó muchas veces, por lo que deberías mirar las que ya existen;)

Editar

Una solución basada en su solicitud de comportamiento podría utilizar este intento aquí:

https://stackoverflow.com/questions/12604274/excel-vba-is-there-a-textchanging-textchanged-or-a-similar-event-or-how-to/12604570#12604570

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Column = clngColumnRightToLastGrade Then
    Application.EnableEvents = False
    'offset selection, one row down, two cols to left
    Target.EntireRow.Insert (xlShiftDown) 'insert new row
    Target.Offset(1, -2).Select
    Application.EnableEvents = True
  End If
End Sub

Por supuesto, podría utilizar el Changeevento en su lugar y es posible que deba limitar este comportamiento al rango máximo de su lista dinámica o a su hoja de trabajo.

O simplemente haga que una macro sea accesible mediante tecla rápida para ejecutar esta línea aquí:

Target.EntireRow.Insert (xlShiftDown) 'insert new row

Deberá determinar la celda actualmente seleccionada para tener el Targetrango.

información relacionada