初めて書き込みさせて頂きます。
アクセスのテーブルを帳票形式にて作成して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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/07 08:37
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows版 pg_dumpの結果をログ...
-
AWSのcloud9で「 ls -l ~/.ssh/...
-
CSVファイルをBULK INSERTでSQL...
-
アクセスのフォームで10件づつ...
-
PostgresSQLのテーブルを他のサ...
-
Oracle / UNIX ファイルコマン...
-
oracle spool SJIS → UTF-8
-
SQLサーバのジョブにてVisualBa...
-
SQL+Plusの訂正
-
ACCESS VBA;コマンドボックス...
-
psql でのエラー出力について
-
ディスク上のサイズの乖離が大...
-
ヤフーショッピングでPayPay支...
-
エクセルVBAでcommit,rollback
-
PostgresQLでサーバーを新規追...
-
アクセスで、OLEサーバーも...
-
トランザクションの開始
-
SQLのデータベースに韓国語を登...
-
階層型データベースとVSAM...
-
テーブル単位のリストア
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
tar.gzファイルのリストアについて
-
shellからpostgresqlへの変数の...
-
Query OK, 0 rows affected
-
CSVファイルをBULK INSERTでSQL...
-
ファイルに記述されている複数...
-
psql でのエラー出力について
-
OSQLの起動について
-
Oracle / UNIX ファイルコマン...
-
AWSのcloud9で「 ls -l ~/.ssh/...
-
date型に空白を入れるとエラー...
-
ACCESS VBA;コマンドボックス...
-
teraterm上でsqlplusにログイン...
-
PostgreSQL リストアエラー
-
アクセスのフォームで10件づつ...
-
psql ser -U postgresって何で...
-
SQL+Plusの訂正
-
Oracle初心者です。 shutdownコ...
-
Insert文 で 変数を使いたい
おすすめ情報