>>934 なにかキーになるフィールドがないとダメダメだろうよ。
どういう出方するか保証されないぞ。
数回5ページを指定して、つど違う内容でいいのか?
937 :
933 :2009/08/31(月) 22:54:15
>>932 の要求内容をおそらく満たさないが、印刷プレビューの状態から
表示されているページのみの印刷ならできそうだな。
俺的には、見込みと限界が掴めたからもういいや。
938 :
932 :2009/09/01(火) 08:49:24
みなさん、ありがとうございます。
>>936 連番がふられていないというのはユニークなIDはあるけど1,2,3,4...のように連続していないという意味でした。
わからない書き方をしてごめんなさい。
>>937 プレビューからDoCmd.PrintOutでページ指定ができると思います。
Dim pgMax As Integer
Dim pgPrt As Integer
Dim rpt As Report
Set rpt = Reports!TestRpt
pgMax = rpt.Pages
pgPrt = 1
Do Until pgPrt > pgMax
MsgBox pgPrt & "目を印刷します"
DoCmd.PrintOut acPages, pgPrt, pgPrt
pgPrt = pgPrt + 1
Loop
今Accessが手元にないので試せないのですが
こんな感じでやってみようと思います。
939 :
名無しさん@そうだ選挙にいこう :2009/09/03(木) 23:16:10
会社内で受注管理システムを構築しています。 社内LAN内にデータファイルを置こうと思うのですが LAN接続の外付けHDDとサーバーPCのどちらに置いた方が アクセス速度は上がりますか? 操作用のファイルはLAN内の個々のPCにあります。 データのアクセス頻度は五分に一度くらいですが同時に3人が アクセスしたりします。
>>939 >LAN接続の外付けHDD
NASとは違うの? 回線速度が速くて、アクセスする人が少ないほうが早いだろう。
941 :
名無しさん@そうだ選挙にいこう :2009/09/05(土) 18:54:04
XP access2002で サブフォームを61個作ったら そのフォームを開くときに 「これ以上テーブルまたはクエリーを開くことはできません」 ってポップアップが5回出て来ました。 OKを5回押すと消えて正常にフォームが表示されるのですが、 警告が出ない様にする方法はないでしょうか?
942 :
名無しさん@そうだ選挙にいこう :2009/09/05(土) 19:17:15
あるよ
944 :
名無しさん@そうだ選挙にいこう :2009/09/06(日) 11:36:07
VBA上のエラーではなく、フォーム上のエラーメッセージなので On Error Go To では意味内はず Docmd.Setwarning False で警告を無効化できるはず ただし、その後Access起動中のその後の全ての警告が無効化されてしまうので フォームクローズイベントかなんかで Docmd.Setwarning True を設定してやらないとね
945 :
名無しさん@そうだ選挙にいこう :2009/09/06(日) 12:57:40
ただ警告メッセージは抑えられたとしても、はたしてそれで正しい動作が保障されるか どうかは、はなはだ疑問ですね
>>944 SetWarningで切り替えれるのは
システムメッセージ(アクションクエリ・オブジェクト削除・レコード変更)じゃなかったっけ?
947 :
名無しさん@そうだ選挙にいこう :2009/09/06(日) 14:31:40
そうだっけか? 少なくともデータベースウィンドウで手動で削除しようとした時にメッセージ無効扱いだと 確認なしに無条件で削除されてしまってたけどな
サブフォーム61個設置して確かめようとする気にもならんのである
>945 に禿同 火災報知機がうるさいから切ればおk みたいな流れに聞こえるが、それでいいのか? サブフォーム61個は設計ミスの腐臭がする
サブフォームが61個か。想像すらできん。 タブ使っているのかなぁ。レコードソース入れ替えるだけで実現できたりして。
951 :
名無しさん@そうだ選挙にいこう :2009/09/06(日) 23:08:44
一体どういった用途に使ってるんだかそっちの方が気になる そもそもそんなにあったら、よっぽどの大画面モニターでないと1画面に入りきらないだろうに グルーピングするなりしないで、返って見づらくないか?
1画面の総コントロール数が50個ぐらいになると 情報量として「多すぎるかな」と思っていた俺の存在は……
953 :
名無しさん@そうだ選挙にいこう :2009/09/07(月) 08:50:41
具体的に聞きたいな。
【 システム環境 . 】 Windows XP SP3 → Windows Vista SP, Access 2007 【 VBAが使えるか .】 はい 【 VBAでの回答 】 可 【 検索キーワード 】 3265 要求された名前、または序数に対応する項目がコレクションで見つかりません。 質問です。 最近、XPからVistaに乗り換えたのですが、その際、XPで何ら問題なく動いていた AccessのVBAが、Vistaでは頻繁に止まり、デバッグモードになってしまう 問題が起きて困っています。 出てくるエラーメッセージは上記にあるとおりです。 また、このメッセージを無視してそのまま再開すると何ら問題なく動き、 また、数分後から数十分後に同じエラーメッセージで止まります。 VBAで行っている処理はだいたい以下のとおりです。 ・ADODBでConnectionとRecordsetを定義しテーブル・クエリを開く ・開いたテーブル・クエリの値を元に計算 ← ここでエラーメッセージになる ・別のテーブルに計算結果を格納 ・その計算結果を含むクエリをExcelファイルとして出力 ・ConnectionとRecordsetを閉じる どのように対処すれば、エラーを起こさずVBAを回せますでしょうか。 どうかよろしくお願いします。
>>954 あ、ADOか。接続ははCurrentProjectでやっているの?
それとも接続文字列を打ち込んでいるの?
後者だったら、サービスプロバイダー名が変わったんじゃなかったっけ?
>>954 まず先に、ファイル破損の可能性について対応してみれ
次に、Option Explicitでコンパイルしなおしてみれ
>>955-957 回答ありがとうございます。
残念ながら、現状、エラーは出続けているままです。
>954のサイトで思いあたる節はありません。演算に使っている変数の名前を
換えてみたりもしましたが結果は変わりませんでした。
ADOの接続はCurrentProjectでやっています。
参照設定をチェックしてバージョンの新しいものに置き換えたりしてみたのですが
うまくいっていません。
ファイル破損については考えにくいです。数〜数十回以内では連続Loop処理はできています。
また、念のため、適時最適化はかけています。
最後に、Option Explicitでコンパイルしなおしてみましたがやはりダメでした。
気付いたのは、Vistaで何かしら新たにやり始めると止まることが多いことです。
Excelファイルを開いたり、
放置してスクリーンセイバーが起動したり、
ブラウザを開き直したり
などするとエラーが出てVBAが止まります。
引き続きよろしくお願いいたします。
該当コードも書かずに…
>>958 このエラーってSQLが正しくないと出てきた気がする。
だからコンパイルは通っちゃうんだよね。
別PCにmdbを移動させると、クエリの計算フィールドの名前が変わったりすることがあるけど、
その確認もした?
>>959 すみません。
200行を超えるので貼るのは適当ではないかなと判断したのと、
先述のとおり、XPでは問題なく動いていたコードなので、
何らかの設定の違いが問題なのではと考えています。
>>960 XPのときから、accdbで使っています。
コードで使用しているフィールド名についても変更がないことは確認しました。
原因が不明で解決できそうもないときは 新規accdbにインポートして再構築を実施するようにしてる。 それとoffice修復くらいかの
>>962 VBAで呼び出しているクエリを作り直したほうが早そうだな。
あとはcurrentprojectが正しい接続文字列を生成しているか(Debug.Printあたりを使えばいい)、
テーブル名やクエリ名の先頭に半角英字をつけてみるとかぐらいかなぁ。
あとはエラーでとまったところのコードを数行前から提示してみるとか。
@ ADODBでConnectionとRecordsetを定義しテーブル・クエリを開く A 開いたテーブル・クエリの値を元に計算 ← ここでエラーメッセージになる B 別のテーブルに計算結果を格納 C その計算結果を含むクエリをExcelファイルとして出力 D ConnectionとRecordsetを閉じる これ@〜Dをかなりの回数ループさせてるってこと? XP→VISTAで高速PCに乗り換えて、DoCmd.TransferSpreadsheet使ってるなら むしろ俺はCから疑ってみる。
966 :
名無しさん@そうだ選挙にいこう :2009/09/07(月) 21:31:29
俺、VISTAにしたらExcelの同名上書きを、OSが勝手に既存Excelファイルに行追加にしたりで困った経験あるよ
>>963-965 回答ありがとうございます。
しかし、残念ながら、まだ解決しません。
>>963 新規accdbにインポートして再構築をしてみました。office診断もかけてみました。
結果は変わらずでした。
>>965 >954の記載が誤っていました。正しくは、
@ ADODBでConnectionとRecordsetを定義しテーブル・クエリを開く
A 開いたテーブル・クエリの値を元に計算 ← ここでエラーメッセージになる
B 別のテーブルに計算結果を格納
C ConnectionとRecordsetを閉じる
D その計算結果を含むクエリをExcelファイルとして出力
これのA〜Bを40000〜60000ループくらい、
そのA〜Bを含め@〜Dを1700ループくらいです。
Excelファイル出力には、DoCmd.OutputTo acQueryを使い、
新規ファイルを作成しています。
>>964 止まる部分ではクエリはいじっていません。
また、CurrentProjectが文字列を引き渡せているかについて、
止まるごとにウォッチ式で確認を取っているのですが、
計算式に使用されているトラックはどうも正常に値を渡しているようです。
テーブル名・クエリ名は頭文字をTやQにしています。
> あとはエラーでとまったところのコードを数行前から提示してみるとか。 以下に示しました。よろしくお願いいたします。 rs_mahalanobis_distance_output.Open "T_mahalanobis_distance_output", cn_mahalanobis_distance_output, adOpenKeyset, adLockOptimistic rs_x_y_aa.Open "Q_m_d_1", cn_x_y_aa, adOpenStatic, adLockReadOnly rs_sigma_inverse.Open "T_sigma_inverse", cn_sigma_inverse, adOpenStatic, adLockReadOnly Do Until rs_x_y_aa.EOF rs_mahalanobis_distance_output.AddNew rs_mahalanobis_distance_output![ID] = rs_x_y_aa![ID] rs_sigma_inverse.MoveFirst For i1 = 1 To 18 temp(i1) = _ rs_sigma_inverse![列1] * rs_x_y_aa![式1] _ … + rs_sigma_inverse![列18] * rs_x_y_aa![式18] ←ここで止まります rs_sigma_inverse.MoveNext Next i1 rs_mahalanobis_distance_output![mahalanobis_distance] = _ Sqr(temp(1) * rs_x_y_aa![式1] + _ … temp(18) * rs_x_y_aa![式18]) rs_mahalanobis_distance_output.Update For i1 = 1 To 18 temp(i1) = 0 Next i1 rs_x_y_aa.MoveNext rs_mahalanobis_distance_output.Update Loop
970 :
名無しさん@そうだ選挙にいこう :2009/09/07(月) 22:29:55
OS:WindowsXP Access:2003 テーブルに登録してるフィールドを以下の条件でレポートに 文字変換表示させるようにしています。レコードがNULLの場合は 何も表示させたくないのですが、どのように条件を変更したら よろしいでしょうか? =IIf([決定 必修 評価]="欠席","欠席",IIf([決定 必修 評価]="","","認定"))
>>969 ちなみにi1がいくつのときにエラーが出るの?
なんかコードを見た感じ、配列が原因っぽいけど。
>>971 ばらばらです。直近では、1、11、8。
>>970 Nz関数使うか、Switch関数に変更
>>954 レコードセット[rs_sigma_inverse] の [列18] を参照できていない旨のエラーだから、
rs_sigma_inverse![列1] → rs_sigma_inverse.Fields(0)
rs_sigma_inverse![列18] → rs_sigma_inverse.Fields(17)
のように参照方法を書き直したら動くかもしれない。
それでも駄目なら、rs_sigma_inverse を ループ前に adOpenStatic で1回だけ開いて
MoveFirst で 使い回すのを止めて、MoveFirst の所で adOpenForwardOnly で都度開く
ようにしたらどうかな?
>>970 NULLを扱うときはNz関数が便利。
>>969 の件
エラーメッセージからするとフィールド名を見失ってるって感じよねぇ
私も
>>974 と同じ感想を持った
rs_mahalanobis_distance_output.Updateが2行あるけど、見ないふりした
Q_m_d_1の取得をクエリ名ではなくてSQL文字列で書いてみるとか しかし、何が原因やろね XP→Vista→7と環境変えてるけど遭遇したことない内容だな
rs_sigma_inverse![列1]とかの[ ](中括弧だっけ?)はフィールド名を強調しているだけかと思った。 仮に括弧なしにはコンパイルが通らないなら、そもそもフィールド名に問題があることになるな。 問題があるような名前は、いっそのことエラーではじいてくれたほうが便利なのだが。
>>974-977 回答ありがとうございます。
結果は、変わらずです。
>974の2つの方法、>976のSQLでの書法など試してみましたが駄目でした。
Access自体のアンインストール→インストールも行ってみましたが効果なしです。
BTO-PCで相性の悪いババを引いてしまったものとして諦めました。
動かないわけではないので、お守をしながら回していこうと思います。
相談に乗っていただきましてありがとうございました。
>>978 メモリにエラーがあるのかもね。お疲れ様です。
チェックして交換してもおうぜ。
980 :
名無しさん@そうだ選挙にいこう :2009/09/09(水) 09:15:26
一気じゃなくて少しづつ計算したらどう? VB6で1行の長さで引っかかったことがある>外してそうだけど
>>939 俺も営業所内で使うシステム自作して、
フォームやVBAなどのMDBファイルは各PCに置いて、
テーブルのMDBファイルはLANタイプHDDに置いて、
同時に数台からのアクセスがある環境で使ってるけど、
全く問題無い。
HDDなら1万円くらいで買えるし、まずはHDDでやってみては?
982 :
981 :2009/09/10(木) 02:34:20
補足だけど、連結フォームで作ると、複数PCでの使用はダメでした。 また、フォーム自体は非連結フォームでも、 テーブルをデータソースにしてるコンボボックスが1つでもあるとダメだった。 面倒だけどフォームは全部非連結フォームで、 処理は全部VBAでADO使って書きまくるのが、一番サクサク動く感じがする。 俺が下手なだけかもしれないけど・・・。
983 :
名無しさん@そうだ選挙にいこう :2009/09/10(木) 10:33:57
>>982 access だと、データ処理はローカルで実行するって理解してて
組んだのかなと思う
#データは全部LAN経由で読み込んでから、クエリ処理を行う
>処理は全部VBAでADO使って書きまくるのが、一番サクサク動く感じがする。
これは、普通に正しいと思うが
#もしくは パス・スルー・クエリ使うとか
メンテの時検索できないといやだから、極力VBA+ADOだね
#クエリよりSQLの方が見通しがいいし
#BackはSQLServerEX、Accessはフロントだけが多いw
984 :
名無しさん@そうだ選挙にいこう :2009/09/10(木) 18:36:51
#クエリよりSQLの方が見通しがいいし #クエリよりSQLの方が見通しがいいし #クエリよりSQLの方が見通しがいいし
985 :
名無しさん@そうだ選挙にいこう :
2009/09/10(木) 22:58:00 >>984 UNION はかけないしな
100個近いクエリで、クエリ内クエリが3重、4重の
他人の作ったmdbをメンテすることになったときに、実感すると思うよ
#テーブル変更なんざ、出来ねーよ 簡単に
#大体、^Fで検索対象外だしな