如何定义Excel单元格部分可见?

时间:2016-07-01 12:54:16

标签: c# excel excel-vba office-interop vba

是否可以使用Excel互操作来定义部分单元格是否可见?

enter image description here

我知道使用Application.ActiveWindow.VisibleRange我可以获得可见的工作范围。 第46行的此单元格包含在此范围内,但是我们是否有一些方法可以定义单个单元格仅部分可见?

我们的加载项会将一些文本插入到单元格中。我的任务是滚动一个选定的单元格,使其完全可见。如果我在Excel中双击这样的单元格,光标将出现在那里,并且页面滚动了一点,我想用C#代码做同样的事情。 到目前为止,我找到了定义用户使用最后一行(通过使用Application.ActiveWindow.VisibleRange并使用Application.ActiveWindow.SmallScroll滚动)的情况的方法,但我不能保证最后一行总是部分可见 - 我不需要滚动完全可见的单元格。

2 个答案:

答案 0 :(得分:1)

我们可以使用Application.Goto将单元格置于页面顶部,然后使用ActiveWindow.LargeScroll

进行分页,从而使该范围内的最后一个单元格部分可见
Sub MakeLastCellPartiallyVisible(rCell As Range)
    Dim lastVRow As Long
    lastVRow = rCell.Row + rCell.Rows.Count - 1
    Application.Goto Reference:=Rows(lastVRow), Scroll:=True
    ActiveWindow.LargeScroll Down:=-1
End Sub

答案 1 :(得分:0)

我的目标是滚动部分可见的细胞以便看到整个细胞。如果我的代码将一些值插入A46单元格(有问题),我需要向下滚动一下以查看整个单元格。 C#中的方法:

public void MakeCellVisible(int columnIndex, int rowIndex)
{
    var visibleRange = Application.ActiveWindow.VisibleRange;
    var lastColumn = visibleRange.Column + visibleRange.Columns.Count - 1;
    var lastRow = visibleRange.Row + visibleRange.Rows.Count - 1;

    int down, toRight;
    if (rowIndex == lastRow)
    {
        down = 1;
    }

    if (columnIndex == lastColumn)
    {
        toRight = 1;
    }

    if (0 != down || 0 != toRight)
    {
        Application.ActiveWindow.SmallScroll(Down: down, ToRight: toRight);
    }
}