
初めて書き込みさせて頂きます。
アクセスのテーブルを帳票形式にて作成して10件づつ表示をさせようとすると一部のデータが表示されません。
方法としては、帳票形式で10件のみ表示出来る様にサイズを調整して「前へ」と「次へ」のボタンをつけて10件づつ表示させています。
ソースは下記の方法で
「次へ」
Private Sub コマンド13_Click()
Dim rs As DAO.Recordset, i As Integer
Const n As Integer = 10
Set rs = Me.RecordsetClone
For i = 1 To n * 2
If rs.EOF Then
rs.MoveLast
Me.Bookmark = rs.Bookmark
Exit Sub
End If
rs.MoveNext
Next
Me.Bookmark = rs.Bookmark
For i = 1 To n
rs.MovePrevious
Next
Me.Bookmark = rs.Bookmark
rs.Close
End Sub
「前へ」
Private Sub コマンド16_Click()
Dim rs As DAO.Recordset, i As Integer
Const n As Integer = 10
Set rs = Me.RecordsetClone
For i = 1 To n * 2
If rs.BOF Then
rs.MoveFirst
Me.Bookmark = rs.Bookmark
Exit Sub
End If
rs.MovePrevious
Next
Me.Bookmark = rs.Bookmark
For i = 1 To n
rs.MoveNext
Next
Me.Bookmark = rs.Bookmark
rs.Close
End Sub
以上、ご教授の程宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
前回のコードはちょっと間違い。
下記でどうかな。
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
この回答への補足
ご回答有難うございます。
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が発生しました。何がいけないのでしょうか?
No.4
- 回答日時:
質問者さん
私に騙されてみる気はありますか。
以下の方法は、私がいろいろやってみて、何か動きそう・・・
というレベルのもので、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」でも・・・・
フォーカスが詳細にあることが重要です。
上記の細かい説明は、ここではしません。
※ 本質問とは別の用途ですが、ブログに記事として載せてます。
アドレスは書けない、導くキーワードの提示も規約で禁止されているので書けません。
興味あったら探してみてください。
なお、上記を確認してみる・・・・使ってみようかな・・・・
すべて自己責任にてお願いします。

No.3
- 回答日時:
たびたび、済みません。
「前へ」のコードに不足がありましたので、訂正します。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
No.1
- 回答日時:
コードを見る限りは問題点は見当たらないですが、「一部のデータが表示されない」とは具体的にどのようになるのか詳細に説明してもらえますか。
蛇足ですが、かなり遠回りしているコードですね。
下記のようにシンプルに記述することもできます。
'「次へ」
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件を最後に表示すれば良いのですが
最後は一番最後のレコードのみ表示されます。
以上、宜しくお願い致します。
また、教えて頂いたソースで試してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
accsessで顧客コードで氏名を呼...
-
CSVファイルでテキストの改行の...
-
Accessを開きなおすとテキスト...
-
テキストボックスにコントロー...
-
sqlite(spatialite_gui)での...
-
汎用カード型のデータベースソ...
-
20万行あるデータを動かしたい
-
どうすれば 拡張子 を写真のよ...
-
DocuWorksでの印刷
-
はじめてのAccess 2019 について
-
.flex-direction プロパティは...
-
ファイルメーカーへネットワー...
-
警察はスマホに保存した動画や...
-
manana というやつで、間違って...
-
帳票フォームでのあるコンボボ...
-
エクセルのフィルタ抽出が固まる
-
構文エラー:演算子がありませ...
-
FileMaker Proに近い無料のWeb...
-
ACCESSのSQLで、NULLかNULLでな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
ファイルに記述されている複数...
-
CSVファイルをBULK INSERTでSQL...
-
Query OK, 0 rows affected
-
psql でのエラー出力について
-
Oracle / UNIX ファイルコマン...
-
shellからpostgresqlへの変数の...
-
ACCESS VBA;コマンドボックス...
-
tar.gzファイルのリストアについて
-
PostgreSQL リストアエラー
-
SQL: insert/importコマンドの違い
-
コマンドと関数の違い
-
date型に空白を入れるとエラー...
-
DB2の共有ロックについて。
-
teraterm上でsqlplusにログイン...
-
AS400でのライブラリ配下の全て...
-
OSQLの起動について
-
AWSのcloud9で「 ls -l ~/.ssh/...
-
DB2のbindコマンドの"+o""-o"オ...
おすすめ情報