Access VBA 質問スレ Part1
■ このスレッドは過去ログ倉庫に格納されています
AccessのVBAに関する質問スレです ★1 質問テンプレ(雛形)は用意しませんが、OSとAccessのバージョンは必ず書きましょう。 ★2 AccessのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 AccessのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、 コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★5 わからなければとりあえず「マクロの記録」(Alt, T, M, R) 関連スレ Excel VBA 質問スレ Part23 http://toro.2ch.net/test/read.cgi/tech/1327763113/l50 業務委託契約として顧客に準備された制限の多い 環境下で業務をしています共有サーバも特殊である為、 理解出来ないような仕様が多いです 「別のaccess起動」はshell関数で対応する事で 解決出来ました たくさんのご意見どうもありがとうございました クライアントにACCESSインストール不可なのに どこでどうやって「別のaccess起動」を解決できたのかすごく気になる 特殊なサーバってメタフレームとかじゃないだろうな >>702 これだな 別にクライアントでaccessが使えないとは書いてないし 変な奴が揚げ足とって粘着してるようにしか見えん accessVBAでファイルコピーをするのですが、 テーブルにある数値をコピー先のファイル名としてファイルコピーしたいのですが、 どうすればいいでしょうか? テーブルには1フィールド1件のレコードしかないようにしています。 レポートにクエリを埋め込んだ場合、フィールド幅とかフォントとかって指定はできませんか? ひどく難しい質問だが : レポートのソースをクエリにしている、という意味なのか だとするとその一文は無用なのだが レポート上のテキストボックスにクエリのSQL文を埋め込み(貼り付け) たいんだが、それぞれ文字数が変わるのでそのテキストボックスの フィールド幅とかフォントを自在に変えたいのか 下の意味だとしたら cf. http://www.newsbit.org/vol16/ 幅は変わらないけれども Verが2010以上なら cl. http://mukkumuku.blogspot.jp/2013/02/access-2010-2013-anchor-property-2.html とか なんだよ cl. って、こっ恥ずかしい cf. confer 【参照】の意味で >>707 残念ながらどっちでもないです。 1枚のレポートの中に複数のクエリの結果を表示させているのだけど、幅サイズ指定どころかフォントすら指定出来なくてこまっているんです。 そのクエリの結果をそれぞれ個別にレポートに仕上げる分には フィールド幅とかフォントを固定できるものなのか? 一つのクエリでならMaxサイズがそれぞれのフィールドで指定できるものなのかを聞いてるんだが それができるなら個別にレポートを作って、最終的に一つのレポートにそれぞれをサブレポートとして 埋め込めば可能だろうが、個別のクエリでもフィールドサイズが都度都度変わるものだとしたら 無理気味な気が つか、そこまで可変を重要視するならフォームに表示してそっちで印刷・・ 現物に当たれないからフォームでの仕様は後日確認してみるけど AccessからExcelに書き出して印刷まで自動化した方がうまくいくこともある フォームコントロールを自動で 美しく配置するツールを作りました。 需要ありますかね。 もちろんレポートにも対応してます。 ソースにするクエリを選択します 作成タブのフォームをクリックします 美しいレイアウトのフォームが自動で作成されます Access2000 Win7 例えば、 田中,安倍,中曽根,福田,小泉, 麻生 という文字列をフォームに順次入力したとき、 直近の5個をプルダウンメニュー化(コンボボックス?)して再入力の手間を省きたいです。 上で言えば、安倍より右なのでプルダウンメニュー化(コンボボックス?)すると 安倍 中曽根 福田 小泉 麻生 となって、中曽根を選んだらそれがフォームに表示(入力)されるという具合です。 VBAではどうすべきでしょうか? 何かヒントはありますか? 職場の都合上Access2000を使っていますが、これ以降のバージョンで可能ならそれも教えて下さい。 私なら 入力した名前をテーブルに追加していき リストボックスの値集合ソースにそのテーブルを指定して表示させ Wクリックで入力させたいテキストボックス(?)に転記させます ※コンボじゃなくリストにしたのは好みです 配列で変数に入れて、 値集合ソースにセットすれば? まあ、でも次回開いた時に 直近のを表示したいって事なんだろうから やっぱりテーブルに保持して それを表示してやる感じかね。 >>720-723 色々有難うございます。 すいません、AccessのVBAのスレで>>719 を書いてしまいました。完全にネボケていました そもそも質問の意味がわからない。 任意のリストをコンボボックスに表示する方法は分かってる? 或いは指定テーブルの指定フィールドをコンボボックスに表示する方法とか。 それが分かれば技術的な問題じゃ無くて頭の問題でしょ。 >>725 職場では検証や練習の時間が取れないので、自宅で練習した上でやりたいのですが 自宅にはAccessが無いので上記のような質問になってしまいました。 >>726 いや、それは分かるけどコンボボックスに何かを表示する方法は分かってるのかという話。 それが分かれば後は頭の体操の話でしょ。 任意のリストでやるなら5個の文字列を連結したものを都度作成すれば良いし、テーブルでやるならUNIQUEにして追加削除すれば良んじゃね。 田中,安倍,中曽根,福田,小泉, 麻生 ・・・ がどう入力されるかだけど 田中,安倍,中曽根,中曽根,田中,小泉,福田,小泉,安倍, 麻生 ・・・ とかだと直近の重複しない名称が都度ドロップダウンリストボックス内で 変化していきそうで、それはそれで入力時に戸惑いそうだが ドロップダウンリストボックスのソースを重複クエリ(>>722 の言うstrSQLでもいいけど)で セットすればいちばん簡単だけど、直近を抽出するにはレコード番号とか入力日時とか を基準にして並べ替えする てことかな 氏名は例だろうけど、現物は何だろ? 面白そう 入力のたびに「あれ?」「ん?」って 声が聞こえて来そうだ(本人が使うんじゃ無ければ) >>728 現物は顧客リストとパートナー営業さんのリストです 勿論、上記の氏名は例ですが、中曽根さんのデータを呼び出して30分くらい経って 「中曽根さんの○○の項目を更新忘れていたわ」ということが多々あるので、一旦呼び 出した人は履歴から簡単に再呼び出ししたいです。 平たく言うと、WebブラウザのHP履歴みたいなもんです。 オートコンプリートね。 テンポラリテーブル作るのが 一番簡単かと。 フォームから入力されたデータってレコードソースで指定しているクエリのテーブルに格納されるって認識あってますか >>732 に追記です DoCmd.RunCommand acCmdSaveRecordで保存されたデータはレコードソースのテーブルに格納されるでいいでしょうか。 基本的な質問ですみません テキストボックスが連結されていれば入力内容はテーブル(の連結フィールド)に保存されます。 >>734 すみません、テキストボックスとは何を指してますか、クエリのソースですか? >>735 フォームに配置するオブジェクトのひとつ。他にコンボボックスとかリストボックス、コマンドボタンなんかがあります。 何やら禅問答の様相を呈しているようだが その入力フォームのレコードソースがクエリで、対象のテーブルに保存できるか? という質問なら、DoCmd ・・・なんぞを使わずともレコードが移動した時点で保存される ソースの無いフォーム上のテキストボックス群(等)に入力して、例えば[保存ボタン]などで 対象のテーブルにデータを保存するような使い方の場合には、その DoCmd ・・・を使って それぞれ保存したいフィールドに各テキストボックス群(等)のデータを保存する でよろしいか テキストボックス、コンボボックス、リストボックス、チェックボックス等々があるから・・群(等)と書いたけど >>737 はい、フォーム上のテキストボックスに入力されたデータの保存について聞きたいのですが、レコードソースのクエリで複数テーブルが結合している場合、共通のカラムのデータは結合しているすべてのテーブルに保存されますか >>738 すみません、分かりません。 カラムっていうのは何だろ?フォームはデータシートビューなのかな。 百聞は一見の喩えじゃないが、二日費やしてる間に試しで入れてみれば 100ヶテーブル繋げてても全部入るだろ あ、Max32だったか しかも結合は16までか じゃあ16で で、へぇ、なるほど、こうなるんだ って理解に繋がる >>739 カラムは列(項目)です フォームビューです 本番環境で作業してるため、登録処理ができないので、教えていただきませんでしょうか レコードセットがダイナセットで、レコードソースのクエリが2つ以上のテーブルを結合しているときの登録されるテーブルを教えてほしいです クエリが複数のテーブルからできていても そのクエリのカラムはどっちのテーブルのカラムか区別されてるぞ >>742 フォームプロパティのレコードソースからクエリのデザインできるウィンドウを開きます。項目フィールドがどのテーブルのものか定義されています。 正確な名称で答えられなくてすみません。布団の中からなので。 easyComm使ってrs-232cで測定器つないでデータ取る、みたいなのが得意な人いる? 出来た!動いた! 測定器の制御とか本当はvisual studioとかで作成するんだろうけど、パソコンの性能がいつの間にか上がっててACCESSでもいけたよ! そのうち性能ωが上がってACCESSでBIGデータ扱ったり機械学習したりする時代が来るのか すごい基本的な質問ですみません accessのSQLの言語って何ですかね MYSQLとかですか SQLが言語だよ すとらくちゃーどくえりーらんげーじ だったかな 質問の意味も意図もよくわからんね。 access以外のシステムからSQL文をコピペしたいってことなのか!? >>750 MYSQLもSQL。 仕様があって、それに沿って各社実装してる。 が、独自部分も多いから同じSQLだからといって何処でも動くとは言えない。 >>753 SQL言語もポスグレだったりPLSQLだったりあるじゃないですかそれで言うと何になるのか聞きたいんですけど 勘違いしてたらすみません SQLとMYSQLの関係ってCとC♯の関係ですか >>752 コピペでそんなこと気にする必要ありませんよね 気になったから質問したまでです SQLとMYSQLの関係は他人のSQLと自分のSQLの関係です 昔、金井克子という人が歌ってました SQLというのはそれが言語 (たまにSQL言語以外の事をSQLと言っている場合もある) ポスグレやMYSQLやACCESSはそのSQL言語を使う環境(の一部) 環境によりSQLに多少の差はある ポスグレはSQL言語じゃない PL/SQLはSQLを拡張した言語 ACCESSならSQLを超える範囲の言語はVBA >>758 よくわかりました、ありがとうございます >>756 他のSQLの構文をそのままコピペしてAccessで使うのは うまくいかないこともある ことを気遣ってくれたんじゃね? そんな言い捨てるようなレスはいけないと思いますよ >>761 素直な態度の人は成長するらしいですね。 良い事良い事。 変数の宣言を強制するにチェック入れたのに Option Explicit が出てこないのですが どうしたら出て来ますか? 既存のコードには入らないよ 新規で作成するオブジェクトには入る Accessの神々よ、御教えを! Accessでは、CHECK 句が使えないようですが、 カラム数が多いため、 いちいちプロパティから入力規則を設定するのは骨が折れます。 SQL で一括設定する方法をご伝授くださいませ〜 えー、クエリ作ってからSQL表示してコピペ。 そんな事聞いてないよね。 win7x64-office2016x86環境下のみで再現するらしい xls出力からコペピ張り付け罫線操作等々やってる処理で張り付したシートがズレル不具合発生 ネット調べても一切情報でてこなくて期待込めてofficeアプデしたら実行時エラー1401 空白でないセルが云々カンヌん泣きたい 自己レス office365BPの2016でのみ再現 別シートの複数列コピー選択状態でAAセレクトインサートやろうとするとコピーペになる セレクト前に空白セル1コピーで回避 クエリを実行したときに全件レコードを取得できてないのに検索結果画面が開くときってない? ▷|←このボタン押すと検索結果の件数が出てくるんだけど、押してから出るまでに時間がかかるってことは全件レコード取得できてないってことだよね >>774 いや、クエリのSQLをorderby句を書かなかったとき、全件検索する前に検索結果画面が開く @orderby書いてクエリを実行する→1/2500みたいに結果件数がでる Aorderby書かないでクエリを実行する→1 結果件数が上記と違いでない ▷|このボタンおすと上記と同じように1/2500となる @の実行時間10秒 Aの実行時間1秒 ただし▷|ボタン押すと10秒くらいかかる なんかオプションに無かったかな。最初の表示するぶんだけ読み込んでとりあえず見せておいて裏で続きを読むって機能をオンに、みたいな。 会社テーブル id 会社名 ・・・ 1. A社 2. B社 3. C社 4. B社 職員テーブル name 会社id ・・・ 山田. 1 鈴木. 1 飯田. 2 野口. 3 岡本. 4 一対多のリレーションがありまして 会社マスターにダブり登録されている場合(この場合B社) 楽に修正する方法はないでしょうか 250社くらいダブリやトリプルしていて困っております 名寄せマスター 名寄せID 会社ID 新会社ID 1 2 2 1 4 2 名寄せマスターと職員テーブルをJOINしてUPDATE というのはどうですか? その会社マスターがおかしいのを放置するのか修正するのかで違ってくるよね >>781 なるほど 重複クエリに各会社の最小IDを連結して名寄せテーブルを作成し JOINしてUPDATEしました 名寄せテーブルを作成しないでクエリだけでUPDATEまでもっていくのは この場合駄目なんですね はじめ理解できず悩みました >>784 JOINしたAccessのデータをExcelに吐き出し各職場に配布、各々で修正追加。 一年以上たって回収しAccessに貼り付けられて今の状態です。 正確には職員テーブルじゃなくて顧客テーブルですね なあんだ、Excelの段階で調整しちゃえば余計な苦労しなくて済んだのに 初心者なんで教えて欲しいんだけど、フォームの次へボタン押した時に次のレコードが 表示されないのだがどうしたらいいか教えて欲しい。バージョンは2013 Private Sub Form_Load() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("名簿テーブル",dbOpenTable) Me!名前テキスト = rs!名前 Me!カナテキスト = rs!よみがな End Sub Private Sub 次へボタン_Click() DoCmd.GoToRecord , , acNext End Sub フォームのソースが名簿テーブルならフォーム読み込み時の名前とよみがなセットするコードは無くても先頭レコードが表示される。 フォームのソースを確認しましょう。 非連結フォームならボタン押した時に次のレコードを読み込んで名前とよみがなセットするコードが必要だけど、キーが不明なので何ともアドバイスできません。 長々と書いたがわかりにくいね、すまん。 神さま教えてください。 ADODB.Commandでのインサートが失敗しても エラーが出ないのですが、エラーハンドリングの 方法を教えてください。 よろしくお願いします。 むしろonerrorしかないと思うが、他にやり方あんの? レスありがとうございます。 ON ERROR は当然やってまして その上での質問です。 失敗ってなんだ。 戻り値を取ればAffectedRowsになってるだろうから それで判断するか追加されたはずの行数をあらためSELECTするとか >>786 そのコードはFormがLoadされた時に名簿テーブルを開いてRecordsetに格納し、名前とカナをテキストボックスに入れるというものと次へボタンを押した時にFormがLoadされた時の処理とは全く関係なく次のレコ−ドに移動するもの。 ところで次へボタンでの次のレコ−ドってのは何のデ−タなんだい? 改めて言うけどFormがLoadされた時の処理なんて知らないからとAccess君は言っている。 要は、DoCmd.GotoRecordってのはデータとオブジェクトが連結されていることが想定されていて、連結されているから既にオブジェクトにレコードが表示されているわけだが、それに対して次のレコ−ドと言ってる。 一方、FormのLoad時の処理は連結関係無くデ−タを自ら取ってくるもの。 こちらのやり方を取るならRecordsetをPublic変数にするかForm内でのPrivate変数として保持しておき、他のイベント(次へボタンクリックのような)で使いまわすというやり方になる。 整数型、重複なしの列を書き換えるときはどうしてますか?たとえば、 2 1 3 → 2 1 3 にしたいときに2→1の時点でエラーが出ると思うので回避策を検討しています。 一時的に重複なしを解除して、終了時点で重複なしへ戻す方法や、一旦一時的に重複しない数字に書き換えて、それから再度書き換えるべきか悩んでいます。 なにか一般的な方法はございますか? あれ、スペースがおかしくなっている。 列を書き直すときにたとえば 2→1 3→2 1→3 としたいのです。具体的にはidを振り直す作業です。 レンジのソートでよくね? もしくはフィルタ付けて並び替えてからフィルタ解除とか idには触らないで、整数型のフィールドを追加します。そのフィールドでやりたい放題やります。 どうしてもやりたけりゃ、swapしていきゃいいんじゃないの? 最初は2→1にしたいから、 1 3 2に。 次は3を2にして 1 2 3 に。 入れ替え自体は、UPDATE xxx SET unique = CASE WNEN unique=1 THEN 2 WHEN unique=2 THEN 1 ELSE unique END でCASEで書いちゃえば入れ替えられる。 1クエリ内で完結したら、制約はかからない。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる