Logo_Access_global_380x114Favicon_Access_global_180x180Logo_Access_global_380x114Logo_Access_global_380x114
  • Home
  • University
    • Destellos formativos
  • Labs
  • TV
  • Secciones
    • El mundo de Access
    • Explorando VBA
      • Artículos sobre VBA
      • Un trocito de código
    • Entrevistas
      • Profesionales de Access
    • El rincón de Excel
    • Bases de datos
      • MS SQL
      • MySQL
      • postgreSQL
      • SQLite
    • Clases magistrales
    • Utilidades hechas con Access
  • Access en el mundo
  • ¿Quiénes somos?
  • Cómo colaborar
  • Eventos
✕
            No hay resultados Mostrar todos los resultados
            VBIDE otros ejemplos: tipos de módulo según contenido
            23/02/2023
            VBA: proteger proyecto
            27/02/2023
            Mostrar todos

            VBA: ByVal vs. ByRef

            Publicado por Luis Viadel
            Categorías
            • Destellos formativos
            Etiquetas
            • ByRef
            'Copia y pega este código en un módulo estándar
            Option Compare Database
            Option Explicit
            
            Sub ByValvsByRef()
            '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            ' Fuente            : https://access-global.net/vba-byval-vs-byref
            '                     Destello formativo 273
            ' Fuente original   : https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/passing-arguments-by-value-and-by-reference
            '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            ' Título            : ByValvsByRef
            ' Autor original    : Microsoft
            ' Creado            : 15/09/2021
            ' Adaptado por      : Luis Viadel | https://cowtechnologies.net
            ' Propósito         : entender la diferencia entre ByVal y ByRef. Utiliza el procedimiento calcular para realizar los cálculos necesarios
            ' Argumentos        : La sintaxis de la función"calcular" consta de los siguientes argumentos
            '                     Variable          Modo          Descripción
            '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            '                     tasa             Obligatorio    Valor que pasamos como ByVal
            '                     deuda            Obligatorio    Valor que pasamos como ByRef
            '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            ' Cómo funciona     : dependiendo de cómo pasemos cada uno de los argumentos de la función, podemos obtener resultados diferentes
            ' Referencias       : https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/differences-between-passing-an-argument-by-value-and-by-reference
            '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            ' Test              : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copia el siguiente bloque a portapapeles y pégalo
            '                     en el editor de VBA. Descomenta la línea de te interese y pulsa F5 para ver su funcionamiento.
            ' Para realizar el test, camba la forma de pasar el argumento en la función "calcular"
            ' Test 1
            'Sub calcular(ByVal tasa As double, ByRef deuda As Double)
            '    deuda = deuda + (deuda * tasa / 100)
            'End Sub
            '
            ' Test 2
            'Sub calcular(ByVal tasa As doubLE, ByVal deuda As Double)
            '    deuda = deuda + (deuda * tasa / 100)
            'End Sub
            '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            Dim TasaInferior As Double
            Dim ValorInicial As Double
            Dim deudaConIntereses As Double
            Dim deudaStr As String
            Const TasaSuperior As Double = 12.5
            
                ValorInicial = 4999.99
                
                TasaInferior = TasaSuperior * 0.6
                
                deudaConIntereses = ValorInicial * TasaSuperior
                
            'Calcula la deuda total con la tasa de interés alta aplicada.
            'Argumento TasaSuperior es una constante, lo cual es apropiado para un parámetro ByVal.
            'El argumento DeudaConIntereses debe ser una variable porque el procedimiento cambiará su valor al calculado
                deudaStr = Format(deudaConIntereses, "currency")
                
                Debug.Print "Deuda con interés alto: " & deudaStr
            
            'Repite el proceso con la TasaInferior. El argumento TasaInferior no es una constante, pero el parámetro ByVal lo protege  de accidentes
            'o cambios intencionales en el procedimiento.
            
            'Volvemos a establecer la deuda con intereses en el valor original
                deudaConIntereses = ValorInicial * TasaInferior
                
                Call calcular(TasaInferior, deudaConIntereses)
                
            'Cambiamos a tipo de moneda
                deudaStr = Format(deudaConIntereses, "currency")
                
                Debug.Print "Deuda con interés bajo: " & deudaStr
                
            End Sub
            
            'La tasa de parámetro es un parámetro de ByVal porque el procedimiento no cambia el valor del argumento correspondiente en el
            'código de llamada
            
            'Si embargo, el valor calculado del parámetro de la deuda debe ser reflejado en el calor del argumento correspondiente en el
            'código de llamada. Por lo tanto debe declararse ByRef.
            
            Sub calcular(ByVal tasa As Double, ByRef deuda As Double)
            
                deuda = deuda + (deuda * tasa / 100)
                
            End Sub
            
            ¡Ver en el repositorio!
            Compartir
            57
            Luis Viadel
            Luis Viadel

            Entradas relacionadas

            30/03/2023

            Tratamiento de errores: compilación condicional


            Leer más
            29/03/2023

            Tratamiento de errores: errores personalizados


            Leer más
            28/03/2023

            Tratamiento de errores: Resume


            Leer más

            Deja una respuesta Cancelar la respuesta

            Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

            ETIQUETAS

            Access API BD Botones ComboBox Consultas CountOfLines CStr Diseño DoCmd Excel Exportar Fecha FileSystemObject Filtros For Each...Next Formulario Formularios Funciones Funciones de dominio GetFolder GetWindowRect Google maps Informes InStr Kill Left Listbox Mid Módulos Node ProcCountLines Procedimientos ProcOfLine References Replace Ribbon RunCommand Seguridad Split SysCmd Tablas TreeView VBA VBIDE

            ÚLTIMAS ENTRADAS

            • 0
              Tratamiento de errores: compilación condicional
              30/03/2023
            • 0
              Tratamiento de errores: errores personalizados
              29/03/2023

            ¿QUIERES PUBLICITAR TU EMPRESA AQUÍ?

            SUSCRÍBETE A NUESTRO
            NEWSLETTER

            Recibirás información puntual sobre el mundo de Access y VBA

            ¡Próximamente!

            Promovemos el uso de Access y de la programación en VBA en todo el mundo

            Centro de conocimiento


            Toda la sabiduría de los mejores programadores de Access y VBA a tu alcance.

            Legal

            Política de privacidad

            Condiciones de uso

            Condiciones del redactor

            ®Access Global 2021 | All right reserved
                      No hay resultados Mostrar todos los resultados