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 質問 Access2010 突然、フォームのデータシートビューで列を入れ替えてもその状態が保存されないようになってしまいました。 いろいろと原因を調べてみるとOpenやLoadイベントでフィルター設定を行うとそんなトラブルが起こってしまうようなのです。 Private Sub Form_Open(Cancel As Integer) Me.Filter = "ID>3" '例 Me.FilterOn = True End Sub 皆さんの所でも再現出来ますでしょうか ちなみに自宅のAccess2002ではこういった異常な動作は起こりませんでした またこれって有名なバグとかなんでしょうか access 2010 windows7 DoCmd.OutputTo acReport, access 2010 windows7 DoCmd.OutputTo acReport, "hoge_table", acFormatXLS, "C:\hoge.xls" レポートファイルをxlsへ出力するときに 「実行時エラー 2587 出力が完了できません」が 出てきてしまいます。 実行時エラー2587を検索しても情報が出てこない為、 困っています。 どなたか何が原因かわかりますでしょうか? 先月までは機能していたんですが、 今月から急に上記エラーが出てくるようになりました。 プリンタが変わった レポートの書式が変わった(文字コード系) 再インストールで復帰した というようなresが 英語のフォーラムだけど 手動でエクスポートした場合も同じエラーかどうか ん?レポートファイルをxlsへ? "hoge_table" テーブルをxlsへの間違い? テーブルをcsv出力してxlsなら? とかいろいろ データが増えてリソース不足、ってのが一番考えられる理由だけど 何のリソースかはわからんが もうちょっと詳細なエラー内容ないのかね 今、先月のhoge_tableをoutoputしたらどうなの フォーム上でリストボックスを選択すると、その他のテキストボックスに値が入る仕組みってどうやったらできますか? Me.[その他のテキストボックス] = Me.[リストボックス].Value とか Me.[その他のテキストボックス] = Me.[リストボックス].Column(n) とかを リストボックス クリック時イベントに仕込む うろ覚え >>605 後者の場合で、表示させたデータを別のテーブルに保存させるにはどうすればいいですか? ワークテーブルに入れるなりしてSQLとか追加クエリとか >>604 リストボックスのコントロールソースをテキストボックスのコントロールソースにも指定 もしくは テキストボックスのコントロールソースにリストボックス自身を指定 リストボックスのみ編集可設定 ExcelのシートからADOでデータ取り込みをやろうとしてます ルックアップで別のテーブルを参照しているフィールドを持つテーブルにレコードを追加したいのですが 具体的にはExcelシートには都道府県名が文字列で入っていて Accessのテーブルは都道府県名は別テーブルを参照して数値で持っています 色々試してみたのですが 追加先テーブルの数値型のフィールドには数値しか入力できず 参照している先のテーブルの"東京都"などの文字列データはUpdateでエラーが出ます (あたりまえでしょうけど) こういった参照先データで入力したい場合 なにか良い方法があるのでしょうか? >>610 やっぱり それしか無いですかね 何万行もあったから データ入力する度に別テーブルのFindFirstとかやってID見つけるの コスト凄いかと思ってたんですが やってみたら それほど時間かからなかったです 都道府県名が入ってるシートって郵便番号のあれですかね まぁ質問の意味がよくわかんないから無視して結構です SQLでテキストデータを取り込む時、ヘッダー行を任意の位置で指定する事は出来ますか? 読み込もうとしているcsvファイルのヘッダー行が3行目なので、この位置から読み込ませたいのです。 色々調べたんですが、外部データベースを取り込む際のキーワードがなかなか出てこず苦戦しています。 開始行を含めるか含めないかしかなかった様に思う。 取り込んでしまってからヘッダー行を消すSQL実行したらはやいかも。 >>614 ありがとうございます。 HDR=Noか、もしくはVBAで処理する様にします。 SQLで質問ですが、 select * from DATATBL group by NAME こんな感じで集計させても結果が0になってしまうのですが、書式間違ってますか? ちなみにC++BuilderからMicrosoft.Jet.OLEDB.4.0でmdbファイル操作してます。 select NAME, COUNT(*) from DATATBL group by NAME >>617 返答ありがとうございます。 しかしながら selectでNAMEのみを指定すると項目が足らんみたいなエラーが出てしまいます。 select *, COUNT(*) from DATATBL group by NAME こうするとエラーは出ませんが、結果はやはり0になってしまいます >>617 すみません、他の箇所でエラーが出ていました。 正常にselectする事ができました。ありがとうございました。 またSQLで質問ですが、 DATEでソートしてからNAMEをグループ化したいので select NAME from (select * from TESTTABLE order by DATE) as group by NAME 上記のようにしたのですが結果が0になってしまいます。 何処が間違ってますか? GROUP BY 後の順序は保証されてなかったと思う 確実にやるならグループ化してからソート すみませんが教えて下さい。 Access2010でフォームにWebブラウザコントロールを張り、 Me![ScrollInfo].Navigate すみませんが教えて下さい。 Access2010でフォームにWebブラウザコントロールを張り、 Me![ScrollInfo].Navigate で正常にページが表示されています。 そのフォームを右クリックでデザインビューに切り替えると以下のエラーが出来ます。 StatusTextChange でエラーが発生しました(以下略) ちなみに×ボタンで普通に閉じるとこのエラーは発生しません。 Access2016でも同様でした。 ご存知の方がいらっしゃいましたらお願い致します。 sendobjectでレポートをPDFで添付して送ろうとすると 添付されたファイル名が・.pdfになるのは仕様ですかね? ACCESSとOutlookは2013です ただAccessのファイルはmdb形式 添付ファイルが"元となったレポート名".pdfになるのかと思っていたのだけど、違うのかなという疑問 通じないか…すまん Docmd.Sendobjectを使ってレポートをPDFに変換してメール送信したい 実行はできているが、変換されてメールに添付されたファイル名が・.pdfになってしまう。 これがなぜ・になるか知りたい。 レポートのオブジェクト名は・ではない。 日本語名がNGなのか? そう思うなら ASCII のファイル名とか UTF-8 のファイル名試してみれば? >>630 MIMEでiso-2022-jpとかにしてみ レポートの表題がファイル名になることがわかった。 レスくれた方ありがとう。 ?Eval("'山ー田' Like '*山田*'") -1 何で? Win7x64+Acs2010 >>634 そりゃ真ん中に入ってるからだと思うが。 -1はTrueだから一致することについて疑問に思ってるのでは >>634 Evalの引数が単なる文字列として認識されてるからかも ?Eval("山ー田" Like "*山田*") だと期待する結果になる すまん環境書き忘れた Win10 x64, Access2016 32bit 文字判定だから、アクセント無視で長音記号が無視されてるだけだと思ったけど ?Eval("'山xー田' Like '*山田*'") も-1だな ?Eval("'山ーx田' Like '*山田*'") は0だった 長音記号無視するルールになんかあるのかもしれん 利用環境 access2010 Windows7 上記環境で同時接続400人程度のファイルを作成しようとしています 管理者2〜3人が100〜1000件程度のレコードを編集しながら 400人程度が編集したレコードを参照。参照後に自動で既読フラグを access内のテーブルに入力する仕組みです 上記イメージで利用する場合、400人が同時に既読情報を DBに対して入力することになります。 (実際は入力するタイミングがずれるので同時編集は 多くて100人程度になりそうです) Accessは負荷に耐えきれるのでしょうか? 400人の既読情報を40個のテーブルに分割して リンクテーブルで負荷を分散させれば実用範囲になるのでしょうか? 社内セキュリティの制約でAccessしか利用が出来ない状態なので 他のツールを使用することは出来ないです お手数をおかけしますが、お分かりの方がいらっしゃれば ご教授をお願い致します 全員が同じaccess開くならやめとけ >400人の既読情報を40個のテーブルに分割して >リンクテーブルで負荷を分散させれば実用範囲になるのでしょうか? そこまで分けなくても テーブル専用mdbと参照専用mdbに分けて 参照専用mdbを400人全員ローカルに置く 参照専用mdbからテーブル専用mdbにリンクするだけでいいんじゃね >>641 そこまで社内セキュリティにうるさい会社で勝手にやっていい範囲のシステムだとも思えんけど >Windows7 この時点で、ライセンス違反の可能性が非常に高い おそらく同時接続制限もかかる フロントエンドはアクセスでもいいけど、どう考えてもバックエンドにまともなDB入れるべき てか利用者400人のシステムで「同時」書き込み100とかなかなか行かないけどな たぶんライセンス無視すれば>>642 のやり方で行けるだろ ほんとに同時書き込みが100あるならACCDBみたいなファイル共有型のDBじゃ無謀 >>642 返信ありがとうございます 「400人全員のローカルに参照専用ファイルを保存する」 ということが社内環境上、難しいです また、参照専用ファイルを修正して差し替える場合に 大変な労力がかかる可能性があるので、可能であれば 参照専用mdbを、共有サーバに配置して 400人で開いてもらい、テーブル専用mdbに対して 入出力する方法が取りたいです 400人で参照専用mdbを開くということは無謀でしょうか? >>643 返信ありがとうございます ライセンス違反の可能性は考慮していませんでした 調べて見ます 未読状態のものは赤表示にしようと考えている為、 テーブルから未読/既読状態のデータを読み取ることもあります 開いた瞬間に既読フラグを付けるだけのシンプルな入力なので 確かにおっしゃる通り100人で同時に書き込みがあることは ないですね。恐らく多くて20〜30だと推測します 参照専用mdbからテーブル専用mdbに入出力する場合は 「テーブルリンク機能を使う」ということでしょうか? 仕事中なので返信が遅くなってしまいます 申し訳ありません 未読とか既読フラグは400人全員が個別に持つんだろ? だったら400人分mdb持った方が多い日も安心 >>645 利用者各々が自分の既読が分かれば良いだけならそれで良いけど 管理者が誰が未読か知りたいとか既読者の一覧出せとかいう要件があると 結局既読フラグは集中管理する方が楽 まあどっちにしてもプログラム用のMDBは各ユーザに配るべきだが >400人で参照専用mdbを開くということは無謀でしょうか? アクセスのDBは基本的にはファイル共有で動作してる 共有サーバどうする気か知らんが、その共有サーバで実際に400人でファイル同時オープンしてみ それで問題なさそうなら真剣にmdb共有検討してみても良いかもしれん >>648 仰る通り、管理者用に作成しようとしているツールです ゆくゆくはアンケートを取るようにして、 400人のユーザの傾向分析などに使おうと思っています > アクセスのDBは基本的にはファイル共有で動作してる ファイル共有で動作している事で、同時に複数人で mdbを開くと負荷が大きくなるということでしょうか? > 共有サーバどうする気か知らんが、その共有サーバで実際に400人でファイル同時オープンしてみ この部分が最大のネックで、テストが出来ない環境なんです 社内セキュリティで制約厳しいのに 仕事中に2chで相談 阿呆らし アホじゃ無いよ、阿呆だよ >>649 mdbですよね? データ量にもよりますが同時セッションでせいぜい数人です 同時でないにせよ400人はAccessの要件じゃないです ほぼ確実にmdb壊れますよ >>652 ありがとうございます 同時にたくさんのユーザで開くことが現実的でないのであれば 下記方法を検討してみようと思います。 ・共有サーバーに起動用mdbを1個。参照用mdbを40個。テーブル専用mdbを7個設置。 ・全ユーザーは起動用mdbからIDによって振り分けられた参照用mdbに移動。 (400人に対して参照用mdb40個なので、 10人単位で参照用mdbを割り当てる) ・各参照用mdbからテーブル専用mdbに入出力を行う (既読フラグの入力。既読状態を読み取って参照用mdbの フォームに既読の表示をする) ヴァージョン管理は何が良いのかな? 実際に使っている人いますか? >>654 人の話を聞いていないように見えたのであれば謝罪します 申し訳ありません Accessで扱うには難しい案件だという事は分かりました その難しい環境下で、どうやったら実現出来るかが知りたいです >Accessで扱うには難しい案件だという事は分かりました 論点はそこじゃないよ >>657 「人の話を聞かないひとだな」「論点はそこじゃないよ」 論点はどこですか? >>653 色々アイデアを出されておりますが400人が接続する先は「テーブル専用mdb」ですから 仮に動作したとしてもクエリ1つ投げて戻ってくるのに数十秒かかる、という事態も想定されますよ どうしてもAccessで開発するのであれば バックエンドをSQL Serverなどにして「参照用mdb」を各クライアントに配布する形になります ファイルベースだとmdb以前に共有サーバの同時接続数も見積もらないといけないのでは 阿呆通り越して馬鹿か いかれてる 到底400人を超える社員を擁する企業の案件とも思えず(担当がこのレベルなんだし) じゃあ何だ?ゲームのなんちゃら?とも思えず、僕ちゃんAccessなら少しはお上手だから それで400人のお年寄りを騙す仕組みを思い付いたから構成教えて!なのか なんなんだ?こいつ ひつこいし そもそも誰もWin7の同時接続数制限とか突っ込まない件 652除く >>666 ライセンス違反じゃなくて、もともとできんのだよ。動的パッチでも当てないと。またレジストリをいじらないと実際にはその前に限界が来る。 わからないくせに出しゃばるなよ。 Accessから参照設定なしでExcelを起動し、種々作業を行うPGを作ってます。 その際、Excelの自作関数(Function)が使えんのですが、 良い方法がありましたらご教示お願いします。 追記です。 自作関数(Function)は、=SUMのように Excelシート上で使う関数です。 回答ありがとうございます。 いちおう参照設定してのテストも行ってますが、結果は同じでした。 なので困ってます。(;ω;) ちなみに参照設定しないのは、AccessでExcelを扱う際にやっかいとなる、 残プロセスを残さないためです。 じゃあ再定義しろ 中身はformulaでとって来れるだろ >>671 自作関数については分かりませんが > ちなみに参照設定しないのは、AccessでExcelを扱う際にやっかいとなる、 > 残プロセスを残さないためです。 参照設定(事前バインディング)はコンパイル最適化とコーディングをしやすくするのが主な目的です それが原因でプロセスが残る事は考えにくいです(そんな現象は見た事がない) 定番の「Excelオブジェクトを解放しきれていない」が原因ですよ えっ?使えるでしょ。 objExcel.WorksheetFunction.Sum(... ああ、自作関数だったか。 Application.Runじゃ出来なかったっけ? >>673 その通りなんですが… 参照設定しないのが一番簡単なので。。 みなさまありがとうございました。 自作関数は諦めて、標準の関数でなんとかしました。 記述はかなり冗長になりましたが… プロシージャ内でSQLを使用する際に、 SELECT [テーブル名].[フィールド名]… みたいな感じで、テーブルオブジェクト全てにカギ括弧をつけてるんですが、 みなさんはどうしてますか? フィールド名に全角英数字を使っている場合にカギ括弧を付けないと構文エラーになる まあ、普通はフィールド名に全角英数は付けないけどね。 お疲れさまです。 DoCmd.RunSQL で、select結果を表示する方法ってあります? 948 デフォルトの名無しさん sage 2017/03/22(水) 18:27:50.62 vhfzvoEm 少し調べればすぐ分かることなんだから 聞く前にまず自分で調べなよ 949 デフォルトの名無しさん sage 2017/03/22(水) 20:02:01.65 pQEBF+SX >>947 初心者のくせに欲張りだね君は 999 名前:本当にあった怖い名無し@無断転載は禁止 :2017/03/23(木) 04:44:44.44 ID:7MjKM4Gx0 てめえか? てめえかよ!え? その腐った根性! https://youtu.be/Dd9Xiqoehsc ・access2010 ・win7 ・共有サーバ上での利用 ・共有サーバにaccessで作成したスターターファイル.accdbとフロントエンドファイル.accdbがあります ・accessを開くと必ず上部に黄色のバーが表示されて 「コンテンツを有効化してください」が表示されます 上記環境での質問です 1,スターターファイルを開いて、フロントエンドファイルをvbaで共有サーバ上の別のフォルダにファイル名「a.accdb」としてコピー 2.vbaでコピーした「a.accdb」を起動 3.ユーザはマウス操作で「a.accdb」の「コンテンツを有効化」ボタンを押下 3の動作をした際に「a.accdb」が必ず自動で閉じられてしまいます 2回目の起動の際には「コンテンツを有効化してください」が有効になっている為、閉じられることはありません 何が原因で「a.accdb」が自動で閉じられているのでしょうか? またどうすれば閉じないように処理をすることが出来るのでしょうか? 恐れ入りますが、ご教示願います フロントエンドは各クライアントに置く 各クライアントにはRuntimeをインスコ その状況なら、いろいろ解説しているサイトがごまんと転がってる 鯖でアプリケーションサーバー機能を持たせてないなら 鯖上のアプリを起動しようとする意図が間違っている スターターは何だか判らん すみません、下記前提が抜けていました ・クライアント側はローカルへのデータ保存不可 ・クライアント端末にruntimeのインストール不可 スターターはクライアントが直接フロントエンドファイルを開かない(占有)しないようにする為のファイルです accessが閉じられてしまう原因が分かりました Sub test() Dim acApp As Access.Application Dim strDBPath As String strDBPath = "hogehoge\db1.MDB" Set acApp = New Access.Application acApp.OpenCurrentDatabase strDBPath End Sub プロシージャを抜けるとローカル変数の acAppが無効化されてしまう為に accessが閉じられていました グローバル変数としてacAppを宣言することによって 閉じられてしまう事は回避出来たのですが 同じプロシージャ内に「スターターを閉じる」命令を すると、コピーしたファイルまで閉じてしまいます 理想はスターターを起動後、 1.ファイルをコピー 2.コピーしたファイルを開く 3.スターターを閉じる を全て実行出来るようにしたいのですが、accessVBAでは 出来ないのでしょうか? >>692 環境とやりたい事が全く分からん >・クライアント端末にruntimeのインストール不可 当然ACCESSそのものもインストール不可なんだろうな その状態で、スターターやコピーしたaccdbは「誰が」「開く」んだ ふつうaccdbを開くというのはACCESS(ランタイム含む)で開くことだぞ クライアントにACCESS(ランタイム)インストール不可 ローカル(クライアント)にACCDBコピー不可 の環境で、ACCESSで作ったアプリ使おうとか俺なら無理って言って断るけど バッチファイルなら2行で出来る Copy A B B >>694 ありがとうございます 共有サーバ上にバッチファイルを置く事は出来ないので バッチファイルでの対応は検討していなかったんですが accessVBAでクライアントのローカルにバッチファイルを 生成して、それを実行した後にスターターファイル自身を 閉じれば想定通りの動作をするかもしれません! >>695 なあ、そのバッチファイルやVBAはいったいどこで実行する気なんだ? もうリモートでやれよ 後々のメンテ考えてもリモートのが百万倍楽だろ 何十時間費やしてご自慢の構成組み上げても、余人に理解できなきゃ ポンツコアプリに堕するだけ お前亡き後後輩がハゲあがるわ 今日びのクライアントマシンならストレスも少なくて済む性能持ってるし バッチは置けないけど鯖上でVBAならなんでもござれ ってのもな シンクライアントなら尚更リモートで発想してやるのが環境にやさしいってもんだ クライアントに インストールは駄目なのに バッチファイルは置いていい とかwwwwwwwww ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる