Incremento Automático de N° Factura. VBA-Excel

La problemática es la siguiente.

Tengo:

-Un formulario de facturación.

-Una hoja, una tabla (TablaReg_FC) donde cargo las facturas con una numeración correlativa.

Los números de los COMPROBANTES (Facturas) son:
10-000001

10-000002

10-000003

Como verán comienza con un numero 10 (diez) luego un guion (-) y siguiente el numero del comprobante.

Lo que deseo hacer es que al iniciar el formulario de facturación, me coloque en un label, El numero consecutivo al ultimo que haya en la tabla.

El problema es que no se como sumar valores cuando tienen guiones (-) de por medio.

Este es mi código:

Dim Columna As Integer

Columna = 1

Hoja_RegComprobantes.Activate
ActiveSheet.ListObjects("TablaReg_FC").Range(2, Columna).End(xlDown).Select

Var_N°Comprobante = ActiveCell 
Me.LabelN°Comprobante = Var_N°Comprobante + 1 

Respuesta
1

Usa una variable para quitar el "10-" le sumas 1 y luego le agregas el "10-" de nuevo..

Estilo así

Dim Columna As Integer
Columna = 1
Hoja_RegComprobantes.Activate
ActiveSheet.ListObjects("TablaReg_FC").Range(2, Columna).End(xlDown).Select
Var_N°Comprobante = replace(ActiveCell,"10-","")
Val_Nº = Var_N°Comprobante + 1 
Me.LabelN°Comprobante = "10-" & Var_N° 

Esa seria una solucion rapida, ojo! hay mejores metodos, estaria bueno que encuentres uno que se adapte mejor a sumar sin remplazar nada, pero por lo menos esta solucion te quita del apuro por el momento jeje

Acá tienes un pequeño ejemplo de lo que me refiero de cambiar el valor y después volverle a agregar el "10 -"

Sub SumandoValores()
'Asigno un valor a la celda
Range("G5").FormulaR1C1 = " 10 - 151515"
'Removemos el "10 -" de la celda
Range("G5") = Replace(Range("G5"), "10 -", "")
'Sumamos 1 al valor
Range("G5") = Range("G5") + 1
'Le agregamos nuevamente el "10 -" al comienzo del valor
Range("G5") = "10 - " & Range("G5")
End Sub

Como ves, ingreso un valor con el "10 -", luego le quito a la celda el "10 -", realizo la suma, y se los agrego nuevamente

Muchas gracias..

Me quedo así:

Dim Columna As Integer
Dim Valor_Nº As Long
Columna = 1
Hoja_RegComprobantes.Activate 
ActiveSheet.ListObjects("TablaReg_FC").Range(2, Columna).End(xlDown).Select
Var_N°Comprobante = Replace(ActiveCell, "10-", "")
Valor_Nº = Var_N°Comprobante + 1
Me.LabelN°Comprobante = "10-" & Format(Valor_Nº, "000000")

2 respuestas más de otros expertos

Respuesta
1

Sebas esta en lo correcto. Lo que tienes es un String, una cadena de texto que ni Excel ni VBA son capaces de sumar, debes extirpar lo que lo hace un texto, en este caso el símbolo "-".

Lo único que yo le agregaría al código de Sebas es declarar las variables, una String y otra Long

Otro método alternativo a Replace es eliminar los caracteres de la izquierda y hacer la conversión a Long en tiempo de ejecución, así:

Dim txtString As String
txtString = "10-000001"
txtString = CLng(Right(txtString, Len(txtString) - 3)) + 1

¡Gracias!

Me quedo así:

Dim Columna As Integer
Dim Valor_Nº As Long
Columna = 1
Hoja_RegComprobantes.Activate 
ActiveSheet.ListObjects("TablaReg_FC").Range(2, Columna).End(xlDown).Select
Var_N°Comprobante = Replace(ActiveCell, "10-", "")
Valor_Nº = Var_N°Comprobante + 1
Me.LabelN°Comprobante = "10-" & Format(Valor_Nº, "000000")

El codigo de James Bond tiene una ventaja que el no se dio cuenta o no supo usarla, es que si usas Split() puedes tener acceso a la parte que dice "10" antes del - y usarlo como variable a la hora de concatenar. La ventaja de eso es que si en el futuro ya no es 10 y es otro numero, puedes acceder a el sin problema o incluso hacer operaciones matematicas con ese numero tambien. Lo unico malo de su codigo es la falta de declaraciones de las variables y que se podria acortar un poco mas. Salu2

Respuesta
1

Este es el resultado de la macro

y esta es la macro 

Private Sub UserForm_Initialize()
FILAS = Range("A1").CurrentRegion.Rows.Count
NUM_FACTURA = Range("A1").Cells(FILAS, 1)
SEPARA = Split(NUM_FACTURA, "-")
ULTIMO_DIGITO = Val(SEPARA(1)) + 1
NUM_FACTURA = "10-" & Format(ULTIMO_DIGITO, "000000")
Label2 = NUM_FACTURA
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas