Intentando obtener el valor en VBA a partir de la selección de un cuadro de combinación en un formulario.
Tengo un formulario en el que hay un cuadro combinado que contiene todos los números de insignia (ejemplo de un número de insignia: 12345), pero cuando intento asignarlo a una variable en VBA, me muestra el siguiente error:
error de ejecución ‘6’
desbordamiento
Pero cuando voy a depurar, muestra que Combo529.Value = 12345, pero no lo asigna a mi variable y muestra el error.
Private Sub reportRecord_Click()
Dim badgeNum As Integer
badgeNum = Combo529.Value
reportRecord.Value = getReport(badgeNum)
End Sub
Y aquí está el código para la función getReport():
Function getReport(badge As Integer)
Dim yearNow As Integer
yearNow = Year(Date)
Dim report As String
report = badge & "-" & yearNow & "-"
Dim i As Integer
For i = 1 To 3
If Not IsNull(DLookup("Badge_ID", "Employee_Self_Assessment", "Report_ID = '" & report & "0" & i & "'")) Then
getReport = 0
Else
getReport = 1
End If
Next i
End Function
davy.ai
El problema con el código es que el número de placa es demasiado grande para ser almacenado en un tipo de dato Integer. El valor máximo para un Integer es 32,767. Si el número de placa excede este límite, se generará un error de desbordamiento.
Para solucionar este problema, cambie el tipo de dato de la variable badgeNum a Long. El tipo de dato Long puede almacenar valores hasta 2,147,483,647, lo cual debería ser suficiente para la mayoría de los números de placa.
Aquí está el código actualizado:
Asegúrese también de actualizar el tipo de dato del parámetro badge en la función getReport() a Long:
Con estos cambios, el código debería poder manejar números de placa de cualquier tamaño sin generar un error de desbordamiento.