XLL仅适用于特定的Excel工作表,而不考虑完全限定的范围参数

XLL仅适用于特定的Excel工作表,而不考虑完全限定的范围参数,excel,vba,xll,Excel,Vba,Xll,我有一个包含以下代码的XLL文件(使用XLL.codeplex.com库): xll_rootfinder(TCHAR* x, TCHAR* y, const double min, const double max) { #pragma XLLEXPORT try { ExcelX(xlcCalculateDocument); be = ExcelX(xlfTextref, OPERX(x), OPERX(true));

我有一个包含以下代码的XLL文件(使用XLL.codeplex.com库):

xll_rootfinder(TCHAR* x, TCHAR* y, const double min, const double max)
{
#pragma XLLEXPORT
    try {
            ExcelX(xlcCalculateDocument);
            be = ExcelX(xlfTextref, OPERX(x), OPERX(true));
            nav = ExcelX(xlfTextref, OPERX(y), OPERX(true));
            typedef std::pair<double, double> Result;
            boost::uintmax_t max_iter=50;
            boost::math::tools::eps_tolerance<double> tol(5);
            Result r1 = boost::math::tools::toms748_solve(recalc, min, max, tol, max_iter);
    }
我的代码中没有对此工作表或活动工作表的引用。我已经设置了断点,并确保工作表变量设置正确

为什么XLL似乎在访问新激活的工作表时遇到问题,尽管提供了正确的范围地址,包括工作表名称


非常感谢

使用XLOPER而不是TCHAR*。Excel将为您完成这项工作。您所要做的就是将参数声明为XLL\u XLOPER而不是XLL\u OPER,以获得范围而不是值。 也许我不理解你真正的问题。汤姆748。为什么要把boost拖到这里面?直接调用Fortran即可。英特尔为此提供了一个高度优化的库。
请查看codeplex上的xllblas或xlllapack项目,并让我知道您的想法。

使用XLOPER代替TCHAR*。Excel将为您完成这项工作。您所要做的就是将参数声明为XLL\u XLOPER而不是XLL\u OPER,以获得范围而不是值。 也许我不理解你真正的问题。汤姆748。为什么要把boost拖到这里面?直接调用Fortran即可。英特尔为此提供了一个高度优化的库。 看看codeplex上的xllblas或xlllapack项目,让我知道您的想法

 Call Application.Run("ROOTFINDER", PriceAddress, NAVAddress, 45, 500)