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(アクセス)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
-
4
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
5
access 改ページコントロール
Access(アクセス)
-
6
AccessVBA サブフォームとスクロールについて
Access(アクセス)
-
7
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
8
VBAでフォームのスクロールバーが下にいってしまう
Visual Basic(VBA)
-
9
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
10
新規レコード行を非表示にしたい
Access(アクセス)
-
11
Accessフォームで画面をスクロールさせるには?
Access(アクセス)
-
12
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
13
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
Access でレコードセレクタが押されたときのイベントは?
その他(プログラミング・Web制作)
-
16
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
17
サブフォームに新規レコードを追加する際、一番下に表示するのではなく一番上に表示したい
Visual Basic(VBA)
-
18
Accessのフォーム画面について
その他(データベース)
-
19
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
20
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでフォームのスクロールバー...
-
VBAにてメッセージボックスを最...
-
アクセスVBA フォームのス...
-
リストボックスをクリックする...
-
ディスプレイ解像度より大きな...
-
VB.net(VB)で、フォームにExcel...
-
Googleフォーム・複数人の申し...
-
accessで2つ以上のフォームを起...
-
アクセス・別フォームの新規レ...
-
Accessでフォームから別フォー...
-
サブフォームの行ごとにコンボ...
-
メッセージボックスの背景色
-
PDFフォームに本日の日付を自動...
-
子フォームから親フォームのオ...
-
csvに保存しているデータをURL...
-
AccessVBAで入力有無のチェック
-
毎日新聞「女の気持ち」匿名希...
-
ASP.NETとC#でWebフォームを呼...
-
Access:ストアドプロシージャ...
-
Accessでサブフォームの合計を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
VB.net(VB)で、フォームにExcel...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
accessで2つ以上のフォームを起...
-
サブフォームの行ごとにコンボ...
-
フォーム上の全てのコントロー...
-
アクセスVBA フォームのス...
-
VBA リストボックスをダブルク...
-
サブフォームのイベント取得
-
メッセージボックスの背景色
-
PDFフォームに本日の日付を自動...
-
VBAでフォームのスクロールバー...
-
Access 無操作の場合、自動で閉...
-
アクセス フォームが存在する...
-
VBプログラムの終了
-
メインフォームからサブフォー...
-
ユーザーフォーム上にアイコン...
おすすめ情報