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 サブフォームでの選択行の取得
その他(データベース)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
-
4
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
5
access 改ページコントロール
Access(アクセス)
-
6
VBAでフォームのスクロールバーが下にいってしまう
Visual Basic(VBA)
-
7
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
8
AccessVBA サブフォームとスクロールについて
Access(アクセス)
-
9
新規レコード行を非表示にしたい
Access(アクセス)
-
10
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
11
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
12
どこにもフォーカスを当てたくない
Access(アクセス)
-
13
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
14
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
15
Access でレコードセレクタが押されたときのイベントは?
その他(プログラミング・Web制作)
-
16
サブフォームに新規レコードを追加する際、一番下に表示するのではなく一番上に表示したい
Visual Basic(VBA)
-
17
フォームウィンドウを最前面に表示したい(ACCESS)
Microsoft ASP
-
18
Accessフォームで画面をスクロールさせるには?
Access(アクセス)
-
19
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
20
サブフォームが見えなくなる。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォーム上にアイコン...
-
サブフォームの行ごとにコンボ...
-
VB.net(VB)で、フォームにExcel...
-
Google form を利用して 問い合...
-
子フォームから親フォームのオ...
-
ASP.NETとC#でWebフォームを呼...
-
Accessでフォームから別フォー...
-
Googleフォーム・複数人の申し...
-
ディスプレイ解像度より大きな...
-
ToolStripStatusLabelを固定し...
-
VBAにてメッセージボックスを最...
-
メッセージボックスの背景色
-
[C#]別フォームとの連動について
-
フォーム上の全てのコントロー...
-
デロンギのオーブンが故障して...
-
ACCESS 表形式フォームで1レ...
-
PDFフォームに本日の日付を自動...
-
access開いているフォームのモ...
-
ExcelVBAでフォーム内でブック...
-
Accessでの顧客管理フォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
メッセージボックスの背景色
-
PDFフォームに本日の日付を自動...
-
accessで2つ以上のフォームを起...
-
VB.net(VB)で、フォームにExcel...
-
筋トレ初心者です。 ジムでひた...
-
Access 無操作の場合、自動で閉...
-
サブフォームのイベント取得
-
サブフォームの行ごとにコンボ...
-
VBプログラムの終了
-
ユーザーフォーム上にアイコン...
-
アクセスVBA フォームのス...
-
ディスプレイ解像度より大きな...
-
PDFフォーム内で日付計算したい...
-
フォーム上の全てのコントロー...
-
VBAでフォームのスクロールバー...
おすすめ情報