表单上的滚动条滚动到电子表格上的错误行

时间:2013-12-26 04:29:13

标签: excel vba excel-vba

系统:Win7 Home Premium上的MS Office Pro Plus 2010

好的,这很烦人!应该这么简单。

我在表单上有一个垂直滚动条。当表单保持打开状态时,滚动条会在表单下方滚动电子表格。电子表格中的某些行是隐藏的,需要保持隐藏状态。通常,当我单击滚动条UP上的小变化箭头时,它实际上会将表单向下移动。小的变化值是1.

我尝试过:我添加了代码,这样如果目标行是隐藏行,我会继续减去直到找到可见行。这并没有解决问题。

我还尝试使用1个按钮和一个只包含滚动条和下面代码简化版本的表单创建一个空白的Excel。遇到了同样的问题。

P.S。使用DOWN(小变化)ARROW时,我遇到了完全相同的问题。

' This is in the form Initialize routine
    With Me.sbRows
     .Min = 1
     .Max = lFindNewRow(m_wksPST)
     .Value = ActiveWindow.ScrollRow
     .LargeChange = 25
     .SmallChange = 1
    End With

' This is the vertical scrollbar change routine
Private Sub sbRows_Change()
    ' If target row is hidden, keep looking until we find a visible row to use as the target.
   Dim lDiff As Long

   With Me.sbRows
      lDiff = .Value - mlPrevScrollRow  ' Stores the top row before scrollbar was clicked
      Debug.Print "Prev " & mlPrevScrollRow & " New " & .Value & " diff " & lDiff
      mlPrevScrollRow = .Value
      While m_wksPST.Rows(mlPrevScrollRow).Hidden And mlPrevScrollRow > 0 And _
            mlPrevScrollRow < 65500
        If lDiff < 0 Then
            mlPrevScrollRow = mlPrevScrollRow - 1
        Else
            mlPrevScrollRow = mlPrevScrollRow + 1
        End If
      Wend
    End With
    ActiveWindow.ScrollRow = mlPrevScrollRow
    Debug.Print "Move to " & mlPrevScrollRow
End Sub

*仅点击向上(小变化)箭头*

时的输出示例

Prev 884 New 883 diff -1'好。向上滚动1到隐藏的行,查找上面的可见行。

转到880'好。

Prev 880 New 882 diff 2'Bad。它在哪里得到882而不是879?

转到884

Prev 884 New 881 diff -3'Bad。为什么-3不是-1?为什么新的881不是883?

转到880

Prev 880 New 880 diff 0

转到880

Prev 880 New 879 diff -1

转到876

Prev 876 New 878 diff 2

转到880

*此范围内的可见行**
874个
876个
880个
884个
885个
886

希望你能帮忙!

1 个答案:

答案 0 :(得分:1)

您在初始化例程中有With me.sbRows ... .Value = ActiveWindow.ScrollRow,但sbRows_Change例程中没有等效语句。

正确的行存储在mlPrevScrollRow中,用于更新ActiveWindow.ScrollRow。行号从不用于更新sbRows.Value,因此它与实际滚动行

不同步