This code limits the focus in a big MSFlexGrid to a certain range of columns and rows. It limits movement by using the entercell method. It controls the use of enterkey, arrowkey, or mouse clicking with simple, on-cell direct editing:
Const XTRA_COLS = 3 'including fixed columnConst XTRA_ROWS = 15 'including fixed rowPrivate Sub flxGrdDemo_EnterCell() With flxGrdDemo If .Col > .Cols - XTRA_COLS Then .Col = 1 If .Row + 1 <= .Rows - XTRA_ROWS Then .Row = .Row + 1 Else .Row = 1 .Col = 1 End If End If End WithEnd SubPrivate Sub FlxGrdDemo_KeyPress(KeyAscii As Integer)Select Case KeyAscii Case vbKeyReturn ' When the user hits the return key ' this code'll move the next cell or row. With flxGrdDemo If .Col + 1 <= .Cols - XTRA_COLS Then .Col = .Col + 1 ElseIf .Row + 1 <= .Rows - XTRA_ROWS Then .Row = .Row + 1 .Col = 1 Else .Row = 1 .Col = 1 End If End With Case vbKeyBack ' Delete the previous character when the ' backspace key is used. With flxGrdDemo If Trim(.Text) <> "" Then _ .Text = Mid(.Text, 1, Len(.Text) - 1) End With Case Is < 32 ' Avoid unprintable characters. Case Else 'Else print everything With flxGrdDemo .Text = .Text & Chr(KeyAscii) End WithEnd SelectEnd SubPrivate Sub FlxGrdDemo_KeyUp(KeyCode As _Integer, Shift As Integer)Select Case KeyCode ' Copy Case vbKeyC And Shift = 2 ' Control + C Clipboard.Clear Clipboard.SetText flxGrdDemo.Text KeyCode = 0 ' Paste Case vbKeyV And Shift = 2 'Control + V flxGrdDemo.Text = Clipboard.GetText KeyCode = 0 ' Cut Case vbKeyX And Shift = 2 'Control + X Clipboard.Clear Clipboard.SetText flxGrdDemo.Text flxGrdDemo.Text = "" KeyCode = 0 ' Delete Case vbKeyDelete flxGrdDemo.Text = ""End SelectEnd Sub