
月間スケジュールテーブルを新規生成するルーチンです
月初~月末まで各日にちの曜日を[曜日TMP]に求めてこのルーチンに入ります
("マスタFORM"には週間計画のテーブルのフィールドを設定したフォームです。
(週間計画:月曜日の○○時~◎◎時に○○の作業)
Private Sub 分析RTN()
DoCmd.GoToRecord acForm, "マスタFORM", acFirst
Do While Not EOF(1) ‘ここでエラーが発生します
If 曜日No. = 曜日TMP Then
追加RTN ’レコードの追加ルーチンです
End If
DoCmd.GoToRecord acDataForm, "マスタFORM", acNext
Loop
End Sub
他にお気づきの点はご指導ください
No.3ベストアンサー
- 回答日時:
こんにちは。
これかな~
DoCmd.GoToRecord acForm, "マスタFORM", acFirst
'Do While Not EOF(1) 'ここでエラーが発生します
Do While マスタFORM.NewRecord = False
If 曜日No. = 曜日TMP Then
'追加RTN 'レコードの追加ルーチンです
End If
DoCmd.GoToRecord acDataForm, "マスタFORM", acNext
Loop
ご回答ありがとうございます。
DoCmd.GoToRecord acdataForm, "マスタFORM", acFirst
Do While Forms!マスタFORM.NewRecord = False
で、解決しました。
No.6
- 回答日時:
> これはACCESS2000の機能でしょうか、環境の追加が必要でしょうか
> 調べれば分かるでしょうが、今一度助言頂けないでしょうか
DAO(Data Access Objects)は、Access97以前の標準で使用されていたデータベースへアクセスするための手続き命令です
ADO(ActiveX Data Objects)は、Access2000より採用されたデータベースへアクセスするための手続き命令です
ADOは、DAOの後継として開発発表されました、ローカルをベースに考慮されていたDAOをネット上で使用することを前提に開発されたものがADOと言うのが私の認識です(OLEからActiveXへ以降したのと同じようなもの)
基本的にAccess2000以降では、DAO、ADOともに使用可能です
(DAOは、参照設定をする必要が別にあったと思いましたが・・・)
DAO から ADO への移植 - MSDN (Microsoft)
http://www.microsoft.com/japan/msdn/data/techmat …
の様に、命令の比較はあります
クエリ等で行えない複雑な処理などを行う際には使用することがありますが、基本的にはクエリ等の標準機能で行えるものは、全般的にDAO、ADOより高速に稼動するので、クエリ等を使用したほうが宜しいかと思います
私の場合はAccess97の名残でDAOを使用していることが多いですが、ネット上ではADOの方をよく見かけるかな?
No.5
- 回答日時:
> 月間スケジュールテーブルを新規生成するルーチンです
よく判らないのですが、フォームのレコードを移動させてデータを書込みしているのでしょうか?
If Me.CurrentRecord = Me.Recordset.RecordCount Then
MsgBox ("最後のレコード")
ElseIf Me.NewRecord Then
MsgBox ("新規のレコード")
End If
で、最後のレコードは見つかります
Recordset等のEOFは、Bookmarkを使用して同じレコードに移動する必要があったと思います
しかし、データを更新などを行うには、効率的には、お勧めできない方法です
・更新クエリ
・ADO、DAOの使用
を使ったほうが宜しいかと^^;
ご回答感謝します。
・ADO、DAOの使用は未体験です。
これはACCESS2000の機能でしょうか、環境の追加が必要でしょうか
調べれば分かるでしょうが、今一度助言頂けないでしょうか
No.4
- 回答日時:
>Do While Not EOF(1) ‘ここでエラーが発生します
エラーが出て当たり前。「1番」のファイル番号はオープンされていません。
以下、EOF関数の例、その1
Open "FILE01" For Input As #1
Open "FILE03" For Input As #2
Open "MYFILE" For Input As #4
If EOF(1) Then Exit Sub ' "FILE01"が終端
If EOF(4) Then Exit Sub ' "MYFILE"が終端
If EOF(2) Then Exit Sub ' "FILE03"が終端
Close #1
Close #2
Close #4
以下、EOF関数の例、その2
Dim InputData
Open "MYFILE" For Input As #1 ' ファイル番号「1番」をシーケンシャル入力モードで開きます。
Do While Not EOF(1) ' ファイル番号1番のファイルが終端かどうかを確認します。
Line Input #1, InputData ' ファイル番号1番からデータ行を読み込みます。
Debug.Print InputData ' イミディエイト ウィンドウに表示します。
Loop
Close #1 ' ファイル番号1番を閉じます。
テーブルに関連付けされたフォームを最初から最後まで移動するのはデータの抜け落ちが発生したりして危険だし、フォームを使用する意味がありません。
もし、フォームの方にフィルタや並べ替えが設定してあり、特定のデータが出て来ないようになっていたり、データが1件も出て来ないようになっていたら「データがあるのにデータが無いと思って処理される」ので、何が起きるか判りません。
それに、フォームのレコード移動は、移動のたびに画面が再描画され、処理が重くなり過ぎます。
もし当方がチームリーダーで、チーム内にそういう書き方をするメンバーが居たら、すぐに作り直しさせます。
テーブルを1レコードづつ順に処理するなら、以下のようにテーブルを直接操作し、フォームを用いてはいけません。
Dim dbs As Database, rst As Recordset
' カレントデータベースへの参照を取得します。
Set dbs = CurrentDb
' 週間計画テーブルのレコードセットを開きます。
Set rst = dbs.OpenRecordset("週間計画テーブル")
' ファイルの最後まで実行します。
Do Until rst.EOF
If rst.Fields("曜日No.").Value = 曜日TMP Then
追加RTN 'マスタFROMを参照しないように変更したルーチンであること
End If
' 次のレコードに移動します。
rst.MoveNext
Loop
rst.Close 'rstを開放
Set dbs = Nothing 'dbsを開放
以下蛇足。
>DoCmd.GoToRecord acForm, "マスタFORM", acFirst
>DoCmd.GoToRecord acDataForm, "マスタFORM", acNext
次レコード移動では正しく「acDataForm」を指定しているのに、先頭への移動では間違って「acForm」を指定しています。
詳細なご指導ありがとうございます。
皆様のおかげで、自分では納得のいくシステムが完成しました。
処理スピードですが 4名の週間データ(56件)を月のスケジュールデータへ展開しました所(253件)、30秒程度です。
変化するテキス項目を表示しないとすると7秒と大幅に短縮されました。
このシステムを使用する事業所は利用者が50名程度です。
所要時間とデータ量は単純には比例しないと思いますが
7秒×50名÷4名=88秒 2分程度で1ヶ月のスケジュールが出来れば合格ですよね
ご指導の詳細は今後学習してVERSION2に反映させて戴きます。
PCはVALUESTAR VH300/7Aです
No.2
- 回答日時:
EOFの書き方だけなら
EOF(1)→ Forms.マスタFORM.Recordset.EOF
でコンパイルは通りますが、エラーが発生するでしょうね。
条件を記述しないでエラーで抜ける方法もあります。
Do'----------------------------<<無限ループ>>
On Error GoTo Exit_do
If 曜日No. = 曜日TMP Then
追加RTN ’レコードの追加ルーチンです
End If
DoCmd.GoToRecord acDataForm, "マスタFORM", acNext
Loop'----------------------------
Exit_do:'エラーの場合はここへ来ます
No.1
- 回答日時:
Accessは最近触ってないのでうそかもしれませんが
>>Do While Not EOF(1)
このEOF(1)って何に対してのEOFです?
書かれているフォームの動作内容としたらおそらく
・マスタFORMをオープン
・マスタFORMの最初のレコードに移動
↓
・マスタFORMの次のレコードに移動
ってなかんじだと思います
これだと間接的にDBをいじっているだけなので
(人間が画面を開いて帳票入力している操作をわざわざPGでやっている気がする)
登録されているレコード数と現在のレコード位置を把握しないといけない
気がします。マスタFORM.CurrentRecordとかマスタFORM.MaxRecord系かな?
ご回答有難うございます。
EOF(!) ()内 ファイルを開いた時に設定したファイルNo.ですね
まったく意味を取り違えてました
皆様のおかげでシステムは完成しました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBA。複数のChangeイベントをまとめる方法 2 2022/03/31 12:03
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
このQ&Aを見た人はこんなQ&Aも見ています
-
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
-
4
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
5
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
6
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
7
Accessのテーブルを開いたときに最後のレコードを表示させたい
Access(アクセス)
-
8
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
9
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
10
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
11
レコードセットにnullの場合
Visual Basic(VBA)
-
12
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
13
現在アクティブなタブのページ名を取得したい
Access(アクセス)
-
14
accessで選択クエリで得た全レコードをテーブルに取り込む方法
その他(データベース)
-
15
access マクロでのフィルタの解除の方法
Access(アクセス)
-
16
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
新規レコード行を非表示にしたい
Access(アクセス)
-
19
アクセスのレポートのヘッダーを2ページ以降にもつけるには?
Access(アクセス)
-
20
テキストボックスにクエリ結果を表示させたい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでレコードの複製
-
アクセスで複数レコードを1レ...
-
Accessの「Form_AfterUpd...
-
ACCESS 複数のフォームから同一...
-
ACCESS 単票形式フォームの新...
-
MS.Access でサブフォーム付の...
-
ファイルメーカーProでレコード...
-
Accessで経過日付に応じて色を...
-
Accessフォームで詳細内の任意...
-
ACCESSで帳票形式のレポ...
-
MSAccess ロック状態かどうかを...
-
DoCmd.SearchForRecord が動か...
-
カレントレコードの取得について
-
エクセルで、抽出したデータだ...
-
Access サブフォームでの選択行...
-
Access 複数フォームを...
-
AccessのFormのみをスクリーン...
-
ACCESSでVBAから選択クエリの抽...
-
access クエリ yes/no型のクエ...
-
access サブフォームにリストを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数のフォームから同一...
-
AccessのRefresh・Requery・Rep...
-
Accessでレコードの複製
-
Accessで経過日付に応じて色を...
-
ACCESSフォーム入力後の確定
-
Accessフォームで詳細内の任意...
-
accessでオートナンバーを使わ...
-
アクセエスのレコードの更新をV...
-
access の 最終レコードの判定...
-
DoCmd.SearchForRecord が動か...
-
MSAccess ロック状態かどうかを...
-
Accessの「Form_AfterUpd...
-
アクセスで複数レコードを1レ...
-
アクセスのコンボボックスの内...
-
Access 指定したレコードへ移動
-
docmd.gotorecordを起動するには
-
Accessでの計算
-
アクセスのフォームビューの帳...
-
ファイルメーカーで重複してイ...
-
アクセスのフォームで自動連番...
おすすめ情報