• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 怎样在VC中调用Excel中的VBA程序??

怎样在VC中调用Excel中的VBA程序??

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vc调用matlab程序,vba如何调用子程序,vba调用子程序,vba调用外部程序,vba调用其他程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 怎样在VC中调用Excel中的VBA程序??
描述:

我要在VC程序里调用Excel中的VBA程序,如何实现??
能操作Excel的菜单也行!
在VC里嵌入Excel后如何控制混合的菜单?
哪位高手清楚请指教!!!!!
有实现的例子吗?或实现的方法!


解决方案1:

如何利用MFC添加VBA宏?
有时程序员需要从一些应用程序如Word调用自动化客户(如Microsoft Excel),下来我们就看看如何利用VC++来实现这一点。本文主要讨论如何使用MFC向Word中添加VBA宏。此程序同时也添加CommandBar控件按钮,此按钮用来运行此宏以实例化Excel。
如果您需要对Office的不同版本进行开发,请注意不同的类型库。下面我们针对Office97进行说明。Microsoft Office 97的类型库为:
C:\Program Files\Microsoft Office\mso97.dll.
而Microsoft Office 2000的类型库为Mso9.dll,对于XP,它的类型库则为C:\Program Files\Common Files\Microsoft Shared\Office10\MSO.dll.
除了要添加上面所说的类型库以外,还需要添加VBE编辑器类型库,此类型库为:C:\Program Files\Common Files\Microsoft Shared\VBA 
现在,你会得到不许多ColeDispatchDriver包装类,这些类均是刚才导入类型库得到的。为了解决重复的问题,我们引入"namespace"机制。在Mswordx.h文件开始处加入:
namespace word { // that's an opening brace.
而在结尾处加入"};"
在Mswordx.cpp文件中,在"#endif"和LPDISPATCH _Application:GetApplication之前加入 using namespace word;
找到LPDISPATCH Shapes::GetApplication(),在此行前加入using namespace word;
在Vbeext1.h file中找到class Window : public COleDispatchDriver,在此行前加入
namespace ext {
在文件结尾补上另一半大括号。在Vbeext1.cpp中,找到LPDISPATCH Window::GetVbe(),在此行前加入using namespace ext;
下面我们就要在AutoProjectDlg.cpp加入这些头文件了: 
#include "msword8.h" // or appropriate version's header
#include "vbeext1.h"
#include "mso97.h" // or appropriate version's header 
将下面的代码加入到CAutoProjectDlg::OnRun()中(它位于AutoProjectDlg.cpp中):
      // Sample Code
      // -----------
      // 
      // 代码完成下面的功能:
      // 1. 启动Microsoft Word.
      // 2. 加入"TestMacro"宏
      // 3. 为上面的宏加入新按钮
      // 4. 双击此按钮,启动Microsoft Excel.
      // 6. 再次双击会关闭Excel.
      // 
      #define FUNCTION_TEXT "Dim oXL as Object\n\r" \ 
       "Dim oBook as Object\n\r" \ 
       "Public Sub TestMacro()\n\r" \ 
       "Set oXL = CreateObject(\"excel.application\")\n\r" \ 
       "oXL.Visible = True\n\r"  \ 
       "Set oBook = oXL.Workbooks.Add()\n\r" \ 
       "End Sub\n\r" \ 
       "Public Sub CloseExcel()\n\r" \ 
       "oBook.Saved = True\n\r" \ 
       "Set oBook = Nothing\n\r" \ 
       "oXL.Quit\n\r" \ 
       "Set oXL = Nothing\n\r" \ 
       "End Sub\n\r"
     // Declarations:
      word::_Application oWord;  
      HRESULT hr;
      DISPID dispID = 0;
      LPDISPATCH lpDisp = 0;
      VARIANT vResult;  // A Struct with a pdispVal member
      long lCount = 0;
      char buf[1024];   // General purpose message buffer
      OLECHAR *strCBs = L"CommandBars";
      word::Shapes oShapes; // using namespace
      word::Shape oShape;
      // Convenient values declared as ColeVariants.
      COleVariant covTrue((short)TRUE), covFalse((short)FALSE),
                  covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
      // Get the Word IDispatch pointer and
      //  attach it to the objWord object.
      if (!oWord.CreateDispatch("Word.Application"))
      {
       AfxMessageBox("Couldn't get Word object.");
       return;
      }
      oWord.SetVisible(TRUE);  //This shows the application.
      word::Documents oDocs(oWord.GetDocuments());
      word::_Document oDoc;
      /*
      oDoc.AttachDispatch(oDocs.Add(
                           covOptional, // Template.
                           covFalse    // NewTemplate.
                           ));
                           /*  // End of Word 97 code
      /* 下面的代码是为Word 2002设计的 */ 
      oDoc.AttachDispatch(oDocs.Add(
                           covOptional, // Template.
                           covFalse,  &n

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Vc怎么调用net写的程序集呢?
  • VC调用EXCEL程序后,如何发布到无EXCEL环境中!
  • matlab的combuilder和VC做的程序发布问题
  • 怎样在VC中调用Excel中的VBA程序??

相关文章

  • 2017-06-04 高手请指点:什么样的情况下使用进程内组件,什么样情况使用进程外组件?
  • 2017-06-05 怎样通过一个Cwnd类得到该窗口所在的进程id?
  • 2017-06-04 webbrowser组件问题(专题讨论)
  • 2017-06-04 为何用A2OLE将LPCSTR转到LPOLESTR会转换失败?
  • 2017-06-04 另一个com组件的问题。。。高手请帮忙。。。
  • 2017-06-05 为什么我播放声音会非法操作?
  • 2017-06-04 创建一个active控件的问题
  • 2017-06-05 多线程dll
  • 2017-06-05 MCI编写一个简单的MP3播放器
  • 2017-06-04 初学有个对我来说好久也没有解决的问题来着有分

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • SafeArrayCreate如何创建2维数组?
    • 高分求解:ActiveXDLL是什么意思?各位大侠请指点一二!
    • 关于AfxBeginThread的问题
    • 在VC6中的ATLDLL工程中出现如下错误,是怎么回事呀?
    • 进程句柄与主窗口句柄
    • 各位大神,求助!!关于ActiveX控件的问题!
    • webbrowser内存释放
    • 求WinCE50下能用的仪表控件!!!
    • dll中能够弹出对话框吗?
    • 怎样在新建word中加入文本,请高手指教!!!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有