vb6、spread3.0Jを使っています。
shiftキーまたはctrlキーが押されている間だけ複数行選択ができて、shiftキーまたはctrlキーが押されなくなったとき単一選択になるようにしたいです。
起動時は単一選択です。
shiftキーやctrlキーを押しながらマウスでクリックすると、特にコードを書いてなくても問題なく複数行選択ができます。
やりたいこと(質問したいこと)は2つあります。
1.複数選択モードに変更したとき、行の先頭行を反転表示したい。
書いたコードは以下のとおりです。
spreadのkeydownイベントに書きました。
Dim blnShift As Boolean
Dim blnCtrl As Boolean
blnShift = (Shift And vbShiftMask) > 0
blnCtrl = (Shift And vbCtrlMask) > 0
If blnShift = True Or blnCtrl = True Then
With vaSpread1
.AllowMultiBlocks = True
.OperationMode = OperationModeMulti
.ReDraw = False
.SetFocus
.Col = -1
.Row = 1
.Action = SS_ACTION_ACTIVE_CELL
.ReDraw = True
End With
End If
先頭行は反転表示されません。未選択状態となります。
2.shiftと上下の矢印ボタンを押したとき複数行選択したい。
書いたコードは以下のとおりです。
spreadのkeyupイベントに書きました。
Dim blnShift As Boolean
Dim blnCtrl As Boolean
Dim lngIdx As Long
Dim lngCol As Long
Dim lngRow As Long
Dim lngRow2 As Long
Dim lngCount As Long
blnShift = (Shift And vbShiftMask) > 0
blnCtrl = (Shift And vbCtrlMask) > 0
If blnShift = True Or blnCtrl = True Then
If intKeyCode = vbKeyDown Or intKeyCode = vbKeyUp Then
lngCol = -1
lngRow = -1
With vaSpread1
.ReDraw = False
lngCount = .SelModeSelCount
For lngIdx = 0 To lngCount - 1
lngRow = .GetMultiSelItem(lngIdx)
Exit For
Next
lngRow2 = .ActiveRow
.Col = lngCol
.Col2 = .Col
.Row = lngRow
.Row2 = lngRow2
.Action = SS_ACTION_SELECT_BLOCK
.Refresh
.ReDraw = True
End With
End If
ElseIf blnShift = False And blnCtrl = False Then
With vaSpread1
.OperationMode = OperationModeSingle
.AllowMultiBlocks = False
.Col = -1: .Row = 1
.Action = SS_ACTION_ACTIVE_CELL
End With
End If
選択行(マウスで選択)を検索して、その行からアクティブ行まで複数行選択したいです。
このコードでは、例えば1行目クリック後shift+下矢印ボタン押下で、1行目2行目を選択したいんですが、先頭行(1行目)だけが反転表示されます。
どなたか教えてもらえないですか?
よろしくお願いします。