当excel是COM对象时,为什么ActiveWindow.SplitColumn不起作用?

时间:2014-05-21 08:07:36

标签: excel vba office-interop

我有一些相当古老的技术,Office Web Components(OWC)。

这意味着在我的网页上我将Excel嵌入为OLE对象

<object classid="clsid:0002E551-0000-0000-C000-000000000046" id="Spreadsheet1" width="1100" height="750">
            <param name="DataType" value="XMLDATA" />
            <param name="AllowPropertyToolbox" value="-1" />
            <param name="AutoFit" value="1" />
            <param name="Calculation" value="-4105" />
            <param name="Caption" value="Microsoft Office-regneark" />
            <param name="DisplayColumnHeadings" value="-1" />
            <param name="DisplayGridlines" value="-1" />
            <param name="DisplayHorizontalScrollBar" value="-1" />
            <param name="DisplayOfficeLogo" value="-1" />
            <param name="DisplayPropertyToolbox" value="0" />
            <param name="DisplayRowHeadings" value="-1" />
            <param name="DisplayTitleBar" value="0" />
            <param name="DisplayToolbar" value="-1" />
            <param name="DisplayVerticalScrollBar" value="-1" />
            <param name="DisplayWorkbookTabs" value="1" />
            <param name="EnableEvents" value="-1" />
            <param name="MaxHeight" value="80%" />
            <param name="MaxWidth" value="80%" />
            <param name="MoveAfterReturn" value="-1" />
            <param name="MoveAfterReturnDirection" value="-4121" />
            <param name="RightToLeft" value="0" />
            <param name="ScreenUpdating" value="-1" />
            <param name="EnableUndo" value="-1" />
            <!--param name="XMLURL" value="rangeirange.xml"-->
        </object>

我想这不是太重要,但后来我想冻结一些列,通常我可以在JavaScript中使用所有VBA,但这段代码失败了:

exlObj = document.all.Spreadsheet1;
exlObj.ActiveWindow.SplitColumn = 3;

exlObj确实具有ActiveWindow属性,但它没有SplitColumn属性。

编辑:

现在我已经调查了,这是代码问题。请注意,这是JavaScript,但它模仿VBA,因为这就是COM的工作原理。

        exlObj.Sheets(1).Activate();
        exlObj.ActiveWindow.FreezePanes = false;
        exlObj.Sheets(1).Range('B2').Activate();
        exlObj.ActiveCell.Value = 'Foo';
        //exlObj.ActiveWindow.SplitRow = 10;
        exlObj.ActiveWindow.FreezePanes = true; // <- this is the line

我的问题是,即使在最后一行之后,FreezePanes属性也始终为false。

这样的财产可能会出现什么问题?我有一些旧的代码,它们的功能相同,并且有效。

1 个答案:

答案 0 :(得分:1)

事实证明我只需要使用Select而不是Activate

    exlObj.Sheets(1).Activate();
    exlObj.ActiveWindow.FreezePanes = false;
    exlObj.Sheets(1).Range('B2').Select(); <-- changed Activate() to Select()
    exlObj.ActiveCell.Value = 'Foo';
    //exlObj.ActiveWindow.SplitRow = 10;
    exlObj.ActiveWindow.FreezePanes = true; // <- this is the line