Access VBA 質問スレ Part2 (788レス)
Access VBA 質問スレ Part2 http://mevius.5ch.net/test/read.cgi/tech/1544620479/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
630: デフォルトの名無しさん [sage] 2023/05/10(水) 00:24:35.45 ID:qaMHPguU >>629 これがベストだね http://mevius.5ch.net/test/read.cgi/tech/1544620479/630
631: デフォルトの名無しさん [sage] 2023/05/12(金) 20:45:34.35 ID:nGf/Bj/G 流行りのChatGPTをACCESSで使えるようにしてみた BingやBardもレスポンス良く使えるようになったのであまり意味はなかったが面白かった VBAコードはChatGPTに書かせたのをほぼコピペで動くようにできた http://mevius.5ch.net/test/read.cgi/tech/1544620479/631
632: デフォルトの名無しさん [sage] 2023/05/13(土) 09:19:13.17 ID:uR6hVfud スレの意図を無視するがAccessは出来るだけVBA使わず作成する方がバージョンアップにも対応し易い http://mevius.5ch.net/test/read.cgi/tech/1544620479/632
633: デフォルトの名無しさん [sage] 2023/05/13(土) 13:15:28.85 ID:JkElVRfp お客様に納品するならそういう気遣いも要りますね 自家用なので気の済むまで作り込みます 自社の50人くらいが快適なように http://mevius.5ch.net/test/read.cgi/tech/1544620479/633
634: デフォルトの名無しさん [sage] 2023/05/13(土) 16:13:18.44 ID:74jfRr8+ どうした? 総合で同意が得られなかったから改めてコッチに書いたのか? Accessをインストールだけして使わないでいればバージョンアップもへったくれも無いから、そうした方がいいぞ? http://mevius.5ch.net/test/read.cgi/tech/1544620479/634
635: デフォルトの名無しさん [sage] 2023/05/14(日) 08:52:04.69 ID:UU9sI9hc Rubberduckは大きいデータベースだとパース中にエラーが出て使い物にならないねえ 数年前よりはるかにマシになったけど。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/635
636: デフォルトの名無しさん [sage] 2023/05/16(火) 21:12:36.24 ID:dmITDlP3 msgboxの戻り値を格納する変数の型をvbMsgboxResultにするかLongにするか悩んだので、 時間を計ろうと思って、古い本を引っ張り出して、二つを比較するプロシジャーを書いた。 ふと、全く同じテストをしたらどうなるのか気になったので、やってみたら、全く同じプロシジャー同士の比較なのに30%位スピードに差が出る。さっきやったら最大で37%速度差があった。 一方が速いこともあれば、もう一方が速いときもある。こんなのでスピード比較する意味あるのかなあ? 時間測定はGetTickCountを使って、変数宣言のみ100万回のループをするプロシジャーを100回呼び出すという感じ。 なんかいい測定方法ありますかね? http://mevius.5ch.net/test/read.cgi/tech/1544620479/636
637: デフォルトの名無しさん [sage] 2023/05/16(火) 21:52:45.08 ID:Mqz2m8JL timer使っても同じかな http://mevius.5ch.net/test/read.cgi/tech/1544620479/637
638: デフォルトの名無しさん [sage] 2023/05/17(水) 06:33:48.44 ID:AOXlzNDq timerが秒単位でGetTickCountはミリ秒単位と古い本に書いてあったなあ あと、timerはそれ自体の動作が遅いって書いてあった http://mevius.5ch.net/test/read.cgi/tech/1544620479/638
639: デフォルトの名無しさん [sage] 2023/05/18(木) 18:57:23.27 ID:8+QzSev9 ユーザーフォームが大きいんで下半分を隠す、上半分を隠す、という2つのコードを書きたいんです。下半分を隠す、はハイト プロパティを小さくすれば可能なんだけど、上半分を隠す、は不可能なんですかね。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/639
640: デフォルトの名無しさん [sage] 2023/05/18(木) 20:29:25.05 ID:FTp82+/Y >>639 何をやりたいのかイマイチ分からんけど、タブコントロールじゃだめなん? http://mevius.5ch.net/test/read.cgi/tech/1544620479/640
641: デフォルトの名無しさん [sage] 2023/05/18(木) 21:32:12.21 ID:UaeB70YO 上半分を隠したら×ボタン無くなってにっちもさっちも行かなくなるぞ http://mevius.5ch.net/test/read.cgi/tech/1544620479/641
642: デフォルトの名無しさん [sage] 2023/05/18(木) 21:36:12.00 ID:/q1eE0wB >>639 2つのフォームに分けたら良いと思うの http://mevius.5ch.net/test/read.cgi/tech/1544620479/642
643: デフォルトの名無しさん [sage] 2023/05/19(金) 21:09:14.22 ID:j+pEmA6B >>640 >>642 ありがとう。皆さんのアイデアをためします http://mevius.5ch.net/test/read.cgi/tech/1544620479/643
644: デフォルトの名無しさん [sage] 2023/05/23(火) 14:00:02.22 ID:MnQDcyxi 質問です。 Excelファイルを読み込んで、加工してからテーブルとして保持したいんですが、 Excelファイルのまま編集してinsertするのと、 一度テーブルとして読み込んでから編集してinsertするのはどちらが高速でしょうか? http://mevius.5ch.net/test/read.cgi/tech/1544620479/644
645: デフォルトの名無しさん [sage] 2023/05/23(火) 14:42:54.35 ID:3uLTyIP1 insert ? inport の手順なら下記リンク先を参考に https://hamachan.info/win8/access/import.html Excelファイルをリンクでもいけるし 同作業を何度も繰り返すとかでも、操作を保存しとけば楽だし データのボリューム次第とかマシンスペックとかも兼ね合いがあるから、どちらとも ウィザードの途中画面をよく見て、事前にExcel側を整えて置けば inport も楽だし 編集内容がより細かく設定できるのはExcelなのかAccessなのかを知る事でも、どちらの方法を採るかの判断になる http://mevius.5ch.net/test/read.cgi/tech/1544620479/645
646: デフォルトの名無しさん [sage] 2023/05/23(火) 15:03:14.67 ID:MnQDcyxi いろいろありがとございます、しかしimportではなくinsertです 内容を見て既存のテーブルに1行ずつinsert(もしくはupdate)していく形になります。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/646
647: デフォルトの名無しさん [sage] 2023/05/23(火) 15:26:17.99 ID:3uLTyIP1 んーと、Access側のテーブルはあくまでもデータストック用な立ち位置? 事前にExcelでの編集が伴うなら、Accessのテーブルとしてから編集するのはムダなような https://tonari-it.com/excel-vba-access-add-records/ コッチのが参考に成るかも 実行速度の検証もしてる様子 http://mevius.5ch.net/test/read.cgi/tech/1544620479/647
648: デフォルトの名無しさん [sage] 2023/05/23(火) 16:47:55.53 ID:MnQDcyxi ありがとうございます! いまさらっとですが見てみたところ、速度比較などもしていて参考になりそうです。 見てみます! 中間テーブルを作成してから編集した方がいいよ、という声を聞いたんですが いちいち使わないテーブルに投入する必要はないのでは?と思い質問いたしました。 事前編集方式でやってみます! http://mevius.5ch.net/test/read.cgi/tech/1544620479/648
649: デフォルトの名無しさん [sage] 2023/05/23(火) 18:12:18.40 ID:3uLTyIP1 Excelの元データと、何をどう編集したいかも判らないから、中間テーブルの必要性は当人しか判断不能 上でも書いたけど、編集内容がExcelの方が楽で早いのかAccessの方なのかでも手順は変わるような 速さを第一に求めているように読めるけど、「一行ずつ」って書かれた部分で「おや?」と スムースにデータを移行させるには、最初のリンク先の「データクレンジング」も読んでおいてもムダには成らない アチコチに目を配らなければならない様子でお疲れ でもそれがじぶんの糧に成る http://mevius.5ch.net/test/read.cgi/tech/1544620479/649
650: デフォルトの名無しさん [sage] 2023/05/24(水) 08:46:04.47 ID:AU7HKxhu >>644 ExcelインポートしてAccessで加工する方が速いよ ExcelでVBAでデータ加工するなんて愚の骨頂 http://mevius.5ch.net/test/read.cgi/tech/1544620479/650
651: デフォルトの名無しさん [sage] 2023/05/24(水) 10:26:10.15 ID:eouMPy16 みなさまいろいろありがとうございます 自分の説明不足&理解不足ですみません。 ACCESSに入っている一覧情報を定期的に更新しなければならず、 その更新情報がExcelで来るのでそれを読み込んで…とやる感じです。 ACCESS側で固有に更新している情報もあるのでまるっと上書きではなく、 一行ずつ確認して該当の列のみ追加や上書きをしなくてはいけません。 それを、いまはAccessVBA内でExcelファイルを開いて 一行ずつ読み込んで内容確認して内容によってSQL流して…とやっているのですが、 もしかしてExcelファイルを中間テーブルにimportしてから 操作した方が早いのかな??と悩んで書き込んだ次第です。 「ExcelインポートしてACCESSで加工」と言ってくださってるのは 後者の場合を指しているのですかね? 今はとりあえずサンプルを作って動かして比較しようかと思っています。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/651
652: デフォルトの名無しさん [sage] 2023/05/24(水) 10:50:21.63 ID:l+gVJ33A そういうことなら中間テーブルに取り込んで、テーブル同士の差分をチェックかな https://tasukete-access.com/2022/11/28/accessintro_table_comparison/ [フィールド単位での差分をチェックする] この方法のが近いのか http://mevius.5ch.net/test/read.cgi/tech/1544620479/652
653: デフォルトの名無しさん [sage] 2023/05/24(水) 23:16:20.24 ID:CzWxWRtY 返信遅れてすみません!ありがとうございます! こんなやり方ができるんですね! 全部SQL書こうと想ってましたがクエリで楽に作れるかもしれず嬉しいです。 参考に書いてみます、本当にありがとうございます! http://mevius.5ch.net/test/read.cgi/tech/1544620479/653
654: デフォルトの名無しさん [sage] 2023/05/26(金) 17:24:59.84 ID:sT8UcBqC 500以上のモジュールにOption Explicitが書いてない。 当然、宣言されていない変数が何百もある。 ここにOption Explicitを書くと、宣言されていない変数を見つけるたびにコンパイルが止まるので面倒。 一括して発見する方法を知ってる人いますか? VBEが発見できるので、その方法が分かればユーザにも分かるはずだと思うが、検索しても見つからない。 Cのコンパイラを自作する技術があれば、文法解析の手法が使えると思って調べたけど、全余暇時間をコンパイラ自作に割り当てても6ヶ月かかったと言ってる人がいて、踏み出せない。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/654
655: デフォルトの名無しさん [sage] 2023/05/26(金) 19:16:13.82 ID:+AT6wCCw こんなん見付からはりました https://stabucky.com/wp/archives/6297 実際に検証はしてないんで、自己責任 ←重要!! 現物mdb(そんなのはAccdbでは無くmdbだと勝手に決め付けてる)では無く、コピーしたファイルで 尚且つネットから切り離しスタンドアロンで、更に30秒後に発火するかも知れないので消火器用意してから 試してみてください 結果報告が期待されます VBE上でCtrl + Spaceで入力支援機能(サジェストっつーの?)を出して、いっこずつTABで拾いだす案を 提案しようと思いつつぐぐってたら出てきた代物 宣言してなかったら自動メンバー表示(どの名称が正式か知らん) にも出てこないのか!?と、ようやく気付いたレベルの人間のレスなので、眉唾しながら(若しくはスルー推奨) VBAでJavaScriptを使うには?という場合は : https://extan.jp/?p=10611 とか あと、『なお「unique」という自作の関数を使っています』とあるので、それも併せておかないと動作しないかも(きっと) http://mevius.5ch.net/test/read.cgi/tech/1544620479/655
656: デフォルトの名無しさん [sage] 2023/05/29(月) 16:07:15.09 ID:AvjLnKXj >>655 ありがとう。 少しずつ試してみます。 いろいろ調べて、いまはFlexとbisonという奴でもやってみたくなっています。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/656
657: デフォルトの名無しさん [sage] 2023/06/08(木) 22:05:58.45 ID:tPqYzYSn 配布したaccdbを365runtimeで動かしてて、今朝突然レポートが開かなくなった ほぼ午前中すったもんだして2013runtimeならレポートの印刷やプレビューが問題無い事がわかってruntime差し替えた こんな目にあったひと他にいない? http://mevius.5ch.net/test/read.cgi/tech/1544620479/657
658: デフォルトの名無しさん [sage] 2023/06/09(金) 03:25:01.10 ID:i6Y59lYy >>657 はい、います 365で突然、帳票の罫線が消えた事があります その時はAccessのバージョンを1つ前にロールバックして解決しました 方法は以下のURL参照 ■Office - Microsoft コミュニティ https://answers.microsoft.com/ja-jp/msoffice/forum/all/office/67665e18-c4c7-4c1c-b5d1-3ff6e6cd8334 今だと一つ前はバージョン 2304 (ビルド 16327.20248)ですかね それでダメならもう一つ前へ http://mevius.5ch.net/test/read.cgi/tech/1544620479/658
659: デフォルトの名無しさん [sage] 2023/06/09(金) 04:50:51.47 ID:uT9lsXlY ロールバック、覚えときます ありがとう http://mevius.5ch.net/test/read.cgi/tech/1544620479/659
660: デフォルトの名無しさん [sage] 2023/06/09(金) 12:36:00.93 ID:G8Vh+N8B それって、MSからバグフィックスや修正が為されたのを察知するにはどうしたらいい? ロールバックしっ放し? 勝手にアプデされてまだ直らなかったら二つ前にロールバック? ずっと修正されなかったらロールバックバックバックとかに成らん? http://mevius.5ch.net/test/read.cgi/tech/1544620479/660
661: デフォルトの名無しさん [sage] 2023/06/09(金) 16:09:51.45 ID:XhtkwaOO >>660 察知は毎月リリースページを確認していました バグが修正されるまでは Office の自動更新を止めます なのでロールバックは最初の1回だけです バグが修正されたら自動更新を有効に戻して最新版にする感じでした 更新は重大バグ修正の時のみ、原則自動更新は使わないという運用もあります これに関してはお客さん次第ですかね http://mevius.5ch.net/test/read.cgi/tech/1544620479/661
662: デフォルトの名無しさん [sage] 2023/06/09(金) 16:20:24.73 ID:G8Vh+N8B そうだよね 委託を請けてる業者さん目線だよね エンドのユーザーはそんなのに目を通さないしね 見てもどれが自分の不具合に当て嵌まるか解かり辛いしね じゃあ内製のユーザーはロールバックバックバックし続けるしか無いよね アプデを停め続けるひとも居るかも知らんけど、そうすると1年分とか溜まってそれはそれで地獄を見るしね やっぱこういう場所で症状とかを意見交換するのは貴重なんだ、と再認識 http://mevius.5ch.net/test/read.cgi/tech/1544620479/662
663: デフォルトの名無しさん [sage] 2023/06/09(金) 17:23:51.20 ID:XhtkwaOO >>662 はい、開発委託業者です 確かにエンドユーザーさんにリリースページは無縁ですよね 一応システム担当者さんにはお知らせしましたけど、こちらで随時チェックという感じでした また修正されてもリリースページに載らない細かい不具合修正も多いです レポートの罫線不具合はまさにそれでした ■最新チャネル リリースのリリース ノート - Office release notes | Microsoft Learn https://learn.microsoft.com/ja-jp/officeupdates/current-channel http://mevius.5ch.net/test/read.cgi/tech/1544620479/663
664: デフォルトの名無しさん [sage] 2023/06/10(土) 18:20:00.00 ID:u0MJNtiG あと、マクロだと screen.active.control とか出来ないよね http://mevius.5ch.net/test/read.cgi/tech/1544620479/664
665: 664 [sage] 2023/06/10(土) 18:20:16.44 ID:u0MJNtiG 誤爆 http://mevius.5ch.net/test/read.cgi/tech/1544620479/665
666: デフォルトの名無しさん [sage] 2023/06/11(日) 17:21:05.93 ID:/gnEKRu3 sleep をどんだけにするかどうやって決めるの? http://mevius.5ch.net/test/read.cgi/tech/1544620479/666
667: デフォルトの名無しさん [sage] 2023/06/13(火) 15:38:15.16 ID:bu7CkXDV VBAで自作のクラスモジュール作成したんですが、 それを引数で渡す関数の書き方がわかりません Sub test(ByVal hoge As Hoge) みたいな感じで書いたのですがうまくいきません。 (As Hogeが自動でAs hogeと変換されるし、エラーになります) どなたか教えていただけませんでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1544620479/667
668: デフォルトの名無しさん [sage] 2023/06/13(火) 19:34:42.68 ID:d6Pomi9y >>667 引数hogeに引っ張られるVBAの仕様です VBAでは変数にクラス名を使うのは避けた方が良いですよ プロジェクト内に変数hogeが存在している時も同様です http://mevius.5ch.net/test/read.cgi/tech/1544620479/668
669: デフォルトの名無しさん [sage] 2023/06/14(水) 11:24:04.63 ID:3Eu4F25u >>667 VBAでクラスモジュールなんて不要 http://mevius.5ch.net/test/read.cgi/tech/1544620479/669
670: デフォルトの名無しさん [sage] 2023/06/15(木) 16:26:17.40 ID:VlP0x+zk >>669 流石にそれはない。クラスモジュールがある方が便利だよ。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/670
671: デフォルトの名無しさん [sage] 2023/06/15(木) 19:09:52.15 ID:y9q9PTdn bindってのでクラスモジュールの有り難みを知りました http://mevius.5ch.net/test/read.cgi/tech/1544620479/671
672: デフォルトの名無しさん [sage] 2023/06/15(木) 20:42:35.42 ID:RAXKxz4R 俺もクラス使いたい派 保守性が全然違う http://mevius.5ch.net/test/read.cgi/tech/1544620479/672
673: デフォルトの名無しさん [sage] 2023/06/15(木) 22:46:38.48 ID:VlP0x+zk クラス使わないと同じようなコードが量産されて面倒くさすぎる http://mevius.5ch.net/test/read.cgi/tech/1544620479/673
674: デフォルトの名無しさん [sage] 2023/06/15(木) 22:47:32.53 ID:VlP0x+zk ただでさえポンコツな言語なんだから、クラスぐらい使おうよ。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/674
675: デフォルトの名無しさん [sage] 2023/06/16(金) 20:25:21.43 ID:cjNqE8A3 >>673 そのせいだったのか、クラス使えば良かった http://mevius.5ch.net/test/read.cgi/tech/1544620479/675
676: デフォルトの名無しさん [sage] 2023/06/21(水) 20:54:02.92 ID:b8UND1s3 ADOでCSVからテーブルを作ろうとしたらレコードが大きすぎますって怒られるんですよ! 1レコード2000バイトも無いのにですよ! 400列くらいあるのがダメなんですか? 2013なんですが。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/676
677: デフォルトの名無しさん [sage] 2023/06/21(水) 21:15:42.66 ID:gk5UG/Z5 フィールド数の上限は255だからかな http://mevius.5ch.net/test/read.cgi/tech/1544620479/677
678: デフォルトの名無しさん [sage] 2023/06/23(金) 13:04:47.47 ID:pHYUvccd フィールド数上限は実は罠 http://mevius.5ch.net/test/read.cgi/tech/1544620479/678
679: デフォルトの名無しさん [sage] 2023/06/23(金) 15:26:54.30 ID:X84KLwiQ 過去最大のフィールド数は500 テーブル分割して収納した http://mevius.5ch.net/test/read.cgi/tech/1544620479/679
680: デフォルトの名無しさん [sage] 2023/06/23(金) 15:42:34.83 ID:jhieer6M 分割したらフィールド数じゃないな http://mevius.5ch.net/test/read.cgi/tech/1544620479/680
681: デフォルトの名無しさん [sage] 2023/06/23(金) 16:07:44.83 ID:/GlO4XTI メモ型にコンマ付で格納 http://mevius.5ch.net/test/read.cgi/tech/1544620479/681
682: デフォルトの名無しさん [sage] 2023/06/24(土) 09:17:24.69 ID:5hQB8dV1 >>681 それに意味有るの? http://mevius.5ch.net/test/read.cgi/tech/1544620479/682
683: デフォルトの名無しさん [sage] 2023/06/26(月) 19:43:31.70 ID:nvUGoLmX Access2019でリボン非表示にするのは、どうするの? http://mevius.5ch.net/test/read.cgi/tech/1544620479/683
684: デフォルトの名無しさん [sage] 2023/06/26(月) 20:17:04.89 ID:nvUGoLmX >>683 細工されないようにXMLで記述したい http://mevius.5ch.net/test/read.cgi/tech/1544620479/684
685: デフォルトの名無しさん [sage] 2023/06/26(月) 21:25:45.94 ID:Ezf4n+79 XML??? VBAでなら DoCmd.ShowToolbar "Ribbon", acToolbarNo ってのがあるが http://mevius.5ch.net/test/read.cgi/tech/1544620479/685
686: デフォルトの名無しさん [sage] 2023/06/27(火) 08:56:44.60 ID:5UYjwK7S それだと使用者に解除されちゃうので、XMLで空のカスタムリボン作って、オプション→現在のデータベース→リボンとツールバーのオプションに設定したいんよ Access2019だとスクラッチからリボン作ってもファイルボタンが残っちゃうのが解ったので、それで我慢する http://mevius.5ch.net/test/read.cgi/tech/1544620479/686
687: デフォルトの名無しさん [sage] 2023/09/14(木) 09:18:05.95 ID:t/htNvkA サブフォームをもつフォームにおいて、 親フォーム側から Me.サブフォーム.Requery を実行すると、サブフォームのCurrentイベントが2回発生するんだけど、なんでなんだろ? http://mevius.5ch.net/test/read.cgi/tech/1544620479/687
688: デフォルトの名無しさん [sage] 2023/09/14(木) 10:41:11.21 ID:UPFEbPP4 大抵はそう組まれているからそう動作する 親フォームからひとつずつチェックしてみれば「あぁ、ここか」が出てきたりする http://mevius.5ch.net/test/read.cgi/tech/1544620479/688
689: デフォルトの名無しさん [sage] 2023/09/14(木) 10:50:23.10 ID:t/htNvkA >>688 検証のために、メインフォーム上ににサブフォームとサブフォームをRequeryさせるだけのボタンの最小限の構成にしても 687で書いた現象が発生している(サブフォーム側はCurrentイベントにdebug.printを書いただけ) 私は何か根本的な勘違いをしているのだろうか?それともAccessの仕様なのだろうか? http://mevius.5ch.net/test/read.cgi/tech/1544620479/689
690: デフォルトの名無しさん [sage] 2023/09/14(木) 12:58:11.51 ID:UPFEbPP4 フォームをデザインビューにした時に出て来るプロパティシート おおむかし、あの枠が狭くて知らぬ間に二行に記載していたことは稀によくあった Excelで言う、セル内改行をやってしまっていた 見た目はいっこなので気付きにくい 或いは、サブフォームをよりシンプルなものでテストするとか 仕様なら同様の質問疑問がてんこ盛りに投稿されるはず と思って探ってみたら、こんなのが・・ http://yamav102.cocolog-nifty.com/blog/2015/05/from_current-96.html これ系? http://mevius.5ch.net/test/read.cgi/tech/1544620479/690
691: デフォルトの名無しさん [sage] 2023/09/14(木) 13:40:41.27 ID:t/htNvkA >>690 サブフォームは新規作成した状態のものにCurrentイベントにdebug.print書いただけのものでも2回発生してるのよ 提示していただいたページはこちらで調べたときに見ていますが、そのページで書かれてるのは自分自身に対するRequeryのようなのでちょっと事情が違うようです frmMain ------------------ Option Compare Database Option Explicit Private Sub btnRequery_Click() Debug.Print "clicked ------" Me.frmSub.Requery Debug.Print "--------------" End Sub -------------------- frmSub -------------------- Option Compare Database Option Explicit Private Sub Form_Current() Debug.Print "frmSub Form_Current" End Sub --------------------- こんなかんじの検証用のを用意 http://mevius.5ch.net/test/read.cgi/tech/1544620479/691
692: デフォルトの名無しさん [sage] 2023/09/14(木) 13:41:20.11 ID:t/htNvkA んで、実行結果(イミディエイトウィンドウ)が clicked ------ frmSub Form_Current frmSub Form_Current -------------- http://mevius.5ch.net/test/read.cgi/tech/1544620479/692
693: デフォルトの名無しさん [sage] 2023/09/14(木) 14:52:05.24 ID:UPFEbPP4 イメージだけで応答してたから、どうにもとっ散らかってた 現物当たって真似してみた https://learn.microsoft.com/ja-jp/office/vba/api/access.form.current このイベントは、フォームが開いたときと、フォーカスがレコード間を移動したときの いずれの場合にも発生します。 複数回発生して当たり前だった Form_Load (読み込み時) 或いは Form_Abtivate (アクティブ時) に変えればおk どうしてもForm_Current (レコード移動時)に設定したい場合は見て見ぬ振りをするしか http://mevius.5ch.net/test/read.cgi/tech/1544620479/693
694: デフォルトの名無しさん [sage] 2023/09/14(木) 15:04:03.08 ID:t/htNvkA >>693 loadやactivateではrequery時にイベントが発生しないので、本来の目的を達成できません また、最初にフォームが開かれたときにはcurrentは一度しか発生していません http://mevius.5ch.net/test/read.cgi/tech/1544620479/694
695: デフォルトの名無しさん [sage] 2023/09/14(木) 16:54:04.40 ID:UPFEbPP4 btnRequery をクリックしても Requery できない?という意味? Me.frmSub.Requery を Me!frmSub.Form.Requery にしてみては? Me. か Me! かでも変わって来るし、.Form を付ける付けないでも挙動が変わったような あと、frmMain を開いただけでも frmSub Form_Current が発生するのも違う気がするし frmMain でパラメータ変えて frmSub を Requery させたいとかなら https://teratail.com/questions/123328 このhatenaさんの回答を参考にしてみたり Docmd.Requery でやっつけてみたり Requeryの使い方もクセがあるので切磋琢磨が 必要だったり http://mevius.5ch.net/test/read.cgi/tech/1544620479/695
696: デフォルトの名無しさん [sage] 2023/09/14(木) 17:08:38.96 ID:t/htNvkA >>695 frmSubはfrmMainに貼り付けられているのでfrmMainを開くと当然frmSubも開かれるので、 Open, Load, Current等のイベントはひととおり発生します(仕様通り) これについては特に問題ではありません 問題にしているのはbtnRequeryをクリックしたときに、Me.frmSub.Requeryを一度しか呼んでいないのに frmSubのCurrentイベントが二度発生していることです 紹介いただいたteratailのページを参考にあれこれ試してみたいと思います http://mevius.5ch.net/test/read.cgi/tech/1544620479/696
697: デフォルトの名無しさん [sage] 2023/09/14(木) 21:20:00.47 ID:dY8DD9uu AccessにGROUP_CONCATみたいなのなかった? http://mevius.5ch.net/test/read.cgi/tech/1544620479/697
698: デフォルトの名無しさん [sage] 2023/09/14(木) 23:10:56.65 ID:kQn+Df7T サブフォームのレコードソースにテーブル指定して >>691 やってもカレントは一回しか表示されんけどな レコードソース無ければ2回カレントは表示される サブフォームにレコードソース指定してる? http://mevius.5ch.net/test/read.cgi/tech/1544620479/698
699: デフォルトの名無しさん [sage] 2023/09/15(金) 08:38:48.79 ID:cxAk3WqI >>698 たしかにレコードソースはしていしていません なるほど理由はよく分からないけれど、原因は分りました ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1544620479/699
700: デフォルトの名無しさん [sage] 2023/10/03(火) 11:54:07.91 ID:BE4+HOMv ちょっと不思議な話 よくある数値の切捨て処理のfunctionとして Function RoundDownDec(decNum as Currency, intPlace as Integer) as Currency RoundDownDec = Fix(decNum * 10 ^ intPlace) / 10 ^ intPlace End Function 処理したいデータの都合で与える数値も戻り値も十進型としています (正負の処理などは今回の本題から外れるので例からは省いています) RoundDownDec(33.6, 2) としたときに、33.6が返ってくるのを期待しますが33.59が返ってきます 不思議! functionの中身を Dim tmp As Currency tmp = Fix(decNum * 10 ^ intPlace) Debug.Print tmp RoundDownDec = tmp / 10 ^ intPlace と段階を踏ませるとイミディエイトウィンドウに3359が出るので更に tmp = decNum * 10 ^ intPlace tmp = Fix(tmp) と分解すると、期待通りの結果(33.6)が得られます Fix()の引数はdoubleなんで、暗黙的な型変換が行われているせいなんだろうけれど、微妙に納得がいかない不思議な話でした http://mevius.5ch.net/test/read.cgi/tech/1544620479/700
701: デフォルトの名無しさん [sage] 2023/10/03(火) 11:59:45.89 ID:BE4+HOMv ちなみに蛇足ですが、普通に Function RoundDown(dblNum As Double, intPlace As Integer) As Double とdoubleを引数にした場合は、特別なことをしなくても RoundDown(33.6, 2) の結果は33.6となります http://mevius.5ch.net/test/read.cgi/tech/1544620479/701
702: デフォルトの名無しさん [] 2023/10/04(水) 10:07:17.16 ID:e9fui2Qq 浮動小数点を経由するので誤差から免れることはできません(以下はイミディエイト ウィンドウでの実行と結果) ? Fix(33.6 * 10 ^ 2), Fix(33.6@ * 10 ^ 2), Fix(33.6! * 10 ^ 2) 3360 3359 3359 単精度でも同様 ? Fix(33.6@ * 10 ^ 2) / 100, Fix(CCur(33.6@ * 10 ^ 2)) / 100, Fix(33.6@ * 100) / 100 33.59 33.6 33.6 べき乗を使うことが誤差を生む原因の一部でもあったりするので、CCur()で一度補正?したりで影響を減らすとかも考えられます。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/702
703: デフォルトの名無しさん [sage] 2023/10/04(水) 10:57:33.10 ID:95ZKO4kH 検証ありがとうございます 浮動小数点を経由するので誤差がでるのは理屈としては理解できるのですが、 わざわざ十進型を使ってるのに…というのや、Fix()に渡される式の結果ではなく、 渡された段階で暗黙的な型変換が行われているっぽいのが腑に落ちなさの一因なのでしょう http://mevius.5ch.net/test/read.cgi/tech/1544620479/703
704: デフォルトの名無しさん [] 2023/10/04(水) 14:52:16.68 ID:e9fui2Qq ? Fix(33.6@ * 10 ^ 2) , Fix(33.6@ * 100) 3359 3360 の結果からもわかるように、今回の場合は 10 ^ 2 の値が浮動小数点であり ≠100 である ということです なので「33.6@ * 浮動小数点」は33.6@を浮動小数点として計算する(はず)ので、その結果が 許容できない値になってしまったと 対策として CCur(33.6@ * 10 ^ 2)で本来の値に近くなるように書きましたが、 べき乗の部分を一度整数変数に代入してから「33.6@ * 整数変数」の形にしてもいいと思います(未検証) この場合、通貨型は内部整数 * 整数なのでここまでの計算結果に誤差はでません。(乗数マイナスは別) RoundDownDec()を大量に使用する場合はパフォーマンスも考慮しないといけませんが、乗数を整数変数経由に する方が CCur()関数使うより早いのではと思います(昔、関数使うと遅いなと思った経験)。 100万回くらい(適当)ループして検証してみてください。 http://mevius.5ch.net/test/read.cgi/tech/1544620479/704
705: デフォルトの名無しさん [sage] 2023/10/04(水) 15:22:35.37 ID:95ZKO4kH 更なる解説ありがとうございます ? TypeName(10^2) Double 正直これは盲点でした 原因がはっきりわかりすっきりしました ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1544620479/705
706: デフォルトの名無しさん [sage] 2023/10/04(水) 21:35:38.35 ID:GiHPLbjK VBAの内部計算につかう型は結構複雑な変換をする 33.6@ * 整数変数の結果は、Currency型だぜ 多くの関数や演算子で、より精度の高い型を使おうとするんだが、べき乗はDoubleしか返さん仕様っぽいな 自分でCurrencyかDecimalでべき乗する関数作れば解決 http://mevius.5ch.net/test/read.cgi/tech/1544620479/706
707: デフォルトの名無しさん [sage] 2023/10/04(水) 23:36:55.88 ID:hn2MViTp OpenArgsってなんて読んでますか? 何の単語の略なんでしょうか ご存じのかた教えてください http://mevius.5ch.net/test/read.cgi/tech/1544620479/707
708: デフォルトの名無しさん [sage] 2023/10/05(木) 01:14:56.61 ID:6f6nA7M7 >>706 CurrencyかDecimalでべき乗する関数ってどのような? http://mevius.5ch.net/test/read.cgi/tech/1544620479/708
709: デフォルトの名無しさん [sage] 2023/10/05(木) 04:00:15.23 ID:xIPl72Do >>708 こまかい条件省くとこんな感じじゃね Function pow(x As Currency, y As Integer) As Variant Dim i As Integer Dim ret As Variant ret = CDec(x) For i = 1 To y - 1 ret = ret * CDec(x) Next pow = ret End Function Decimalは直接定義できないからVariantで宣言してる http://mevius.5ch.net/test/read.cgi/tech/1544620479/709
710: デフォルトの名無しさん [sage] 2023/10/05(木) 04:05:04.32 ID:xIPl72Do >>707 おーぷんあーぎゅめんつ argsはargumentsの略 引数 http://mevius.5ch.net/test/read.cgi/tech/1544620479/710
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 78 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s