月間スケジュールテーブルを新規生成するルーチンです
月初~月末まで各日にちの曜日を[曜日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(アクセス)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
Access2000 サブフォームのRecordSet取得法
Access(アクセス)
-
6
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
7
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
8
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
9
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
10
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
11
Accessの条件付き書式設定で、複数の条件が一致した時の書式を設定したい
その他(Microsoft Office)
-
12
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
13
ACCESSでコントロールソースの変更
Access(アクセス)
-
14
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
15
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
16
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
17
フィルタ後のフォームの件数の取得の仕方
Access(アクセス)
-
18
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
19
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
20
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS 複数のフォームから同一...
-
Accessで経過日付に応じて色を...
-
AccessのRefresh・Requery・Rep...
-
ACCESSフォーム入力後の確定
-
excel マクロ 特定の文字列を...
-
accessでオートナンバーを使わ...
-
ACCESSで帳票形式のレポ...
-
Accessフォームで詳細内の任意...
-
アクセスで複数レコードを1レ...
-
新しいレコードへの移動時にト...
-
アクセスVBA 初心者 レコ...
-
DoCmd.SearchForRecord が動か...
-
access2010 特定文字を含むレコ...
-
Access 指定したレコードへ移動
-
Access チェックボックス 空...
-
Access サブフォームでの選択行...
-
エクセルで、抽出したデータだ...
-
Accessでデータを更新したらそ...
-
AccessでIDを入力したら他の項...
-
ACCESS2007 マクロ クエリのパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 複数のフォームから同一...
-
ACCESSフォーム入力後の確定
-
AccessのRefresh・Requery・Rep...
-
Accessフォームで詳細内の任意...
-
access の 最終レコードの判定...
-
Accessでレコードの複製
-
accessでオートナンバーを使わ...
-
Accessのレコード数をテキスト...
-
Accessで経過日付に応じて色を...
-
MS.Access でサブフォーム付の...
-
DoCmd.SearchForRecord が動か...
-
Accessの「Form_AfterUpd...
-
access2010 特定文字を含むレコ...
-
アクセエスのレコードの更新をV...
-
新しいレコードへの移動時にト...
-
アクセスのコンボボックスの内...
-
アクセスのフォームで自動連番...
-
ファイルメーカーProでレコード...
-
アクションクエリ DoCmd.RunSQ...
-
アクセスで複数レコードを1レ...
おすすめ情報