コントロールオブジェクト(acTextBoxなど)がVBAのページコレクションのメンバーであるかどうかを特定するにはどうすればよいですか?VBAコントロールオブジェクトのセクションまたはページを探す
コントロールオブジェクトにフォーカスがある場合、使用されているキーのタイプに基づいてフォーカスを次のcontrol.tabindexに移動するための関数が呼び出されます。私はSendkeys "{TAB}"でこれを行うことができましたが、このメソッドは常にキーボードのNUMLOCKを無効にするので、これを変更したいと思います。
以下の関数はこれまで通り機能しますが、プロシージャはすべてのコントロールをフォーム内で考慮します。関数が呼び出された同じセクションまたはページ内のコントロールのみを考慮する必要があります。これを達成するには、アクティブなコントロールがページおよび/またはセクション内にあるかどうか、もしあれば、このページ/セクションの名前またはインデックスを知る必要があります。私はこれを行うためのコードを見つけることができません。
Public Function GotoNextTab()
Dim ctlNext, ctlCurrent As Control
Dim frmCurrent As Form
Dim lngNextTab As Long
Set frmCurrent = Screen.Activeform
Set ctlCurrent = Forms(frmCurrent.Name).ActiveControl
lngNextTab = Val(ctlCurrent.TabIndex) + 1
Do Until lngNextTab = frmCurrent.Controls.Count
For Each ctlNext In frmCurrent.Controls
Select Case ctlNext.ControlType
Case acCheckBox, _
acComboBox, _
acCommandButton, _
acListBox, _
acOptionButton, _
acSubform, _
acTabCtl, _
acTextBox, _
acToggleButton
If ctlNext.TabIndex = lngNextTab Then
If ctlNext.TabStop = True Then
'Make sure that the focus can be set here!
If ctlNext.Visible = True And ctlNext.Enabled = True Then
ctlNext.SetFocus
Exit Function
Else
'Focus could not be moved, so increase lngNextTab
lngNextTab = lngNextTab + 1
End If
Else
'This was the last tab, so exit
Exit Function
End If
End If
End Select
Next ctlNext
Loop
End Function
フォームに関する*ページコレクション*とはどういう意味ですか?この[Access 2003の機能](https://msdn.microsoft.com/en-us/library/office/aa210669(v = office.11).aspx)を意味しますか?この興味深いフォームのスクリーンショットを共有できる場合そして、この関数はどこで呼び出されていますか?イベントをトリガするイベント(OnOpen、OnClick、AfterUpdate) – Parfait
私はv2010で働いていますが、それはまさに私が意味することです。コントロールは、タブコントロールオブジェクトの異なるページにあります。 Tabindexの値の範囲は、タブページ内のコントロールの数に制限されています(そうでなければ、単に連続的に番号を付けるだけです)。だからこそ私はコントロールがあるページ(Pages(Index))を知りたいのですが、 – Art