ちょっと変わったマニアな作品が集結

初めて書き込みさせて頂きます。

アクセスのテーブルを帳票形式にて作成して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

以上、ご教授の程宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (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

この回答への補足

ご回答有難うございます。

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が発生しました。何がいけないのでしょうか?

補足日時:2012/10/20 08:26
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。実施してみて何かありましたら改めてご質問させて頂きます。

お礼日時:2012/10/19 20:22

質問者さん



私に騙されてみる気はありますか。

以下の方法は、私がいろいろやってみて、何か動きそう・・・
というレベルのもので、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」でも・・・・
フォーカスが詳細にあることが重要です。

上記の細かい説明は、ここではしません。

※ 本質問とは別の用途ですが、ブログに記事として載せてます。
アドレスは書けない、導くキーワードの提示も規約で禁止されているので書けません。
興味あったら探してみてください。



なお、上記を確認してみる・・・・使ってみようかな・・・・
すべて自己責任にてお願いします。
「アクセスのフォームで10件づつ表示する。」の回答画像4
    • good
    • 0

たびたび、済みません。

「前へ」のコードに不足がありましたので、訂正します。

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
    • good
    • 0

コードを見る限りは問題点は見当たらないですが、「一部のデータが表示されない」とは具体的にどのようになるのか詳細に説明してもらえますか。



蛇足ですが、かなり遠回りしているコードですね。
下記のようにシンプルに記述することもできます。

'「次へ」
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件を最後に表示すれば良いのですが
最後は一番最後のレコードのみ表示されます。

以上、宜しくお願い致します。

また、教えて頂いたソースで試してみます。

ありがとうございました。

補足日時:2012/10/19 20:21
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qaccess vba 『○○件づつ表示』を行いたい。

フォームにデータ一覧を決まった数ずつ表示させ、『次の10件』『前の10件』ボタンで、表示を切り替えたいのですが、構文をどう繋げてよいか理解できません。
今やっている事は、データにOutoNoを振り、まずフォームオープン時、SQL文ではじめの10件を抽出しています。その時、表示中データのOutoNoが一番小さいものにフラグを立てて変数にし、それを元に次の(又は『前の』)10件を抽出、と考えているのでが、、。
NEXT~FOR文を使うのかなと思うのですが、それをどう絡ませていけばよいのか分かりません。
データの最後が10で割った数にならないので、それもどうやって処理するか。
どうかご教授願います。

Aベストアンサー

ソース見ました。

・毎回[Q_有給]を作りなおす
という構造ですね?

・Q_有給は固定
・Q_有給からデータを10件ずつ抽出する
という流れにした方が、良いと思います。


以下のSQL文で、クエリを作成してください。
※注意!!≪全角スペースを利用しておりますので、半角に置換してください≫

クエリ[Q_有給]
------------------------------------------------------------
SELECT
   M_社員.ナンバー
   ,T_日数.コード
   ,M_社員.氏名
   ,M_社員.入社日
   ,T_日数.有給付与日
   ,T_日数.有給日数
FROM
   M_社員
   INNER JOIN
   T_日数
   ON M_社員.コード = T_日数.コード
WHERE
   IIF((M_社員.退社日) > Date(),Null,(M_社員.退社日)) IS NULL
------------------------------------------------------------


[M_社員].[ナンバー]
がオートナンバーフィールドですよね。

オートナンバーのフィールドが
・1-10
・11-20
・21-30
と、連続しているとは限りません。
[M_社員].[退社日]の状態により、不連続なデータになります。
入力キャンセルを行った場合だけでも、不連続データが発生します。


回避するためには、表示エリアデータの起点を見つけ、その前方/後方の表示対象データのキーを取得する必要があります。


フォームの中に、以下のソースを埋め込んでください。

VBAソース
------------------------------------------------------------
Option Compare Database
Option Explicit

'定数
Private Const DEF_SQL_MAIN As String = "SELECT * FROM Q_有給" & vbCrLf   'メインのSQL文
Private Const DEF_AUTO_NO  As String = "[ナンバー]"            'クエリのメインキー
Private Const DEF_SQL_ORDER As String = "ORDER BY " & DEF_AUTO_NO & vbCrLf 'SQLのOrderBy句
Private Const DEF_MOVE_VECT As Integer = 10                 '表示量

'列挙:移動種別
Private Enum ENM_MOVE
  MV_開始
  MV_戻る
  MV_進む
End Enum

'構造体:表示領域
Private Type typ表示領域
  lng開始 As Long
  lng終了 As Long
End Type

'表示領域記憶変数
Private m表示状態 As typ表示領域

  
'イベント/ボタン/進む
Private Sub cmd進む_Click()
  Call Sub画面リフレッシュ(MV_進む)
End Sub

'イベント/ボタン/戻る
Private Sub cmd戻る_Click()
  Call Sub画面リフレッシュ(MV_戻る)
End Sub

'イベント/フォーム/開く時
Private Sub Form_Open(Cancel As Integer)
  Call Sub画面リフレッシュ(MV_開始)
End Sub

'画面のレコードソースとボタン状態の切替を行う
Private Sub Sub画面リフレッシュ( _
         ByVal p_移動方向 As ENM_MOVE _
        , Optional ByVal p_lng移動量 As Integer = DEF_MOVE_VECT _
        )
        
  'データ操作用
  Dim strSQL As String
  Dim daoDB  As DAO.Database
  Dim daoRec As DAO.Recordset
  
  'オートナンバー対策
  Dim lng基準     As Long
  Dim lng開始番号   As Long
  Dim lng終了番号   As Long
  
  'ボタン制御用フラグ
  Dim bln戻る     As Boolean
  Dim bln進む     As Boolean
  
  '基本的にボタンは使用不可とする
  bln戻る = False
  bln進む = False
  
  '基準点を得る
  Select Case p_移動方向
  Case MV_開始
    lng基準 = 0
  Case MV_戻る
    lng基準 = m表示状態.lng開始
  Case MV_進む
    lng基準 = m表示状態.lng終了
  End Select
  
  '基準点をベースにSQLを発行
  strSQL = ""
  strSQL = strSQL & DEF_SQL_MAIN
  strSQL = strSQL & "WHERE " & DEF_AUTO_NO & IIf((p_移動方向 = MV_戻る), "<=", ">=") & lng基準 & vbCrLf
  strSQL = strSQL & DEF_SQL_ORDER
  Set daoRec = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

  '取得できない
  If daoRec.EOF Then
    lng開始番号 = 0
    lng終了番号 = 0
    
    '終了処理へ
    GoTo PGMEND
  End If


  '取得できた
  Select Case p_移動方向
  Case MV_開始, MV_進む
    '先頭
    daoRec.MoveFirst
  
    If (p_移動方向 = MV_開始) Then
      '開始ポイントの記憶
      lng開始番号 = daoRec(DEF_AUTO_NO)
    Else
      '戻るボタン使用可能
      bln戻る = True
      
      '一個移動
      daoRec.MoveNext

      '移動し過ぎの回避
      If daoRec.EOF Then
        daoRec.MovePrevious
      End If

      '開始ポイントの記憶
      lng開始番号 = daoRec(DEF_AUTO_NO)
    End If

    '移動:表示エリア + 1
    daoRec.Move p_lng移動量
    'データの存在チェックを行い、進むボタンの使用可能状態を決める
    bln進む = Not daoRec.EOF

    '移動:表示エリアの最後
    daoRec.MovePrevious

    '終了ポイントの記憶
    lng終了番号 = daoRec(DEF_AUTO_NO)
  Case MV_戻る
    '最後
    daoRec.MoveLast
  
    '進むボタン使用可能
    bln進む = True
  
    '一個移動
    daoRec.MovePrevious

    '移動し過ぎの回避
    If daoRec.BOF Then
      daoRec.MoveNext
    End If

    '終了ポイントの記憶
    lng終了番号 = daoRec(DEF_AUTO_NO)

    '移動:表示エリア - 1
    daoRec.Move -p_lng移動量
    'データの存在チェックを行い、戻るボタンの使用可能状態を決める
    bln戻る = Not daoRec.BOF

    '移動:表示エリアの先頭
    daoRec.MoveNext

    '開始ポイントの記憶
    lng開始番号 = daoRec(DEF_AUTO_NO)
  End Select
  
'終了処理
PGMEND:
  'データセット開放
  daoRec.Close
  Set daoRec = Nothing
  
  '表示領域エリアを記憶
  m表示状態.lng開始 = lng開始番号
  m表示状態.lng終了 = lng終了番号

  '画面の入力フィールドにフォーカスを当てる
  Me.コード.SetFocus
  'ボタン状態の制御
  Me.cmd戻る.Enabled = bln戻る
  Me.cmd進む.Enabled = bln進む

  'SQLを作成
  strSQL = ""
  strSQL = strSQL & DEF_SQL_MAIN
  strSQL = strSQL & "WHERE " & DEF_AUTO_NO & " BETWEEN " & lng開始番号 & " AND " & lng終了番号 & vbCrLf
  strSQL = strSQL & DEF_SQL_ORDER

  'SQLを設定
  Me.RecordSource = strSQL
End Sub

ソース見ました。

・毎回[Q_有給]を作りなおす
という構造ですね?

・Q_有給は固定
・Q_有給からデータを10件ずつ抽出する
という流れにした方が、良いと思います。


以下のSQL文で、クエリを作成してください。
※注意!!≪全角スペースを利用しておりますので、半角に置換してください≫

クエリ[Q_有給]
------------------------------------------------------------
SELECT
   M_社員.ナンバー
   ,T_日数.コード
   ,M_社員.氏名
   ,M_社員.入社日
   ,T_日数.有給付与日
...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QVBとアクセスでSQL文に変数を使いたいのですが

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"

Q新規レコード行を非表示にしたい

帳票形式で入力フォームを作成しています。

登録No(○○~△△)を入れると、入力レコード数(○○~△△)が制限されるようにしました。でも、フォーム上には新規レコード行が表示されていて邪魔なんです。新規レコードインジケータ(*表示)という奴です。

ユーザーが入力する際、紛らわしいので、新規レコード行ごと消したいのですが、そんなことできるのでしょうか? お知恵をお貸し下さい!

ちなみに、環境はAccess2002で、クエリをレコードソースにしてフォームを作成しています。

Aベストアンサー

フォームのプロパティの「追加の許可」を「いいえ」にしてみてください。

フォームのプロパティは、フォームの左上角の四角の部分をクリックして
表示できると思います。
(Access97の環境での確認なので異なるかもしれませんが)

QACCESSのBookmarkプロパティの使い方

Stressmanと言います。
環境は、Windows98SEでACCESS2002を使っています。

質問というのは、ACCESSのBookmarkプロパティの意味、使い方
を教えていただきたいのです。

ヘルプを読んだのですが、よく分かりません…
ちなみに、ヘルプには
「フォームの基になるテーブル、クエリ、またはSQLステートメント
に含まれる測定のレコードを個別に識別するためのブックマークを設定
します。値の取得および設定が可能です。バリアント型の値を使用します。」

と書いてあります。

具体的に、「こういう意味」「こういう使い方をする」というのを
教えて頂きたいのです。

#サブフォームのレコード移動について調べていたら、「Bookmark」が
#よくでてきたので、「これを理解しないと先に進めない」と判断して
#投稿させていただきました。
#これぐらい知っておけよ、とつっこまないでください…

Aベストアンサー

>2 、001    、4/5  、田中
>へ移動することも可能なのでしょうか?

その通りです。

この場合は 次のようになります。

Dim Rs As DAO.Recordset

' フォームのレコードを Rs にセット
Set Rs = Me.サブフォームB.form.RecordsetClone
' Rs で No が 2を検索
Rs.FindFirst "[No]=2"
' Rs で Noが2の場所を サブフォームB に反映
Me.サブフォームB.form.Bookmark = Rs.Bookmark

QACCESSのフォームで次のレコードに移動しない方法を教えてください

Windows2000&ACCESS2000の環境です。
テーブルから連結したフォームに、例えばA,B,C,Dと4つのテキストボックスがあります。
A,B,C,Dと入力していくと、最後のDの入力を入力した後「Enter」キーを押すと次のレコードのA,B,C,Dが表示されます。(次のレコードの入力になってしまいます)
タブオーダー最後のDの入力のあとの「Enter」キーを押しても現在のレコードのAに戻る設定(やり方)を教えていただけると幸いです。

Aベストアンサー

フォームのプロパティで
 Tabキー移動:カレントレコード
にしてください。
既定値は「すべてのレコード」になっています。

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Qaccessの自動更新処理をできないようにするにはどうすれば良いですか?

accesで顧客データベースを作成しています。
「顧客リスト」テーブルを作り、そのテーブルを閲覧しやすいように「顧客リスト」フォームを作成しました。
また、フォーム上でデータの修正をした際、その修正内容を保存する為のコマンドボタンを取り付けました。
しかし、現在の状態では、そのコマンドボタンを押さなくても×印をクリックして閉じると自動的にデータの更新内容がテーブルに反映されてしまいます。
データを修正した際、保存用のコマンドボタンを押した場合にのみ、その修正内容がテーブルに反映されるようにするのにはどうしたら良いのでしょうか??
説明足らずかもしれませんが、ご存知の方教えてください。
ご回答宜しくお願い致します。

Aベストアンサー

Access2000迄しかさわってないので、ヴァージョンによっては違ってくるかもしれませんが・・・

フォームでレコードソース・コントロールソースを指定している場合は、テーブルが直接編集可能です。なので、リンクしなければいいだけなのですが、その場合は、レコードの移動時に自力でフォームへ値を設定する必要があったり、テーブルとフォームに設定されている入力規則が同期が取れていない場合は、テーブルへ追加時にエラーが出たり(逆に2重にチェックが掛かったり)します。
また、非リンク時は入力途中でフォームやアクセス事態を閉じてしまった場合に、履歴が残っておらず、再度入力しなければならない状態になったりしますので、ダミーテーブルに入力し、コマンドボタンクリックで入力内容を反映さすような作りが無難かと思います。
この場合ですと、入力済みのデータ編集は、別フォームが必要になりますが^^;

1.「顧客リスト」テーブルを「顧客入力」テーブルという名前でコピーする。
2.「顧客入力」テーブルへ追加済みというフィールドを作成
3.「顧客リスト」フォームのレコードソースを「顧客リスト」テーブルから「顧客入力」テーブルへ変更
4.「顧客入力」テーブルから「顧客リスト」テーブルへデータを反映させる為のコマンドボタンを作成し、追加クエリ(入力からリストへ)・更新クエリ(追加済みフィールドを更新)を実行するように記述。入力履歴が必要ない場合は、削除クエリでも可(この場合は2.は必要なし)

他には、フォーム上で編集しても他のレコードに移動したり、閉じたりしない間はテーブルに移動されていませんので、レコード移動時や閉じる時のイベントで、編集をキャンセルする処理を書いてもいいかも・・・

Access2000迄しかさわってないので、ヴァージョンによっては違ってくるかもしれませんが・・・

フォームでレコードソース・コントロールソースを指定している場合は、テーブルが直接編集可能です。なので、リンクしなければいいだけなのですが、その場合は、レコードの移動時に自力でフォームへ値を設定する必要があったり、テーブルとフォームに設定されている入力規則が同期が取れていない場合は、テーブルへ追加時にエラーが出たり(逆に2重にチェックが掛かったり)します。
また、非リンク時は入力途中で...続きを読む

QAccessのレポート機能でソート&抽出条件を指定したい

accessでレポート機能について、質問です。
エクセルでいうフィルタ機能みたいなものはあるのでしょうか。

例えば、以下の場合、職位="B"だけレポートで表示したい場合、
どうすればよいのでしょう?
CD 職位 所属
01  A  東京
02  B  東京 → このデータだけを表示
03  A  大阪

1)クエリを作って、レポートで表示するしかないのでしょうか?
2)レポートのデザインで条件指定ができるのでしょうか?

ソートの条件も変えたいのですが、どの項目をソートするかは、
どこで指定できるのでしょうか?

要はレポートの形式は1つで、様々な抽出条件とソート条件で
レポート表示したいのです。

Aベストアンサー

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示したいのです。
1つレポートの雛形を作って、フィルタと並べ替えのプロパティと並べ替え/グループ化の設定を変えて保存し、複数のレポートを用意する。
入力した値によって変えたい場合は、フォーム上のテキストボックスの値や特定テーブルのレコードの値にを参照するクエリを作り、レポートのレコードソースにする。
またはVBAで処理する。

p.s.
レポートの表示をボタンで起動する場合、VBAやマクロを呼び出します。
VBAやマクロでレポートを開く時に、フィルタやWhere条件式を設定できます。

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示した...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング