Running a macro in Access

I have to run a macro in Access (don't ask me why).  How can I do this through one of the MFC database classes?
LVL 8
mnashadkaAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

AlexFMCommented:
Oops, it's not Access. Sorry.
AndyAinscowFreelance programmer / ConsultantCommented:
No.  You can only get at the tables and queries with the MFC Database classes.
You may be able to do it with automation - but I haven't tried this (also do you really mean a macro or a piece of code in a module).
C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

mnashadkaAuthor Commented:
It could either be a macro or a sub.  I figured that macros would be easier.  I tried to #import "path\msacc9.olb" to get to the automation, but it gave me some errors about a Property class not being defined.  I was also #importing the MSO9.dll and the VBE6EXT.olb (I think those were the extensions, and I tried it with both no_namespace and using namespace after the import, but I couldn't get past that error.
Nass89Commented:
Hi,
You could use DDE(Dynamic Data Exchange) to run a macro in Access. I did it using National Instruments Labview, but I didn't it using MFC. I think it is possible to run macro with MFC too.

Good Luck!
mnashadkaAuthor Commented:
Nass89, could you explain how you did it?
AndyAinscowFreelance programmer / ConsultantCommented:
This was in another question.  It looks like it is what you require.  (What error do you get with the #import ?)

COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
     
     MSAccess::_Application oApp;
    oApp.CreateDispatch("Access.Application");
     MSAccess::DoCmd oDoCmd = oApp.GetDoCmd();
     oApp.OpenCurrentDatabase("C:\\Documents and Settings\\Administrator\\Desktop\\ASSISTENT BASE\\AS_DB1.mdb", FALSE,"macro1");
     
     oApp.SetVisible(true);

     
     MSAccess::_CurrentProject oProj = oApp.GetCurrentProject();
    MSAccess::AllObjects oObjs = oProj.GetAllModules();

    CString sModName, sProcName, sItem;
   
          //Module must be open:
         
     oDoCmd.RunMacro(COleVariant("macro1"),vOpt,COleVariant(sModName));
    oDoCmd.Maximize();

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Nass89Commented:
Hi,
As I wrote, I did it with National Instruments LABVIEW. If you can use DDE, the procedure is the same.
First open a DDE connection to your databse file. Second run a command using Macro name, and finally close the connection.
Can you use DDE ? MSDN hase many article about it.

Good Luck!
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.