【问题标题】:Convert Excel VBA to C++Builder OLE API将 Excel VBA 转换为 C++Builder OLE API
【发布时间】:2021-03-30 11:01:19
【问题描述】:

如何在 OLE 中将以下 VBA 代码转换为 c++ builder?谢谢。

Range("A10:B28").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatter).Select
ActiveChart.SetSourceData Source:=Range("Sheet1!$A$10:$B$28")
ActiveSheet.Shapes("test1").IncrementLeft -288.5293700787
ActiveSheet.Shapes("test1").IncrementTop -39.7059055118

我试过下面的代码,c++ builder在最后一行崩溃

#include <excel_2k.h>

outXL = Variant::CreateObject("excel.application");
outXL.OlePropertySet("Visible", true);
outWorkbooks = outXL.OlePropertyGet("Workbooks");
outWorkbook = outWorkbooks.OleFunction("Open", "D:\\test.xls");
outWorkSheets = outWorkbook.OlePropertyGet("Worksheets");
outActiveSheet = outWorkbook.OlePropertyGet("Worksheets", 0);
outActiveSheet.OlePropertyGet("Activate");


Range=outActiveSheet.OlePropertyGet("Range",
        outActiveSheet.OlePropertyGet("Cells",5,1),
        outActiveSheet.OlePropertyGet("Cells",20,2));
Chart = outActiveSheet.OlePropertyGet("Shapes").OleFunction("AddChart2");

//=========This line Dump ERROR=========
Chart.OlePropertySet("ChartType",xlXYScatter);

【问题讨论】:

  • 究竟以什么方式崩溃?实际的错误信息是什么?
  • 在您的 VBA 中,AddChart2() 有两个参数,240xlXYScatter。在您的 C++ 中,您对AddChart2() 的调用只有一个参数,即xlXYScatter。也许那里有什么?
  • @JosephWillcoxson 可能吧,不过不知道怎么修改代码,网上的OLE资源不够用。。。
  • @RemyLebeau 显示 Eolesyserror 未声明的标识符

标签: vba c++builder ole


【解决方案1】:

IDK,如果这是答案,但是ISTM你需要在这里修改代码

Chart = outActiveSheet.OlePropertyGet("Shapes").OleFunction("AddChart2", 240, xlXYScatter);

这就是它在 VBA 中的调用方式。你只有 OleFunction("AddChart2")

函数调用后Chart的值是多少?

【讨论】:

    【解决方案2】:

    我已经解决了这个问题,请参考以下代码...

    Chart = outXL.OlePropertyGet("Charts").OleFunction("Add");
    Chart.OlePropertySet("ChartType", xlXYScatter);
    Range=outActiveSheet.OlePropertyGet("Range",
        outActiveSheet.OlePropertyGet("Cells",iDrawRowFrom,iDrawColFrom),
        outActiveSheet.OlePropertyGet("Cells",iDrawRowTo,iDrawColTo));
    
    Chart.OleProcedure("SetSourceData", Range);
    Chart.OleFunction("Location", 2, strOutSheetName.c_str());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      相关资源
      最近更新 更多