es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , ,

Answer

  1. Avatar for 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:

    Private Sub reportRecord_Click()
    Dim badgeNum As Long
    badgeNum = Combo529.Value
    
    reportRecord.Value = getReport(badgeNum)
    End Sub
    

    Asegúrese también de actualizar el tipo de dato del parámetro badge en la función getReport() a Long:

    Function getReport(badge As 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.

Comments are closed.