システム:Win7 HomePremium上のMSOffice Pro Plus 2010
OK、これは迷惑です!とてもシンプルなはずです。
フォームに垂直スクロールバーがあります。スクロールバーは、フォームが開いたままの状態で、フォームの下にあるスプレッドシートをスクロールします。スプレッドシートの一部の行は非表示になっているため、非表示のままにする必要があります。多くの場合、スクロールバーの上にある小さな変更矢印をクリックすると、実際にはフォームが下に移動します。小さな変化値は1です。
試したこと:ターゲット行が非表示の行である場合、表示されている行に到達するまで減算を続けるようにコードを追加しました。これは問題を解決しませんでした。
また、ボタン1つと、スクロールバーと以下のコードの簡略化されたバージョンのみを含むフォームを使用して、空白のExcelを作成してみました。同じ問題が発生しました。
PS DOWN(小さな変更)矢印を使用する場合、まったく同じ問題が発生します。
' 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
*上(小さな変更)矢印をクリックした場合の出力例*
前の884新しい883diff -1 '良い。1を上にスクロールして非表示の行を表示し、上の表示されている行を探します。
880に移動します。
前の880新しい882diff 2 '悪い。879ではなく882はどこで入手できましたか?
884に移動
前の884新しい881diff -3 '悪い。なぜ-1ではなく-3?新しい881が883ではないのはなぜですか?
880に移動
前の880新しい880の差分0
880に移動
前の880新しい879の差分-1
876に移動
前の876新しい878差分2
880に移動
*この範囲の表示行**
874
876
880
884
885
886
あなたが助けることができることを願っています!
Initializeルーチンの形式でWith me.sbRows
...があります.Value = ActiveWindow.ScrollRow
が、ルーチンに同等のステートメントはありませんsbRows_Change
。
正しい行がに格納されmlPrevScrollRow
、それが更新に使用されActiveWindow.ScrollRow
ます。行番号は更新に使用されないためsbRows.Value
、実際のスクロール行と同期しなくなります
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加