Keep Object with Focus on Display Screen

A

andy

I have a page with many objects (textboxes, Option
buttons, comboboxes). There are more objects than can fit
on the display screen. I have used the code below to tab,
shift/tab back and forth between objects on the page

Does anyone know how to code to accomplish the following:

When a field which I have progressivly tabbed into, is
beyond the display screens view (below), I would like the
screen to shift down the page so that the object which I
have tabbed into, which has the focus (e.g.
textbox1.activate) is in my view without me having to
scroll down, or do any extra keystrokes.

Private Sub cboEnergyType_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case vbKeyTab, vbKeyReturn, vbKeyDown, vbKeyUp
Application.ScreenUpdating = False
bBackwards = CBool(Shift And 1) Or (KeyCode =
vbKeyUp)
If Application.Version < 9 Then Sheet1.Range
("A1").Select
If bBackwards Then
With Me.txtStopPayComments
.Activate
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
With Me.txtAcctNo
.Activate
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
Application.ScreenUpdating = True
End Select
End Sub

Thank you in advance
God bless you
 
T

Tom Ogilvy

Untested, but try something like the below modifications.

Private Sub cboEnergyType_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim rng as Range
Select Case KeyCode
Case vbKeyTab, vbKeyReturn, vbKeyDown, vbKeyUp
Application.ScreenUpdating = False
bBackwards = CBool(Shift And 1) Or (KeyCode =
vbKeyUp)
If Application.Version < 9 Then Sheet1.Range
("A1").Select
If bBackwards Then
set rng = Me.txtStopPayComments.TopLeftCell
if Intersect(activeWindow.VisibleRange,rng) is nothing then
ActiveWindow.ScrollRow = rng.row
ActiveWindow.ScrollColumn = rng.column
End if
With Me.txtStopPayComments
.Activate
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
set rng = Me.txtAcctNo.TopLeftCell
if Intersect(activeWindow.VisibleRange,rng) is nothing then
ActiveWindow.ScrollRow = rng.row
ActiveWindow.ScrollColumn = rng.column
End if

With Me.txtAcctNo
.Activate
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
Application.ScreenUpdating = True
End Select
End Sub
 
A

andy

Thank you Tom for your reply,

The modified code does do the screen movement I had
requested. However when the screen reacts to the
forward/backward movement adjusting itself to keep the
object on the display screen, it puts the object in the
upper left corner of the display and I can't see any of
the labels to the left. None of the objects are left
alligned.

The code works, however can I just send the screen
position to the leftmost cell of the row the object is
sitting on?

Thank you again for you help
God bless you
-----Original Message-----
Untested, but try something like the below modifications.

Private Sub cboEnergyType_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim rng as Range
Select Case KeyCode
Case vbKeyTab, vbKeyReturn, vbKeyDown, vbKeyUp
Application.ScreenUpdating = False
bBackwards = CBool(Shift And 1) Or (KeyCode =
vbKeyUp)
If Application.Version < 9 Then Sheet1.Range
("A1").Select
If bBackwards Then
set rng = Me.txtStopPayComments.TopLeftCell
if Intersect
(activeWindow.VisibleRange,rng) is nothing then
ActiveWindow.ScrollRow = rng.row
ActiveWindow.ScrollColumn = rng.column
End if
With Me.txtStopPayComments
.Activate
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
set rng = Me.txtAcctNo.TopLeftCell
if Intersect
(activeWindow.VisibleRange,rng) is nothing then
 
T

Tom Ogilvy

sure, just set ScrollColumn to 1

ActiveWindow.ScrollColumn = 1

Regards,
Tom Ogilvy
 
G

Guest

Thanks again, that work like a charm
God bless you
-----Original Message-----
sure, just set ScrollColumn to 1

ActiveWindow.ScrollColumn = 1

Regards,
Tom Ogilvy




.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top