
No.2ベストアンサー
- 回答日時:
動かしてどうするの?という感じ
ですが、動かすだけならボタン
二つで右、左です。
Private Sub scrollLeft_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long
lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, , lnDistance
End Sub
Private Sub scrollRight_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long
lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, lnDistance
End Sub
簡潔ですが、見つけにくいですね、
こんなもの。
この回答への補足
>動かしてどうするの?
表形式のフォームの中で使わせて頂きます。
カーソルキーを押すことで、エクセル風にセルを移動できるようにしたフォームです。
ただ、問題が2つ。
1.左右端のフィールドにフォーカスされた時に、左右それぞれのフォームの端を表示しきれない。
左右の余白部分が見えない。
2.フォームデザインがまずかったのか、左右キーによる左右スクロールするとヘッダー部分に置いたボタン等の表示が欠ける。
手動でスクロールバーを動かすと、表示は欠けない。
という理由でした。
そこで、
Private Sub scrollLeft_Click()
Private Sub scrollRight_Click()
を、それぞれ
function scrollLeft()
function scrollRight()
と、して
左右端のフィールドにファーカスが入ったら、scrollLeft・scrollRightを呼び出す、としました。
右端に行った時は、希望どうりの動きをしてくれます。
ただ、左端にフォーカスが入った瞬間、上にもスクロールされてしまい、そのレコードは一番上に上がってしまいます。
もう少し、ご教示頂ければとても幸です。
ちなみに、2.の方は未解決です。
VB側からスクロールバー操作させたらできるかと思ったのですが・・・
フォームのRepaintができればよいのですが。
-----------------------------------------参考コード------------------------------------------------
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
’左右端でストップさせる
If ActiveControl.Name = "左端フィールド" And KeyCode = vbKeyLeft Then KeyCode = 0
If ActiveControl.Name = "右端フィールド" And KeyCode = vbKeyRight Then KeyCode = 0
'レコードの移動
If KeyCode = vbKeyDown Then レコード移動_次
If KeyCode = vbKeyUp Then レコード移動_前
End Sub
'------------------------------------------------
Private Sub 左端フィールド_GotFocus()
scrollLeft
End Sub
Private Sub 右端フィールド_GotFocus()
scrollRight
End Sub
'------------------------------------------------
Function レコード移動_次()
DoCmd.GoToRecord , "", acNext
End Function
'------------------------------------------------
Function レコード移動_前()
DoCmd.GoToRecord , "", acPrevious
End Function
'------------------------------
Function scrollLeft()
Dim lnFormWidth As Long
Dim lnDistance As Long
lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, , lnDistance
End Function
'----------------------------
Function scrollRight()
Dim lnFormWidth As Long
Dim lnDistance As Long
lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, lnDistance
End Function
No.8
- 回答日時:
別のコードを送ってみます。
仕様は似たようなものですが、
試してみてください。
Private Sub botmLeft_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long
Dim ctl As Control
lnFormWidth = Me.Width
Me.SetFocus
Screen.PreviousControl.SetFocus
Set ctl = ActiveControl
lnDistance = lnFormWidth - CurrentSectionLeft
Requery
Me.SetFocus
GoToPage 1, , lnDistance
Requery
ctl.SetFocus
Set ctl = Nothing
' lnFormWidth = Me.Width
' lnDistance = lnFormWidth - CurrentSectionLeft
'
' Me.SetFocus
' GoToPage 1, , lnDistance
' Requery
End Sub
Private Sub botmRight_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long
Dim ctl As Control
lnFormWidth = Me.Width
Me.SetFocus
Screen.PreviousControl.SetFocus
Set ctl = ActiveControl
lnDistance = lnFormWidth - CurrentSectionLeft
Requery
Me.SetFocus
GoToPage 1, lnDistance
Requery
ctl.SetFocus
Set ctl = Nothing
' lnFormWidth = Me.Width
' lnDistance = lnFormWidth - CurrentSectionLeft
'
' Me.SetFocus
' Requery
' GoToPage 1, lnDistance
End Sub
No.7
- 回答日時:
左への移動時のRequeryの位置は
あっていますか。
Me.SetFocus
GoToPage 1, , lnDistance
Requery
End Sub
No.4
- 回答日時:
右への移動の
Requery
はコメントアウトしてみてください。
Dim ctl As Control
は使っていません。使いかけたのですが、
こちらの状況では必要ないので。
左の状況はどういうものになっていますか。
データのスクロールが改善していない、とい
うことですか。全体がスクロールしている
ということですか。
こちらのフォーム設定は
表内部はコンボ、テキスト・・・・テキスト
としています。
提示されているコードと関数の整合性
を見極める必要があるので、ちょっと
考えます。
この回答への補足
最初のscrollLeft()で、正常。
そのまま、←キー(左)を押し続けると、フォーカスされたレコード位置はそのままで、フォーム全体がスクロール。
という状況です。
深夜まで申しわけありません。
よろしくお願いいたします。
No.3
- 回答日時:
>表形式のフォームの中で
ちょっと実験してみました。
確かに、左に寄せたときデータが
移動していました。そこでコードに
少し手を加えてみたのですが。
こちらのフォーム設定が合えば
いいのですが。左のフィールドは
表のフィールドなのでしょうか。
ダミーフィールドですか。
ちょっとそのへんは判りませんが、
表の再描画を入れました。
Private Sub botmLeft_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long
lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, , lnDistance
Requery
End Sub
Private Sub botmRight_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long
Dim ctl As Control
lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
Requery
GoToPage 1, lnDistance
End Sub
関数形式になっていませんが、
変更箇所はわかりますね。
この回答への補足
ご回答頂きましたコードですが、
botmLeft_Click() ’左
「Requery」が追加されただけでしょうか?
Private Sub botmRight_Click() ’右
Dim ctl As Control 使われていない?
「Requery」追加すると、右端でストップせず他のフィールドに飛んで行ってしまいます。
でも、右端の件は解決です。
左端がいぜんとして、解決していません。
左端のフィールドは、実はコンボボックスです。
ダミーではありません。
--------------------------------------------
Private Sub 左端のフィールド_Enter()
Me![左端のフィールド].Dropdown
上下カーソルキーの動きはコンボボックス内のみのフラッグ立てる
End Sub
---------------------------------------------
実験してみたのですが、普通のテキストボックスでも同じ挙動でした。
ボタンの欠け表示の件は解決しました。
フォームヘッダーの色にグラデーションの付くスタイルだと欠けになります。
一色タイプだと欠けませんでした。
今一度、お教え頂けないでしょうか?
No.1
- 回答日時:
スクロール位置を +10 にする例です。
==============================================================
Private Declare Function GetWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal uCmd As Long) As Long
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetScrollInfo Lib "user32.dll" (ByVal hWnd As Long, ByVal nBar As Long, ByRef si As SCROLLINFO) As Long
Private Declare Function SetScrollInfo Lib "user32.dll" (ByVal hWnd As Long, ByVal nBar As Long, ByRef si As SCROLLINFO, ByVal blnRedraw As Long) As Long
Private Type SCROLLINFO
cbSize As Long
fMask As Long
nMin As Long
nMax As Long
nPage As Long
nPos As Long
nTrackPos As Long
End Type
Private Const GW_HWNDNEXT = 2
Private Const GW_CHILD = 5
Private Const SB_HORZ = 0
Private Const SB_CTL = 2
Private Const SIF_POS = 4
Private Sub コマンド0_Click()
Dim hWnd As Long
Dim strClassName As String
Dim lngReturn As Long
Dim intLen As Integer
Dim si As SCROLLINFO
hWnd = GetWindow(Me.hWnd, GW_CHILD)
Do
strClassName = Space(100)
lngReturn = GetClassName(hWnd, strClassName, 100)
If lngReturn Then
intLen = InStr(strClassName, Chr(0))
strClassName = Left(strClassName, intLen - 1)
If strClassName = "ScrollBar" Then
si.cbSize = 28
si.fMask = SIF_POS
lngReturn = GetScrollInfo(hWnd, SB_CTL, si)
si.nPos = si.nPos + 10
lngReturn = SetScrollInfo(hWnd, SB_CTL, si, True)
Exit Do
End If
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop While hWnd
End Sub
==============================================================
インデントのために全角空白を使用しています。
うまく、動きません。エラーになります。
私の技量では、コードを理解できませんでした。
今後の参考とさせて頂きます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- gooブログ 記事の下にスクロールバーが表示される 2 2022/08/19 20:42
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- Visual Basic(VBA) Excel VBA 同じ名前のフォルダがあれば作成したブックを格納するマクロをつくりたい 2 2023/01/16 16:19
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- Access(アクセス) アクセスで、androidのスマホサイズのフォームは作れますか?テキストとチェックボックスだけのフォ 1 2023/05/31 00:53
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Access(アクセス) Accessに関する質問です。 クエリーQ出勤 からフォームF出勤を作成 フォームは分割フォームで作 1 2023/05/26 08:57
このQ&Aを見た人はこんなQ&Aも見ています
-
スクロールバーをVBAで操作したい
Access(アクセス)
-
Accessフォームで画面をスクロールさせるには?
Access(アクセス)
-
AccessVBA サブフォームとスクロールについて
Access(アクセス)
-
-
4
access 改ページコントロール
Access(アクセス)
-
5
Access サブフォームでの選択行の取得
その他(データベース)
-
6
VBAでフォームのスクロールバーが下にいってしまう
Visual Basic(VBA)
-
7
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
8
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
9
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
10
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
11
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
12
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
13
ACCESSのBookmarkプロパティの使い方
その他(データベース)
-
14
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
15
アクセスで サブフォームの表示について
その他(データベース)
-
16
access vbaにてテンポラリーテーブルが作りたいです。
Access(アクセス)
-
17
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
18
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
19
現在アクティブなタブのページ名を取得したい
Access(アクセス)
-
20
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFフォームに本日の日付を自動...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
Googleフォーム・複数人の申し...
-
C# 別なフォームへ値を渡す (...
-
VBAでフォームのスクロールバー...
-
メッセージボックスの背景色
-
アクセスVBA フォームのス...
-
バイク王の買取り金額検索フォ...
-
VBAにてメッセージボックスを最...
-
VB.NET 親フォームから子フォー...
-
Accessでサブフォームの合計を...
-
子フォームから親フォームのオ...
-
フォームの左上のアイコンだけ...
-
accessで2つ以上のフォームを起...
-
WithEvents変数について
-
ACCESS 表形式フォームで1レ...
-
フォーム上の全てのコントロー...
-
フォームで複数のチェックボッ...
-
ExcelVBAでフォーム内でブック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
VBA リストボックスをダブルク...
-
Accessでフォームから別フォー...
-
Googleフォーム・複数人の申し...
-
PDFフォームに本日の日付を自動...
-
サブフォームの新規レコードに...
-
ユーザーフォーム上にアイコン...
-
リストボックスの選択解除
-
アクセスVBA フォームのス...
-
VBプログラムの終了
-
Access 無操作の場合、自動で閉...
-
メインフォームからサブフォー...
-
フォーム上の全てのコントロー...
-
ExcelVBAでフォーム内でブック...
-
ExcelVBAでユーザーフォーム内...
-
サブフォームのイベント取得
-
dbOpenTableとdbOpenDynaset
-
VB.net(VB)で、フォームにExcel...
-
C# 別なフォームへ値を渡す (...
-
メッセージボックスの背景色
おすすめ情報