VBA – Devolver un Valor desde un Subprocedimiento
In this Article
Este tutorial le enseñará cómo devolver un valor desde un subprocedimiento en VBA.
Un subprocedimiento no está diseñado para devolver un valor – para eso se utiliza un procedimiento de función. Sin embargo, puede haber un momento en el que esté ejecutando algún código en un subprocedimiento en el que necesite obtener un valor de ese subprocedimiento. La forma de hacerlo es utilizar Variables de Módulo o Globales o utilizar un Subprocedimiento para rellenar una hoja de Excel.
Uso de variables para devolver un valor
Puede declarar variables a nivel de módulo. Al hacerlo, esas variables pueden utilizarse en cualquier parte del módulo y las variables conservan sus valores. Para declarar una variable a nivel de módulo, simplemente declare la variable en la parte superior de su módulo de código:
Option Explicit
Dim dblQty As Double
Sub PruebaA()
'llamar al Subprocedimiento "PruebaB"
Call PruebaB
'mostrar el valor de la variable en la ventana inmediato
Debug.Print dblQty
End Sub
Sub PruebaB()
'Llenar la variable
dblQty = 900
End Sub
Para juntar todo esto, ejecutaríamos el TestA, que a su vez llamaría al TestB y nos daría el valor de 900 en la ventana inmediata.
Esto sólo funcionaría dentro del módulo, ya que la variable ha sido declarada utilizando la sentencia Dim a nivel de módulo.
Variable global
Puede declarar la variable a nivel global para utilizarla en todos los módulos de su proyecto.
Uso de un Subprocedimiento para rellenar una hoja de Excel
Otra forma de referenciar valores calculados desde un Sub Procedimiento, es simplemente escribir los datos en una Hoja de Excel y luego referenciar esos datos en otro procedimiento.
Sub LlenarRango()
Range("A1") = "Producto"
Range("B1") = "Cantidad"
Range("C1") = "Costo"
End Sub
Luego puedes referenciar esos valores en otro procedimiento haciendo referencia a los valores de las celdas:
Sub RecuperarRango()
Dim Producto As String, Cantidad As Long, Costo As Double
Producto = Range("A1")
Cantidad = Range("B1")
Costo = Range("C1")
End Sub