Cuando usar modulo o modulo de clase en vba de excel

Maestros me gustaría aclarar una duda de cuando se debe usar en las macros los famosos módulos o módulos de clase pues yo veo que todo se realiza en los eventos del userform para que sirven estos módulos y cuando se deben usar un ejemplo de cada uno me seria más didáctico para comprenderlos mejor

1 Respuesta

Respuesta
2

Cuándo usar un módulo o un userform o módulo de clase o cuándo poner el código en los eventos de la hoja. La experiencia es la que te va a indicar en dónde es la mejor opción.

----

Te agrego unos comentarios:

Si estás trabajando en un userform y el código es muy extenso, entonces puedes pasar algunos códigos a un módulo.

Si el código del userform lo utilizas en varios lugares, entonces puedes pasar algunos códigos a un módulo.

Ejemplo:

Actualmente tienes esto en el userform:

Option Explicit
Dim a As Variant    'Al inicio del código
Sub FilterData()
  Dim txt1 As String
  Dim i As Long, j As Long, k As Long
  '
  ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))
  listcargaproductos.Clear
  For i = 1 To UBound(a, 1)   'linea que mellega al ultimo registro
    If txtbuscapro.Value = "" Then txt1 = a(i, 1) Else txt1 = txtbuscapro.Value
    If LCase(a(i, 2)) Like "*" & LCase(txt1) & "*" Then 'linea que me lleva a la columna requerida
      j = j + 1
      For k = 1 To UBound(a, 2)
        b(j, k) = a(i, k)
        If k = 5 Or k = 6 Then
          b(j, k) = Format(b(j, k), "$ #,##0.00")
        End If
      Next
    End If
  Next i
  If j > 0 Then listcargaproductos.List = b
End Sub
Private Sub txtbuscapro_Change()
 Call FilterData
End Sub

Puedes cambiarlo a esto en el userform:

Option Explicit
Private Sub txtbuscapro_Change()
 Call FilterData
End Sub
Private Sub txtprecio1_Change()
  txtprecio1 = Format(txtprecio1, "$#")
  If Not IsNumeric(txtprecio1.Text) And _
    txtprecio1.Text <> "" Then
    Beep
    MsgBox "El dato Precio  es Numerico"
    txtprecio1.Text = ""
    txtprecio1.SetFocus
  End If
End Sub

Y esto en un módulo:

Option Explicit
Public a
Sub FilterData()
  Dim txt1 As String
  Dim i As Long, j As Long, k As Long
  '
  ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))
  With frmproductos
    .listcargaproductos.Clear
    For i = 1 To UBound(a, 1)   'linea que mellega al ultimo registro
      If .txtbuscapro.Value = "" Then txt1 = a(i, 1) Else txt1 = .txtbuscapro.Value
      If LCase(a(i, 2)) Like "*" & LCase(txt1) & "*" Then 'linea que me lleva a la columna requerida
        j = j + 1
        For k = 1 To UBound(a, 2)
          b(j, k) = a(i, k)
          If k = 5 Or k = 6 Then
            b(j, k) = Format(b(j, k), "$ #,##0.00")
          End If
        Next
      End If
    Next i
    If j > 0 Then .listcargaproductos.List = b
  End With
End Sub

Cuando trabajas cualquier macro va en un módulo.

Hay botones, como los de controlactiveX que el código va en la hoja.


Los objetos en excel pertenecen a una Clase, por ejemplo un textbox pertenece a una Clase (internamente en vba-excel), en esa clase están indicadas las propiedades y métodos que puedes utilizar con el textbox.

Pero también puedes crear una clase, esta clase se crea en un módulo de clase, donde puedes indicar los métodos y las propiedades que tú desees.

Aquí unos ejemplos de una clase:

Evento Change para cualquier TextBox en un formulario.

Colocar solo números en textbox

Hacer que solo se puedan poner números en muchos textbox

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas