diumenge, 11 de novembre de 2012

Executar un mòdul des de una macro en Access

Si has creat un procediment i vols executar-ho des de una macro, en aquesta entrada t'explicaré com aconseguir-ho tot i que, strictu senso, no es pot fer.

La situació podria ser aquesta:


Has creat un procediment que simplement vol copiar un fitxer des d'un directori fins a un altre. Quan ho executes directament funciona.

L'integres dins una macro amb la opció AbrirMódulo i es queda a sobre del codi i has d'executar-ho a ma....
Doncs quina tristor de macro!!!

Hi han diferents errors. El primer ens ho explica molt bé, com sempre, Eduardo Olaz des del Carrer Estafeta de Pamplona:

Los módulos no se ejecutan, lo que se ejecutan son los procedimientos incluidos en los módulos.

AbrirMódulo lo que te hace es abrir el editor de código en modo diseño por el módulo y procedimiento que le indiques.

Si lo que quieres es que se ejecute algún procedimiento incluido en un módulo, lo que debes hacer es seleccionar la opción EjecutarCódigo.

A continuación seleccionas la función que quieres ejecutar. Para ello te puedes ayudar del asistente (tres puntos seguidos).

En la ventana del asistente te aparece la opción Funciones. Abres la estructura y seleccionas Módulos. Seleccionas el módulo y dentro de éste la función que quieres ejecutar.

Para completar la función le pones los parámetros que necesitas pasar a la función, si ésta los tuviera.

Saludos desde la calle Estafeta de Pamplona:

Eduardo Olaz
Microsoft [MVP] Access

El resaltat en color vermell és meu. Cal que et fixis fonamentalment en dos temes:
  • que no hem de fer servir AbrirMódulo, cal fer servir EjecutarCódigo
  • que no pot ser un procediment; ha de ser una funció. Per tant passarem de:


Private Sub CarregaExcel()

Dim Origen As String
Dim Destino As String

Origen = "E:\DATOS\PROVINCIA\01001\Libro1.xlsx"
Destino = "E:\DATOS\PROVINCIA\Libro1.xlsx"

FileCopy Origen, Destino

End Sub

a

Private Function CarregaExcel()

Dim Origen As String
Dim Destino As String

Origen = "E:\DATOS\PROVINCIA\01001\Libro1.xlsx"
Destino = "E:\DATOS\PROVINCIA\Libro1.xlsx"

FileCopy Origen, Destino

End Function

i tan feliços anirem a la nostra macro i escollirem EjecutarCódigo i -lamentablement- trobarem que no podem carregar la funció. Veiem el Modulo1 però no la funciò CarregarExcel:



I si no fos una funció Private? Treiem-li? 


Function CarregaExcel()

Dim Origen As String
Dim Destino As String

Origen = "E:\DATOS\PROVINCIA\01001\Libro1.xlsx"
Destino = "E:\DATOS\PROVINCIA\Libro1.xlsx"

FileCopy Origen, Destino

End Function


Provem-ho:



Doncs ara sí. Al polsar CarregaExcel passa automàticament al Generador d'expresions i ell mateix li possa els parèntesis al final. 

Per cert, "Objetivos" és el nom del projecte en VBA (fixa't en la primera imatge).

Finalment hem aconseguit el que voliem: executem el qui hi ha dins un mòdul mitjançant una macro. Però,... ens calia? No haguès estat encara més facil executar-ho des d'un formulari amb un botó? 

Si el problema és que no saps com escriure el codi d'alguna eina que fas habitualment amb macros, com ara una importació, recorda que sempre pots convertir-les automàticament:



Tags:
Load a modul in a macro
Carregar un mòdul en una macro
Cargar un módulo en una macro




Cap comentari:

Publica un comentari a l'entrada