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
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?
Provem-ho:
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:
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