best丨Zp 2017-06-06 04:08 采纳率: 30%
浏览 1568

.net 调用Excel 中 VBA宏 返回值-2146826273

private void button1_Click(object sender, EventArgs e)
{
try
{

            object oMissing = System.Reflection.Missing.Value;

            Excel.Application oExcel = new Excel.Application();
            oExcel.Visible = true;
            Excel.Workbooks oBooks = oExcel.Workbooks;
            Excel._Workbook oBook = null;
            oBook = oBooks.Open(Application.StartupPath.ToString()+"\\ts.xlsm", oMissing, oMissing,
                oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,
                oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);


           // RunMacro(oExcel, new Object[] { "Sheet1.DoKbTest" });
           // RunMacro(oExcel, new Object[] { "Sheet1.DoKbTestWithParameter", "传个参数给你" });
            RunMacro(oExcel, new Object[] { "Sheet1.aa()" });

            oBook.Close(false, oMissing, oMissing);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
            oBook = null;
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);
            oBooks = null;
            oExcel.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);
            oExcel = null;




        }
        catch (Exception ex)
        {

            Debug.Print(ex.ToString());
        }



    }


    /// <summary>
    /// 调用excel中VBA  
    /// </summary>
    /// <param name="oApp"></param>
    /// <param name="oRunArgs"></param>
    private void RunMacro(object oApp, object[] oRunArgs)
    {


        try
        {
            object o = null;             
           o= oApp.GetType().InvokeMember("Run",
            System.Reflection.BindingFlags.Default |
            System.Reflection.BindingFlags.InvokeMethod,
            null, oApp, oRunArgs);


        }
        catch (Exception ex)
        {

            Debug.Print(ex.ToString());
        }


    }

    这个是EXCEL中代码

Public Function aa()
aa = "1123"
End Function

程序返回的O 一直是 -2146826273 。。无论VBA中返回什么值都是 -2146826273

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-06-06 16:14
    关注

    电脑里安装完整版的excel了没有,注意勾选“.net编程性”选项。
    还不行,重新引用下excel

    评论

报告相同问题?

悬赏问题

  • ¥15 slam rangenet++配置
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊