- ベストアンサー
アクセスの表示方法についての質問
- アクセスのフォームで10件づつ表示する方法
- 帳票形式でデータが一部表示されない問題への対処法
- 「前へ」と「次へ」ボタンを利用して10件づつの表示を実現する方法
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
前回のコードはちょっと間違い。 下記でどうかな。 Const n = 10 '「次へ」 Private Sub コマンド13_Click() Dim p As Long On Error Resume Next DoCmd.GoToRecord , , acNext, n * 2 If Err = 2105 Then p = Me.CurrentRecord DoCmd.GoToRecord , , acLast DoCmd.GoToRecord , , acGoto, p + n Else DoCmd.GoToRecord , , acPrevious, n End If End Sub '「前へ」 Private Sub コマンド16_Click() DoCmd.GoToRecord , , acPrevious, n * 2 If Err = 2105 Then p = Me.CurrentRecord DoCmd.GoToRecord , , acFirst DoCmd.GoToRecord , , acGoto, p - n Else DoCmd.GoToRecord , , acNext, n End If End Sub
その他の回答 (3)
- 30246kiku
- ベストアンサー率73% (370/504)
質問者さん 私に騙されてみる気はありますか。 以下の方法は、私がいろいろやってみて、何か動きそう・・・ というレベルのもので、Microsoft の資料等裏付けが取れていないものになります。 確認用フォームは、添付図の様になります。 (フォームウィザードから表形式として作ったものになります) 「an」「日付」「Src」を連結した帳票で、 ボタン、前に「btnPrev」、次に「btnNext」がヘッダに配置されたものになります。 VBAで、以下を記述します。 Const CSCRLNUM As Long = 10 Private Sub Form_Load() Me.InsideHeight = Me.Section(acHeader).Height _ + Me.Section(acDetail).Height * CSCRLNUM _ + Me.Section(acFooter).Height End Sub Private Sub ScrollByMyself(iNum As Long) Dim i As Long, j As Long If (Me.Dirty Or Me.NewRecord) Then Exit Sub j = Abs(iNum) With Me.RecordsetClone .MoveLast .Bookmark = Me.Bookmark i = .AbsolutePosition + iNum If (i < 0) Then i = 0 ElseIf (i >= .RecordCount) Then i = ((.RecordCount - 1) \ j) * j ElseIf ((i Mod j) <> 0) Then i = (i \ j) * j End If .AbsolutePosition = i Me.an.SetFocus ' ★詳細にあるコントロール「an」にフォーカス移動 Me.Bookmark = .Bookmark i = (Me.CurrentSectionTop - Me.Section(acHeader).Height) _ + Me.Section(acDetail).Height i = i \ Me.Section(acDetail).Height If (i > 0) Then DoCmd.GoToPage 1, , Me.Section(acDetail).Height * i End If End With End Sub Private Sub btnPrev_Click() ' 前へ Call ScrollByMyself(-CSCRLNUM) End Sub Private Sub btnNext_Click() ' 次へ Call ScrollByMyself(CSCRLNUM) End Sub ※ ★ の、詳細にあるコントロールにフォーカスを移動しないと、まともに動きません。 上記では「an」にしましたが、「日付」でも「Src」でも・・・・ フォーカスが詳細にあることが重要です。 上記の細かい説明は、ここではしません。 ※ 本質問とは別の用途ですが、ブログに記事として載せてます。 アドレスは書けない、導くキーワードの提示も規約で禁止されているので書けません。 興味あったら探してみてください。 なお、上記を確認してみる・・・・使ってみようかな・・・・ すべて自己責任にてお願いします。
- hatena1989
- ベストアンサー率87% (378/433)
たびたび、済みません。「前へ」のコードに不足がありましたので、訂正します。 Const n As long = 5 Private Sub コマンド13_Click() Dim p As Long On Error Resume Next DoCmd.GoToRecord , , acNext, n * 2 If Err = 2105 Then p = Me.CurrentRecord DoCmd.GoToRecord , , acLast DoCmd.GoToRecord , , acGoTo, p + n Else DoCmd.GoToRecord , , acPrevious, n End If End Sub Private Sub コマンド16_Click() Dim p As Long On Error Resume Next DoCmd.GoToRecord , , acPrevious, n * 2 If Err = 2105 Then p = Me.CurrentRecord DoCmd.GoToRecord , , acFirst DoCmd.GoToRecord , , acGoTo, p - n Else DoCmd.GoToRecord , , acNext, n End If End Sub
- hatena1989
- ベストアンサー率87% (378/433)
コードを見る限りは問題点は見当たらないですが、「一部のデータが表示されない」とは具体的にどのようになるのか詳細に説明してもらえますか。 蛇足ですが、かなり遠回りしているコードですね。 下記のようにシンプルに記述することもできます。 '「次へ」 Private Sub コマンド13_Click() On Error Resume Next DoCmd.GoToRecord , , acNext, 10 If Err = 2105 Then DoCmd.GoToRecord , , acLast End Sub '「前へ」 Private Sub コマンド16_Click() On Error Resume Next DoCmd.GoToRecord , , acPrevious, 10 If Err = 2105 Then DoCmd.GoToRecord , , acFirst End Sub
補足
「一部のデータが表示されない」について再度見てみると最後の部分が表示されません。 例えば38件データが有った場合10件の表示を3回行い、8件を最後に表示すれば良いのですが 最後は一番最後のレコードのみ表示されます。 以上、宜しくお願い致します。 また、教えて頂いたソースで試してみます。 ありがとうございました。
お礼
早速のご回答ありがとうございます。実施してみて何かありましたら改めてご質問させて頂きます。
補足
ご回答有難うございます。 DoCmd.GoToRecord , , acPrevious, n * 2 If Err = 2105 Then p = Me.CurrentRecord DoCmd.GoToRecord , , acFirst DoCmd.GoToRecord , , acGoto, p - n Else DoCmd.GoToRecord , , acNext, n End If End Sub の方で実行時エラー2105が発生しました。何がいけないのでしょうか?