Access総合相談所 27 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
ACCESSに関する質問はこちらへ ▼━ 質問のしかた ━━━━━━━━━━━━━━━━━━━━ ★ OS、ACCESSのバージョンを明記してください。 ★ 質問内容は具体的に書いてください。 ・何がしたいのか ・どんな処理を試したか ・動作状況など駄目な理由 テーブル/フォームの構成、クエリ、VBAの内容など差し支えない 範囲で詳しく書くと、早く回答が得られるかもしれません。 図解があれば尚良し。 聞き返さなくても詳細が把握できる質問が望ましいです。 ★ 事前にヘルプ・Google等で調べられる範囲は調べてください。 大概の疑問は検索することで解決します。 ★ アドバイスを貰ったら、必ず経過・結果の報告をして下さい。 ギブアンドテイクで情報を共有しましょう。 ▼━質問テンプレ ━━━━━━━━━━━━━━━━━ 【 システム環境 】 Windows**, Access** 【 VBAが使えるか 】 はい・いいえ 【 VBAでの回答 】 可・否 【 検索キーワード 】 Googleやヘルプでの検索キーワード 前スレ Access総合相談所 26 http://toro.2ch.net/test/read.cgi/bsoft/1349049986/ 【 システム環境 】 Windows7 Access2010 【 VBAが使えるか 】 いいえ 【 VBAでの回答 】 否 【 検索キーワード 】 Googleやヘルプでの検索キーワード ドロップダウンリスト EXCELで作った何層もあるドロップダウンリストで、入力フォームは作れますか? EXCELのフォームだとドロップダウンリストが使えなくて、困ってます。皆さんの知恵を拝借出来ればと思います。 クエリでデータ元のクエリにフィールドがあるかどうか判断して、ない場合はフィールドを作ってデータはヌル値をいれるにはどうすればいいですか? 今どきAccessなんかで業務システム作ってる会社ないしな 基幹システムに乗らない特殊業務はAccessの独壇場 まあ将来人工知能が台頭したときはどうなるか分からんが それまではまだまだExcelやAccessのVBAは強力なビジネスツールじゃないかね 日本の企業は社内のIT化というとすぐボッタクリ人月商売のSIerに頼るが この悪しき文化を改めて、もっとAccessやVBAやFilemakerなどの便利ツールを活用して 小規模なものなら内製できる作らないとマジでヤバイと思う SOHO規模であればほとんどAccess+SQLServerで対応できるし SQLServerはExpressにして、各クライアントのAccessもRuntimeにすれば0円だしw . >>314 mdb を Windows Server の共有フォルダで運用するにも CAL が必要 つまり Access でも Windows Server CAL が必要 と SQLServer Express に限らず Windows Server を使うなら普通の事です >>314-316 CALついでに教えてほしいんだが、 Windows7の最大同時接続数=20ってのは何のことを言ってるんですかね? 今、職場で使ってるSQLServerExpress+AccessRuntimeのシステムは、 当初10人くらいしか使わなかったんで、空いていたWin7ProのPCに暫定的にExpressを立てたんだが、 その後ユーザーが増えて、WindowsServerにしなきゃと思っているものの、 ManagementStudioで見てるとセッション数が70〜80に達しても全くエラーにならないんだよね セッションの挙動を見てると、一回繋がってセッションが生成されると、 その後アイドル状態が続いても10分くらいセッションがキープされるみたいだが (ODBCで作ったリンクテーブルは任意で切断できないからたぶんコレ)、 こういう死んだセッション(?)は「20」にカウントされないのかな? ちなみに、Serverが対象でなくてもライセンスが要るんやで。 リモートデスクトップで他PCに繋ぐことが良くあったから、 MSの営業に聞いて仰天したわ。 でも、何のライセンスがいるのか(ServerCAL、RDS CAL等)は、 よう答えんかったわ。でも、「厳密にはライセンスが要る」らしいわ。 何だこれ? Debug.Print Format(DateAdd("s", -1, #12:00:02 AM#), "yyyy-mm-dd hh:nn:ss") Debug.Print Format(DateAdd("s", -1, #12:00:01 AM#), "yyyy-mm-dd hh:nn:ss") Debug.Print Format(DateAdd("s", -1, #12:00:00 AM#), "yyyy-mm-dd hh:nn:ss") Debug.Print Format(DateAdd("s", -1, #6/1/2016 12:00:02 AM#), "yyyy-mm-dd hh:nn:ss") Debug.Print Format(DateAdd("s", -1, #6/1/2016 12:00:01 AM#), "yyyy-mm-dd hh:nn:ss") Debug.Print Format(DateAdd("s", -1, #6/1/2016#), "yyyy-mm-dd hh:nn:ss") 1899-12-30 00:00:01 1899-12-28 00:00:00 1899-12-29 23:59:59 2016-06-01 00:00:01 2016-06-01 00:00:00 2016-05-31 23:59:59 思うてたんと違う! Dim d1 As Date Dim d2 As Date d1 = Date Debug.Print CDbl(d1) d2 = Date Debug.Print CDbl(d2) Debug.Print (d1 = d2) d1 = DateAdd("s", 1, Date) Debug.Print CDbl(d1) d1 = DateAdd("s", -1, Date) Debug.Print CDbl(d1) d2 = Date Debug.Print CDbl(d2) Debug.Print (d1 = d2) 42522 42522 True 42522.0000115741 42521.9999884259 42522 False >>321 は忘れてください。 もう意味わかんない Dim d1 As Date Dim d2 As Date Dim i As Long d1 = Date d2 = DateAdd("s", 3, d1) For i = 1 To 3 d2 = DateAdd("s", -1, d2) Debug.Print Format(d2, "yyyy-mm-dd hh:nn:ss") Debug.Print d2 = d1 Debug.Print CDbl(d2) Debug.Print CDbl(d1) Debug.Print Next >>322 2016-06-01 00:00:02 False 42522.0000231481 42522 2016-06-01 00:00:01 False 42522.0000115741 42522 2016-06-01 00:00:00 False 42522 42522 >>322 おそらく計算結果の日付が同じなのに、比較が一致しないということだろう 日付のシリアル値は 浮動小数 っぽいので丸め誤差かなんかで 内部的な見えない部分で微妙な誤差が生じてるんだろう 日付を文字列に変換して比較するか もしくは DateDiff("s",d1,d2)=0 なら日付が一致とかにすればいい そりゃそうだろうけど VBなんだから その辺はお節介機能が働いて 自動調整してくんないとさ。 社内サービスエンジニアは気づかないよ。 accessvbaの学習がしたいのですが、おすすめの本がありましたら教えていただけませんか? excelvbaやvb.netは業務で使用していたのですが、accessはあまり経験がないので、体系的に学べる書籍があると助かります。 Webのしくみと応用 第9回「リレーショナルデータベース」 6/5 (Sun) 16:00 〜 16:45 (45分) 放送大学1 放送大学いいよね。求めているものと違うかもしれないけど、頭のいい人が説明してるからどんどん頭に入る。 これからのaccessの可能性 中小の社内システムくらいなら可能性はあるのかな ACCESSで作ったアプリを動かすだけならACCESS2013のランタイムを インストールすれば動きますか? パスワードロックとか運用制限とかでブロックされなければ あとはバージョンが一致しているものなら accessが安く買えるところはないか? とりあえず2003で >>339 2003だと新品は皆無なのでオークションか中古屋で探すしかないでしょう イオシスで売ってるの見たことある 2000もあった アクセスは高いが1万ぐらいのやつはないのか? それと無料のMySQLがあるのに高いaccessを使う理由は その2つを比べてる時点でaccessを分かってないのがよく分かる Access2016でVBAのソースを書いた後、全体のインデントが 揃ってないことが多いので(自分が悪いんだけど)、 後から1発で自動的にソース全体のインデントを整える方法無いですか? 以前、Smart Indenterというものを使っていたのですが、 Access2016ではアドオンマネージャに表示されないので 使えないようなのです。 ACCESSに限らずVBA全般、Editor部分を改良する気がぜんぜん感じられない。 俺もインデント直してくれるものがあるなら使いたい。 昔は必須みたいに言われてたし、実際にいいのがあったけど 今は知らないな。苦労してるわ。 インデントがないとネストが深くなったときとかは分からなくなるね。 VSなんかだとカーソルあてると対応するカッコなんかが強調される(必ずしも正しいとは限らない)からまだほんの少しは分かりやすいけど。 エディタとしてはもう少し改良の余地はあるようにも思うんだけどな。 SmartIndenterいいよ。俺は2010だけど普通にインストールできた。 何もインデントが無いようなソースをコピペしたとしても、 他人が開発したものを手直ししてくれと言われても、 ワンクリックで整形してくれるからホント見易い。 2016で使えないと聞くと、Access買い換えるの躊躇するな。 俺はフリーソフト(名前忘れた)で行番号が表示されるようにしてるわ フォントもConsolasって欧文フォントにして、レジストリ弄って日本語はメイリオの等幅にしてる マイクロソフトはもうあの古臭いVBEをリニューアルする気は無いんだろうな Accessはフォームが別だからまだマシだが、ExcelなんてユーザーフォームがVBAと一体だから 未だにコントロールがWindows2000みたいだからな そう言えばVBAのjava script化(JSAってなるのかな?)やるって言ってなかったっけ? あれどうなったん? office 365 soloにもaccessが入っているけど大丈夫でしょうか? データべースの勉強がしたい 2000から2010に乗り換えた時、VBEのコードウィンドウがマウススクロールできて感動した。 逆に言うとそれ以外は特に何もなかった。(VBE関連では) 今度PCが増えて3台になるので2010からOffice365ProPlusにするか迷ってます。 今から2010買い足すのもどうかと思うし。 Access2016のここが良い!、ここがイヤ!ってありますか? >>355 2000でもマウスでスクロールできますよ。世界中の皆が同じこと思ってますから。 2016のいやなところ?インデントが自動化できないところです。 自分で書いててもところどころいい加減だし、 チームで仕事したりするともう最悪ですよ。バラバラで。 >>356 返信ありがとうございます。 2000でもスクロールできましたっけ? すみません。私の思い違いだったかも。 インデントの自動化というのは私は使ったことありません。 VBAに限らず今業務で使っている(たまに機能の追加・修正などしていますが)2010で作ったアプリに 支障がなければいいのですが。 VB6の時もやったけどMSで配布されてたアドイン使うやつじゃないかな・・・スクロールは >>357 言い方悪かった。>>358 の通りアドイン使うとスクロールできるように。 今2010があるなら、SmartIndenterというのを使ってみるとわかる。 過去の自分が書いたもの、そこに他人が混ざったものが とても読みやすく整うし、整っていることの価値が感じられるので。 無料なので試してみたらよいと思う。2016では使えないけど。 2010では使えるのを当方で確認済み。 Access2013の32ビット版では (規定の)キャンセルボタンを下記のようにして問題なく動いていたのですが Private sub cmdcancel_Clickl() Me!一覧1.Form.Filter = "" Me!一覧1.Form.FilterOn = False end sub 64ビット版ではエラー2001 直前の操作はキャンセルされましたと エラーが出て動かなくなってしまいました 理由を教えて頂けないでしょうか? よろしくお願いします。 >>360 On Error Resume Next 【 システム環境 】 Windows10, Access2010 【 VBAが使えるか 】 はい 【 VBAでの回答 】 否 windows10上でAccess2010のアプリを作成しました。デスクトップ上にショートカットを作り独自のアイコンを指定しました。 アイコンをダブルクリックするとアプリは問題なく立ち上がるのですが、タスクバーに表示されるアイコンは指定したアイコンではなく、Accessのアイコンのままです。 そこでタスクバーのプロパティ画面を呼び出し、タスクバーのボタンで「常に結合、ラベル非表示」から「タスクバーに入りきらない場合に結合」を選択し、上記の操作を行うと、タスクバーに目的のアイコンが表示されます。 またOfficeにAccessが入っているバージョンをインストールしたパソコンでは、上記の現象が発生し、Accessの入ってないOfficeをインストールしてruntime下でAccessアプリを動作させる場合は問題は起きず正常です。 この問題は個別の問題なのか、一般的な問題なのか教えてください。 windows10でみんな答える気無くしてるんじゃない? sql serverのdbをaccessで開いて読み込んだり、逆に書き出して更新するなどしたいのですが vbaのプログラムが必要ですか? 遅くていいならリンクテーブルにしちゃえばいいんじゃないの。 そこそこ動かすならパススルー書かなきゃならんが、必要な数だけクエリを作るならvbaはいらない。 動的にクエリのsql等を書き換えて使う場合はvbaがいるって感じかな。 得意なやり方でやりゃいいと思うよ。 >>365 詳しい説明ありがとうございました。 リンクテーブルと言うのを使って出来ました。速度的にも遅いとは感じませんでした。実験用に作った10行ほどの名簿データのようなものだからでしょうか? 今後、データを追加して行き数千〜数万行くらいになる予定です。それくらいのデータをsqlサーバーにエクスポートすると数秒とか数十秒くらい掛かりますか? 他の方法も試してみる予定です。 テーブルの件数が多くなると抽出に時間がかかったり、一度に多くのレコードを追加すると遅く感じることになる。 数千や数万なんてDBとしては大したことない件数だけど、これで遅く感じたらそれは遅いってことでいいと思う。 仕事で請けてんなら処理に係る時間を計測するようにvba書いたり面倒臭いことをする羽目になることもあるだろうけど、 そうでないなら見なかったことにしたり、遅いと感じなければ問題ないよ。 >>362 興味あったんで少しだけ余った時間使って試したけど、そもそもタスクバーのアイコンが変わらない フォームとレポートのアイコンを… てのはチェック入れてるけど、他は何を見れば良かった? Windowsのテーマがどうとかも関係してた? 2010 on Win10 Pro や 2016 on Win10 Pro とかは試したけどやっぱアイコンが変わることは無かった あるスポーツサークルの名簿と、集会の参加記録をまとめたものを作っています。 名簿テーブル=memberID、名前、入会日、退会日 集会記録テーブル=開催日、開催場所、スポーツ種目、memberID、その日の得点 という構成です。 この状態で、クエリひとつで、以下の表を作りたいです。 名前、入会日、最初の集会参加日、最後の集会参加日、これまでの最高得点、 見学回数(参加したけど点数なしの日)、最初の競技参加日(得点ありの日)、 最後の競技参加日(得点ありの日) この一覧をひとつのクエリで表示することは可能でしょうか? 可能。 それぞれの項目をひとつのクエリで作っていって、 最後にまとめればよし。 【 システム環境 】 Windows7 64bit, Access2010 【 VBAが使えるか 】 いいえですが、勉強中 【 VBAでの回答 】 他にないなら可 お願いします。 日付、店、メニュー、満足度 の各フィールドからなるテーブルがあります。 一日に最大3店舗で計1回から15回ほど外食するので、同一日付の同一店舗で 最大10レコードほどあります。 このテーブルを元にして、レポートを作りたいです。 レポート1ページ当り、同一日付・同一店舗でのメニュー一覧を表示したいです。 しかし、このレポートのソースが作れません。間にクエリをはさむとしても、 どうすればいいのかわかりません。 私が思いついたのは、 1レコードにメニュー1からメニュー15までのフィールドを持つテーブルに作り直し、 そのテーブルの1レコード=レポートの1ページとする、という方法です。 もっとスマートな方法はあるでしょうか? 根本的にレポートがわかってないのでは? 日付→店の順でグループにして表示するだけなので、 ソースもへったくれもないでしょ。元のテーブルがそのまま使える。 フォームで複数のテキストボックスのどれかが更新された場合というイベントを掴むためには、 個別のテキストボックスの更新時処理に記入しないとダメですか? 一括で記入できないですか? >>377 そういうのイベントを定義すればできるんじゃないかい。頭のいい人はAccessでもやってるよ多分。 でも自分はプロパティを定義してやっている。これで十分だった。 以下のような2行を入力可能な全てのコントロールのAfterUpdateに記述。 If Not IsEditing then IsEditing=True ' IsEditingはPrivate Set; Public Get CommonSubProc ' 共通Subプロシージャを実行 共通Subプロシージャから ルールのチェックとか SubmitボタンのEnabledの制御とか色々呼び出す。 こんなんで参考になるか >>379 >>380 フォーム自体のレコード保存のイベントに書く事にしました 【 システム環境 】 Windows7 32bit, Access2010 【 VBAが使えるか 】 すこし 【 VBAでの回答 】 ○ 【 検索キーワード 】 テキストボックス クエリー MSGBOX 値 クエリをデータソースとするフォーム上で印刷ボタンを押すと単票形式のレポートを出しています。 レポートには「年月日の自と至」のテキストボックスがありますが、 テーブルに格納している「年月日の自と至」とは異なる値を入れる必要があるため 印刷ボタンを押したときに、MSGBOXでユーザに入力させ、 レポートを開くときにレポート上の非連結デキストボックスに代入することで対応しています。 今回、1件ごとに印刷する機能を残したまま、 メインメニューから印刷対象全件分の一括印刷をする機能追加の要望がでました。 印字する「年月日の自と至」は、クエリーにてテーブルの値から割り出した値を一括印刷したいです。 しかし、非連結テキストボックスにクエリーの値を代入する方法がわかりません。 テキストボックスを非連結から連結に変えてしまうと、MSGBOXの値を代入することはできなくなってしまいます。 レポートを個別印刷用と一括印刷用の両方を用意すれば実現できますが、あまり良い方法でないと感じています。 レポート内に非連結と連結の2つのテキストボックスを用意し、条件付き書式等で見えなくなる、というのもどうもよくないような・・・ 何とか一つのレポートで実現したいのですが、どのような手段がありますでしょうか教えてください。 一行目に書かれているフォームに日付の自と至を入れれば、レポートでそれを参照するだけでは? レポートの非連結テキストボックスのソースを =Forms!一行目のフォーム!自 と同じように至 として 連続印刷か個別印刷かも一行目のフォームでボタンで選択とか >>383 レスありがとうございます。 なるほど ・フォーム上にデータソースから割り出した「年月日の自・至」のテキストボックスを設置する。 ・フォーム上のテキストボックスはソースとは非連結にして、画面open時 個別画面にてテーブルの「年月日の自・至」から割り出した「年月日の自・至」を >>383 すいません。途中で書き込んでしまいました。 なるほど、と思いましたが、不明な点があり、考える必要があります。 説明が足りなかった部分がありました。 画面は メイン画面−1件だけ抽出した個別画面 に分かれていて、メイン画面で主キーを持って抽出した個別画面を出し そこで印刷ボタンを押すとそのレコードが出る、というものです。 これだと、印刷対象が200件ある場合、200回印刷しないといけないので メイン画面上に設置したボタンを押すと対象200件全件の印刷ができる、を実現したい。 しかし、全件印刷の場合は「日付」を個別に入力するわけにはいかないので 「たぶんこの日付でOKでしょう」という日付を割り出して印刷し 割り出した日付が使えないごく少数の案件は、個別画面でユーザに再印刷させる、という仕様です。 ということで、個別印刷と一括印刷のボタンの画面は別々です。 説明が足りなくてすいませんでした。 アバウト過ぎて判らんw なんぞ?メイン画面て? 最初の質問の一行目に書いてあるフォームでいいん? で、ユーザー?再印刷? 「たぶんこの日付で・・」 いいなあ、おおざっぱでw クエリー使ってるんなら一件だろうと200件だろうと、フォームに表示するかレポートで出力するかだけの違いで 困ること無いと思うんだが、何なんだ? その抽出条件をフォーム上に散りばめて必要なだけ絞り込んだものをフォームorレポートではダメな理由は? もしかしてクエリー自体が面倒なことしてない? クエリーの条件式で Between [ ] and [ ] とか < > とか を必要に応じて適切に当て嵌めるトコを学習した方が手っ取り早い気がしてきた 兄弟関係の抽出 と LIMIT、OFFSETに代わるもの OS: Windows 10 Pro Access Version: 2016 (2010も使用) VBA:Excel,Powerpointのみ VBAでの回答:否 検索キーワード:access SQL 件数 指定 http://www.accessclub.jp/bbs2/0051/beginter16860.html 「No16860.SQLで件数を指定する方法」 と SELECT [電話番号] FROM [T_児童マスタ] GROUP BY [電話番号] HAVING Count(*)>1 上記2つ等を元に、次のテーブルに適応させようとしていますが、 スマートな文、クエリ(または他の手法)が思いつきません。 どうかアドバイスをお願いいたします。 T_児童マスタ 学級 氏名 電話番号 11 A 1111-11-1111 21 B 2222-22-2222 31 C 1111-11-1111 41 D 2222-22-2222 51 E 1111-11-1111 61 F 3333-33-3333 ↓ 望む出力結果 学級 氏名 電話番号 兄弟学級1 兄弟氏名1 兄弟学級2 兄弟氏名2 兄弟学級3 兄弟氏名3 11 A 1111-11-1111 31 C 51 E 21 B 2222-22-2222 41 E 31 C 1111-11-1111 11 A 51 E 41 D 2222-22-2222 21 B 51 E 1111-11-1111 11 A 31 C 61 F 3333-33-3333 Accessでシステム作ってる所って多いの?? WindowsUpdateとかどうしてる? いきなりシステムが動かなくなりそうで怖いなー 動かないようなシステムを作るヤツがヘマなのかな Access97で開発したシステムをOS渡り歩きながら現在まで運用してるけど WindowsUpdateで問題が起きた事はないね OCXとか多用したら問題が起きそうな気はする Access2.0で作った。 Access97にしたらUnicodeで泣いた。「1月分請求額」とか列名や変数名で使ってた。 Access97で全面的に書き直した。 Access2003のとき?、ODBC Directで泣いた。とりあえず修正して使った。 Access2010で全面的に作り直して現在に至る。 【 システム環境 】 Windows7, Access2010 【 VBAが使えるか 】 そこそこ 【 VBAでの回答 】 可 【 検索キーワード 】 フォームに表示するテーブルをコンポボックスで変更したい コンポボックスでテーブルを選択してボタンを押すと選択されたテーブルを表示するようにしたいと思いっています。 例えば、テーブルA〜DがあるとしてコンポボックスでAと選択してボタンを押すとAのデータが表示するイメージです。 テーブルを表示するテキストボックス(非連結)のコントロールソースに「select * form [FORMS]![コンポボックス名]![フィールド名]」としましたがERRORになります。 1つのフォームで複数のテーブルを表示するのは不可能なのでしょうか? >>391 ボタンのクリックイベントでフォームのRecordSourceをコンボボックスのテーブルに設定。 各テキストボックスのControlSourceにそのテーブルのフィールドを割り当てる。 でできない? Win2000→XP→7 Access2000→2010→2016 特に問題なしでした。 2016でOfficeを64bitに入れなおした時、少し修正があったくらい。 >>391 非連結のテキストボックスは DLookup でいけると思う コントロールソース変えるのはRowSourceじゃないかと リストボックスに表示するクエリをRowSourceで変えることあるけど フォームでしょ?めんどくさくないですか? Access 2013を使っているんですが、各フォームのコントロールボックスに表示されてるアイコンて、フォーム毎に変更できるんでしょうか? >>392 ,393 出勤して確認したらテキストではなく、サブフォームでした ただ、アドバイス頂いたもので解決できました ありがとうございます。 Accessのマクロでエクセル出力をすると、既存ブックを上書きしても置き変わらない現象がありますがなぜですか? また、出力した際にデフォルトでバックアップを作成する設定をはずすことって可能ですか? 既存ブック開いたまま(プロセス含む)で出力してるとか バックアップって何? >>397 xlkの拡張子のやつ、Excelで名前をつけて保存の時全般オプションにフラグがあるやつです >>399 ありがとう。 それは、質問前に確認しました。 マクロの世界では無理で、vbaの世界ですね。 access2010 信頼できる場所を追加したい。 ユーザー毎の追加ではなく、デフォルトで追加設定したい。 Accessのフォーム作り込んでると 「イベント プロパティに指定した式 〜〜 でエラーが発生しました:引数は省略できません。」 ってエラーが表示されて、以後、エラーが出たフォームのマクロが全く動かなくなる現象の対処方法知ってる奴いたら、教えて欲しい…。 >>403 ちなみに環境は書き忘れたけどWindows7とaccess2010 >>403 そういうときは多分 一度新しいAccessファイルにフォームをエクスポート、 元のフォームを削除してエクスポートしたフォームをインポート。 もしくは 新しいAccessファイル開いて全てのオブジェクトをインポート。 既存のファイルは捨てて新のを使う。 念のためバックアップはとっておいて。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる