Imprimir etiquetas exactas por hoja

Tengo una duda pero no se como calcular esto en codigo

Tengo que imprimir 12 etiquetas por hoja pero en la tabla tengo 185 registro necesito. Necesito un código que me calcule cuantos registros me faltan para completar el total de etiquetas exactas por hoja, que serían 192 para que queden 16 hojas exactas.

3 respuestas

Respuesta
2

Otra forma. No dices "cuando" quieres verlo, así que te pongo un botón. Si tengo la tabla Clientes, que puedes ver que tiene 91 registros

En un formulario cualquiera le pongo un botón, aunque podría ser en cualquier otro evento

Al pulsarlo

El código del botón es

Private Sub Comando213_Click()
Dim i As Integer, b As Integer
i = Fix(DCount("*", "clientes") / 12) + 1
b = (i * 12) - DCount("*", "clientes")
MsgBox "Necesitas " & i & " hojas o lo que es lo mismo " & b & " registros más", vbOKOnly + vbInformation, "Que lo sepas"
End Sub

Para Eperezfer, no eres más tonto porque no entrenas.

Voy a explicarlo con detalle, si tengo la tabla Clientes, que tiene 92 registros= 12*7(páginas completas) + 8 registros que sobran para la hoja 8, y para completar ésta última haría falta 4 registros.

Trasladado a u7n formulario

Si ahora elimino esos 8 que "sobran" me quedarían 84, que es justo divisible por 7 y sobran 0

Con lo que al pulsar

Ahora quito los cuadros de texto y lo dejo como variables.

Y el código, sin necesidad de escribir la Enciclopedia Británica es simplemente

Private Sub Comando213_Click()
Dim Resultado As Single, B As Integer
Resultado = DCount("*", "clientes") / 12
B = (Resultado - Fix([Resultado])) * 12
If Resultado * 100 > Fix([Resultado]) * 100 = 0 Then
MsgBox "Necesitas " & Resultado & " hojas exactas", vbOKOnly + vbInformation, "Que lo sepas"
Else
MsgBox "Necesitas " & Fix([Resultado]) + 1 & " hojas exactas y te faltan, para completarla " & 12 - B & " registros", vbOKOnly + vbInformation, "Que lo sepas"
End If
End Sub
Respuesta
1

Cuidado la respuesta que le dan no es correcta, ¿Qué pasa si el número de registros es múltiplo exacto de 12?, por ejemplo si fuesen 48 registros. Veámoslo

i=fix(48/12)+1  tendriamos 5.
b=(i*12)-48       tendriamos 12 . !! Error...

Es decir necesitaríamos 5 hojas para imprimir 48 registros de a 12 etiquetas por hoja y lo correcto son 4 hojas.

Y faltarían 12 para completar la hoja. No faltaría nada.

Elaboré esta función de tal forma que permita jugar con el número de etiquetas por hoja y número de registros .

FUNCIÓN

Public Function etiquetas(ByVal nReg As Integer, ByVal nHoja As Integer, Optional ByVal ntipo As Byte) As Integer
On Error GoTo hay_error
'Función determinar el número de etiquetas faltantes para completar una hoja
'con base en el número de registros y la cantidad de etiquetas por hoja
'y para determinar el número de hojas requeridas
'Elaborado por: EDUARDO PÉREZ FERNÁNDEZ
'Fecha        : 26/05/2021
'País         : Colombia
'Parámetros:
'                 nReg= Número de registros
'                nHoja= Número de etiquetas por hoja
'Opcional        nTipo=1 ... retorona el número de registros faltantes para completar una hoja
'                      2 ... retorna el número de hojas completas para imprimir las etiquetas
'                Si omite el parámetro toma como valor 1 (Retorna el número de registros faltantes)
Dim intetiqueta As Integer
If CLng(ntipo) = 0 Then
  ntipo = 1
End If
intetiqueta = nHoja - (IIf(nReg Mod nHoja = 0, nHoja, nReg Mod nHoja))
If ntipo = 1 Then
 etiquetas = intetiqueta
Else
  etiquetas = (nReg + intetiqueta) / nHoja
End If
hay_error_exit:
  Exit Function
hay_error:
   MsgBox "Error " & Err.Number & " " & Err.Description, vbCritical, "Error...."
   Resume hay_error_exit
End Function

Ejemplos de llamada:

Para el ejemplo asumo que la tabla pedidos tiene 45 registros:

dcount("*","productos")=45

Obtener el número de etiquetas faltantes 12 etiquetas por hoja

¿

? Etiquetas(dcount("*","productos"), 12,1)
3

Le he indicado a la función que son 45 registros, 12 etiquetas por hoja y que retorne el número de etiquetas que faltan para completar la última hoja, en este caso me indica que faltan 3 registros, es decir 45+3=48 etiquetas en total.

Obtener el número de hojas requeridas 12 etiquetas por hoja

¿

? Etiquetas(dcount("*","productos"), 12,2)
4

Efectivamente retorna 4 hojas para imprimir las 48 etiquetas (12 por hoja)

Ahora, que pasa si fueran 10 etiquetas por hoja:

Obtener el número de etiquetas faltantes 10 etiquetas por hoja

¿

? Etiquetas(dcount("*","productos"), 10,1)
5

Faltarían 5 registros para completar la última hoja.

Obtener el número de hojas requeridas 10 etiquetas por hoja

¿

? Etiquetas(dcount("*","productos"), 10,2)
5

Se necesitan 5 hojas para imprimir (45+5=50) etiquetas 10 por hoja.

¡Gracias! eduardo era lo que necesitaba 

Esto va para el super torpe del JULIÁN GONZALEZ, la primera repuesta que respondió estaba mal, por tal motivo lo hice saber y no se trata de Biblioteca Británica sino de hacer las cosas más funcionales. Si es para abreviar y dejar las cosas a medias con esta sola línea es suficiente:

intetiqueta = nHoja - (IIf(nReg Mod nHoja = 0, nHoja, nReg Mod nHoja))

en donde:

nHoja= nro de etiquetas por hoja

nReg=nro de registros

Es decir:

intetiqueta = 12 - (IIf(45 Mod 12 = 0, 12, 45 Mod 12))

Resultado: 3

Es decir faltarían 3 registros para completar la última.

Si queremos la cantidad de hojas:

Cantidadhojas= (nReg + intetiqueta) / nHoja

Es decir:

Cantidadhojas=(45+3)/12

Resultado= 4

Pero el animal es torpe y no acepta que mi función es mucho más completa.

Respuesta
1

En la variable "n" asignas el número de registros.

En la variable "m" quedará el total de hojas.


Si tienes la función redondear hacia arriba, puede ser:

Sub test1()
  Dim n As Double, m As Double
  n = 185
  m = WorksheetFunction.RoundUp(n / 12, 0)
End Sub

Si no tienes la función redondear, entonces puedes utilizar la de entero:

Sub test2()
  Dim n As Double, m As Double
  n = 185
  m = Int(n / 12)
  If n / 12 > m Then
    m = m + 1
  End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas