Access VBA 質問スレ Part2 (788レス)
上下前次1-新
669(1): 2023/06/14(水)11:24 ID:3Eu4F25u(1) AAS
>>667
VBAでクラスモジュールなんて不要
670: 2023/06/15(木)16:26 ID:VlP0x+zk(1/3) AAS
>>669
流石にそれはない。クラスモジュールがある方が便利だよ。
671: 2023/06/15(木)19:09 ID:y9q9PTdn(1) AAS
bindってのでクラスモジュールの有り難みを知りました
672: 2023/06/15(木)20:42 ID:RAXKxz4R(1) AAS
俺もクラス使いたい派
保守性が全然違う
673(1): 2023/06/15(木)22:46 ID:VlP0x+zk(2/3) AAS
クラス使わないと同じようなコードが量産されて面倒くさすぎる
674: 2023/06/15(木)22:47 ID:VlP0x+zk(3/3) AAS
ただでさえポンコツな言語なんだから、クラスぐらい使おうよ。
675: 2023/06/16(金)20:25 ID:cjNqE8A3(1) AAS
>>673
そのせいだったのか、クラス使えば良かった
676: 2023/06/21(水)20:54 ID:b8UND1s3(1) AAS
ADOでCSVからテーブルを作ろうとしたらレコードが大きすぎますって怒られるんですよ!
1レコード2000バイトも無いのにですよ!
400列くらいあるのがダメなんですか?
2013なんですが。
677: 2023/06/21(水)21:15 ID:gk5UG/Z5(1) AAS
フィールド数の上限は255だからかな
678: 2023/06/23(金)13:04 ID:pHYUvccd(1) AAS
フィールド数上限は実は罠
679: 2023/06/23(金)15:26 ID:X84KLwiQ(1) AAS
過去最大のフィールド数は500
テーブル分割して収納した
680: 2023/06/23(金)15:42 ID:jhieer6M(1) AAS
分割したらフィールド数じゃないな
681(1): 2023/06/23(金)16:07 ID:/GlO4XTI(1) AAS
メモ型にコンマ付で格納
682: 2023/06/24(土)09:17 ID:5hQB8dV1(1) AAS
>>681
それに意味有るの?
683(1): 2023/06/26(月)19:43 ID:nvUGoLmX(1/2) AAS
Access2019でリボン非表示にするのは、どうするの?
684: 2023/06/26(月)20:17 ID:nvUGoLmX(2/2) AAS
>>683
細工されないようにXMLで記述したい
685: 2023/06/26(月)21:25 ID:Ezf4n+79(1) AAS
XML???
VBAでなら
DoCmd.ShowToolbar "Ribbon", acToolbarNo
ってのがあるが
686: 2023/06/27(火)08:56 ID:5UYjwK7S(1) AAS
それだと使用者に解除されちゃうので、XMLで空のカスタムリボン作って、オプション→現在のデータベース→リボンとツールバーのオプションに設定したいんよ
Access2019だとスクラッチからリボン作ってもファイルボタンが残っちゃうのが解ったので、それで我慢する
687: 2023/09/14(木)09:18 ID:t/htNvkA(1/6) AAS
サブフォームをもつフォームにおいて、
親フォーム側から
Me.サブフォーム.Requery
を実行すると、サブフォームのCurrentイベントが2回発生するんだけど、なんでなんだろ?
688(1): 2023/09/14(木)10:41 ID:UPFEbPP4(1/4) AAS
大抵はそう組まれているからそう動作する
親フォームからひとつずつチェックしてみれば「あぁ、ここか」が出てきたりする
689: 2023/09/14(木)10:50 ID:t/htNvkA(2/6) AAS
>>688
検証のために、メインフォーム上ににサブフォームとサブフォームをRequeryさせるだけのボタンの最小限の構成にしても
687で書いた現象が発生している(サブフォーム側はCurrentイベントにdebug.printを書いただけ)
私は何か根本的な勘違いをしているのだろうか?それともAccessの仕様なのだろうか?
690(1): 2023/09/14(木)12:58 ID:UPFEbPP4(2/4) AAS
フォームをデザインビューにした時に出て来るプロパティシート
おおむかし、あの枠が狭くて知らぬ間に二行に記載していたことは稀によくあった
Excelで言う、セル内改行をやってしまっていた 見た目はいっこなので気付きにくい
或いは、サブフォームをよりシンプルなものでテストするとか
仕様なら同様の質問疑問がてんこ盛りに投稿されるはず
と思って探ってみたら、こんなのが・・
外部リンク[html]:yamav102.cocolog-nifty.com これ系?
691(1): 2023/09/14(木)13:40 ID:t/htNvkA(3/6) AAS
>>690
サブフォームは新規作成した状態のものにCurrentイベントにdebug.print書いただけのものでも2回発生してるのよ
提示していただいたページはこちらで調べたときに見ていますが、そのページで書かれてるのは自分自身に対するRequeryのようなのでちょっと事情が違うようです
frmMain
------------------
Option Compare Database
Option Explicit
省15
692: 2023/09/14(木)13:41 ID:t/htNvkA(4/6) AAS
んで、実行結果(イミディエイトウィンドウ)が
clicked ------
frmSub Form_Current
frmSub Form_Current
--------------
693(1): 2023/09/14(木)14:52 ID:UPFEbPP4(3/4) AAS
イメージだけで応答してたから、どうにもとっ散らかってた 現物当たって真似してみた
外部リンク:learn.microsoft.com
このイベントは、フォームが開いたときと、フォーカスがレコード間を移動したときの
いずれの場合にも発生します。
複数回発生して当たり前だった
Form_Load (読み込み時) 或いは Form_Abtivate (アクティブ時) に変えればおk
どうしてもForm_Current (レコード移動時)に設定したい場合は見て見ぬ振りをするしか
694: 2023/09/14(木)15:04 ID:t/htNvkA(5/6) AAS
>>693
loadやactivateではrequery時にイベントが発生しないので、本来の目的を達成できません
また、最初にフォームが開かれたときにはcurrentは一度しか発生していません
695(1): 2023/09/14(木)16:54 ID:UPFEbPP4(4/4) AAS
btnRequery をクリックしても Requery できない?という意味?
Me.frmSub.Requery を Me!frmSub.Form.Requery にしてみては?
Me. か Me! かでも変わって来るし、.Form を付ける付けないでも挙動が変わったような
あと、frmMain を開いただけでも frmSub Form_Current が発生するのも違う気がするし
frmMain でパラメータ変えて frmSub を Requery させたいとかなら
外部リンク:teratail.com このhatenaさんの回答を参考にしてみたり
Docmd.Requery でやっつけてみたり Requeryの使い方もクセがあるので切磋琢磨が
省1
696: 2023/09/14(木)17:08 ID:t/htNvkA(6/6) AAS
>>695
frmSubはfrmMainに貼り付けられているのでfrmMainを開くと当然frmSubも開かれるので、
Open, Load, Current等のイベントはひととおり発生します(仕様通り)
これについては特に問題ではありません
問題にしているのはbtnRequeryをクリックしたときに、Me.frmSub.Requeryを一度しか呼んでいないのに
frmSubのCurrentイベントが二度発生していることです
紹介いただいたteratailのページを参考にあれこれ試してみたいと思います
697: 2023/09/14(木)21:20 ID:dY8DD9uu(1) AAS
AccessにGROUP_CONCATみたいなのなかった?
698(1): 2023/09/14(木)23:10 ID:kQn+Df7T(1) AAS
サブフォームのレコードソースにテーブル指定して >>691 やってもカレントは一回しか表示されんけどな
レコードソース無ければ2回カレントは表示される
サブフォームにレコードソース指定してる?
699: 2023/09/15(金)08:38 ID:cxAk3WqI(1) AAS
>>698
たしかにレコードソースはしていしていません
なるほど理由はよく分からないけれど、原因は分りました
ありがとうございます
700: 2023/10/03(火)11:54 ID:BE4+HOMv(1/2) AAS
ちょっと不思議な話
よくある数値の切捨て処理のfunctionとして
Function RoundDownDec(decNum as Currency, intPlace as Integer) as Currency
RoundDownDec = Fix(decNum * 10 ^ intPlace) / 10 ^ intPlace
End Function
処理したいデータの都合で与える数値も戻り値も十進型としています
(正負の処理などは今回の本題から外れるので例からは省いています)
省12
701: 2023/10/03(火)11:59 ID:BE4+HOMv(2/2) AAS
ちなみに蛇足ですが、普通に
Function RoundDown(dblNum As Double, intPlace As Integer) As Double
とdoubleを引数にした場合は、特別なことをしなくても RoundDown(33.6, 2) の結果は33.6となります
702: 2023/10/04(水)10:07 ID:e9fui2Qq(1/2) AAS
浮動小数点を経由するので誤差から免れることはできません(以下はイミディエイト ウィンドウでの実行と結果)
? 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()で一度補正?したりで影響を減らすとかも考えられます。
703: 2023/10/04(水)10:57 ID:95ZKO4kH(1/2) AAS
検証ありがとうございます
浮動小数点を経由するので誤差がでるのは理屈としては理解できるのですが、
わざわざ十進型を使ってるのに…というのや、Fix()に渡される式の結果ではなく、
渡された段階で暗黙的な型変換が行われているっぽいのが腑に落ちなさの一因なのでしょう
704: 2023/10/04(水)14:52 ID:e9fui2Qq(2/2) AAS
? Fix(33.6@ * 10 ^ 2) , Fix(33.6@ * 100)
3359 3360
の結果からもわかるように、今回の場合は 10 ^ 2 の値が浮動小数点であり ≠100 である
ということです
なので「33.6@ * 浮動小数点」は33.6@を浮動小数点として計算する(はず)ので、その結果が
許容できない値になってしまったと
対策として CCur(33.6@ * 10 ^ 2)で本来の値に近くなるように書きましたが、
省5
705: 2023/10/04(水)15:22 ID:95ZKO4kH(2/2) AAS
更なる解説ありがとうございます
? TypeName(10^2)
Double
正直これは盲点でした
原因がはっきりわかりすっきりしました
ありがとうございます
706(1): 2023/10/04(水)21:35 ID:GiHPLbjK(1) AAS
VBAの内部計算につかう型は結構複雑な変換をする
33.6@ * 整数変数の結果は、Currency型だぜ
多くの関数や演算子で、より精度の高い型を使おうとするんだが、べき乗はDoubleしか返さん仕様っぽいな
自分でCurrencyかDecimalでべき乗する関数作れば解決
707(1): 2023/10/04(水)23:36 ID:hn2MViTp(1) AAS
OpenArgsってなんて読んでますか?
何の単語の略なんでしょうか
ご存じのかた教えてください
708(1): 2023/10/05(木)01:14 ID:6f6nA7M7(1) AAS
>>706
CurrencyかDecimalでべき乗する関数ってどのような?
709(1): 2023/10/05(木)04:00 ID:xIPl72Do(1/2) AAS
>>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
省5
710: 2023/10/05(木)04:05 ID:xIPl72Do(2/2) AAS
>>707
おーぷんあーぎゅめんつ
argsはargumentsの略 引数
711: 2023/10/05(木)18:08 ID:dRlX4TIE(1) AAS
>>709
そんな低レベルな関数書いて「解決っ」とか言っちゃって時点でバカにも程がある
712: 2024/03/24(日)13:50 ID:6zfiQZRE(1/2) AAS
業務用のmdbがポンコツコードだらけなので書き換えてるんだけど、IIFが最大4個ネストしてあった。
4個ネストしてあるのは変数の値の判定が条件になっているけど、3個以下のは関数を呼び出している。
皆さんだったらどうします?
713: 2024/03/24(日)19:36 ID:S7ogYjm0(1) AAS
将来も含めてどのレベルの人がメンテしていくかだろうな
ソースの書き方も人それぞれ
例えばコメントの書き方でも、巷では行間に書くのが多いが、私は画面内に一度に表示できるロジックの行数減って見通し悪くなるから、行末側に書きたい
画面も横長だし
とか厳密に書き方決めないと人それぞれになってしまうのよね
ネストの段数にしても固定してしまうと、ムダに外出ししてしまうとかもあったり
ソースを見やすくするか、コメントで逃げるとかはもうコーティング規則にするか、それしないなら担当者判断でしかない
省1
714(2): 2024/03/24(日)22:33 ID:6zfiQZRE(2/2) AAS
とりあえず、測定用の簡単なVBAを作って、IIFのネストがどのくらい遅いのか確かめてみます。
変数の値の判定くらいなら差はほとんどないという記事を読んだことがあります。しかし、関数呼び出しをするとかなり違うという記事も読んだことがあります。
なので、呼び出された関数が10個、さらにそれぞれの関数が10個の関数を呼び出すようなコードでも書いて調べてみます。
昔Ken Getzの本を何冊か読んだ記憶ではOptimizationの章では揃ってIIfを避けるように書いてありましたね。
715(1): 2024/03/25(月)10:06 ID:wTe6l7XU(1/2) AAS
>>714
あぁ、それなら全ての条件を評価する(初期の判定で達しないとこも)から、遅くはなる
そういう弊害があるから一律使わなくするなんてことは、あったりするだろうね
そういうの見ると「はぁ⤵」って思うけど
716(1): 2024/03/25(月)15:11 ID:wTe6l7XU(2/2) AAS
>>715
ちなみにif~thenも全判定なので、iif禁止で問題解決になるわけでもない
717: 2024/03/26(火)00:35 ID:YALkMi+F(1) AAS
>>714
Access のIIFの問題は判定結果に関わらず
TrueパートとFalseパートの両方が評価(関数なら実行)されてしまう仕様
a = IIF(True, funcA, funcB)
funcAだけでなくfuncBもコールされる
aにはfuncAの戻り値が入る
関数の実装内容によってはパフォーマンスに影響が出るでしょうね
省1
718(1): 2024/03/26(火)12:43 ID:H7z+7I0f(1) AAS
>>716
if thenが全判定てなにを言っているんだ
andとorがショートサーキット演算しないだけだぞ
基本vbaはショートサーキットしない
例外はif関数ぐらいか
719: 2024/03/26(火)13:57 ID:kj3sgFU0(1) AAS
>>718
日本語理解できない、省略を補完する知識もないシナのアホが飛来したな
720(1): 2024/03/27(水)13:19 ID:BmA2tbQj(1) AAS
Select CaseはTrueが出たところで打ち切るからTrueになりそうな条件を上の方に書くべきて読んだことがあるなあ
721(1): 2024/04/19(金)10:08 ID:uD5nyH4z(1) AAS
>>720
普通の人間ならそうなるだろ?
レアパターンを先に評価するやつなんて変わり者
722(1): 2024/04/19(金)11:20 ID:TeTgAng2(1) AAS
>>721
1、2、3……順とかにするのは普通
頻度順にまではしないことも多々ある
723(1): 2024/04/25(木)00:00 ID:SJJcBnEk(1) AAS
>>722
マジックナンバーかよw
724: 2024/04/25(木)00:18 ID:9pftPPPG(1) AAS
>>723
┐(´ー`)┌
725: 2024/05/07(火)09:19 ID:dcFbjZui(1) AAS
MT4かよ
726: 2024/05/26(日)18:34 ID:TVlTpabA(1) AAS
FileSystemObjectのDeleteFolderかFolder.Delete使うと
対象フォルダーにシンボリックリンクやジャンクションあると
リンクじゃなく参照先が削除されるから気を付けた方が良いよ
定期的に掃除するログやバックアップフォルダーに
大事なフォルダーへのリンクなんか悪戯で作成されると消えちゃう
仕込まれた日と削除される日に時間差があるので追跡難しい
Defenderも気付いてくれない
省1
727: 2024/06/19(水)13:39 ID:Z4GWURaA(1) AAS
恐ろしい
そんな罠が
最近fsoの方使ってるから気をつけなければ
情報thx
728: 2024/06/21(金)17:49 ID:97rAWOJS(1) AAS
kill のが一般的だと思ってたが、そんなことは無かったのか
シンボリックリンクやジャンクション(つまりショートカット?)とかがある場合の挙動は知らないけど
比べた人が居て、ほぼおなじ動作なら kill のが楽だと
外部リンク:www.limecode.jp
729: 2024/06/21(金)18:18 ID:JmSRYM7J(1) AAS
削除の差異は意識してなかったからよくわからんけど、ファイルやフォルダの扱いがfsoの方が書きやすい、わかりやすいでこっち使い始めたかな…
再帰とかfsoの方が書きやすい(ソースがシンプル)はず…
730(1): 2024/06/21(金)21:19 ID:jAZYV/Wx(1) AAS
BASICはOSだからな
731: 2024/06/22(土)08:54 ID:wHSF3406(1) AAS
違うか フォルダの中に拡張子.lnk があるかどうか事前にチェックするべきか(他の対象外のファイルとかも
DeleteFolder や RmDir だと無条件で削除してしまうからキケンがあぶないってことか
キャベツを包丁で切ったら青虫まで一緒に切り刻んでしまいました
あらかじめ葉をむしって洗ってから切りましょう みたいなことだろうな
732: 2024/06/22(土)11:29 ID:n6A/NZx5(1) AAS
チェックするの面倒だから豆腐切れない斬鉄剣で切るんじゃないの?
733: 2024/06/22(土)11:47 ID:R3uDiOs/(1) AAS
rm -rf /
734: 2024/06/22(土)13:28 ID:AjNB02TK(1) AAS
NG🚮
735: 2024/06/22(土)13:38 ID:o/eWDsQ7(1) AAS
どっちかというとやばいのは
rm -rf *
の方だったかな
736: 2024/06/24(月)00:37 ID:sso3G8sO(1) AAS
>>730
それはBASICインタプリタが起動しているだけ
737: 2024/06/24(月)15:47 ID:W/0xkGee(1) AAS
Accessに限らんじゃん Word でも Excel でもてことだよな
Excel連中に知られたら、阿鼻叫喚の世界だな あいつら節操無いし
738: 2024/06/24(月)16:26 ID:F40a+XEU(1) AAS
知らなくても知ってたといいはるからなw
逆に知らなかったことにすることあるわ
森は大切に育てないとな
739: 2024/10/01(火)09:21 ID:TDdMwhQJ(1) AAS
Conpact & Repairを内部からVBAで命令しようと思ってAIに訊きながら何時間も格闘したあとにググったらできないことが判明した。
Claude3.5とGemini Proがここまで馬鹿とは。
何度も提案してくるけどシンタックスエラー出しまくるし。基本構文すら間違えるようでは人間プログラマーはまだまだ安泰だね。
740: 2024/12/03(火)11:46 ID:dxkeCahd(1/2) AAS
ファイルメニューのオプションで、閉じるときに最適化する を選んでおくだけでいいような
これをチェックしないまま使い続けて「壊れた」とか「容量が」とか大騒ぎする方々が多い気がする
気がするだけだけど ×Conpact ○Compact
741: 2024/12/03(火)14:00 ID:En2cnAMO(1) AAS
毎回圧縮してたらすぐ壊れるよ
742: 2024/12/03(火)16:54 ID:dxkeCahd(2/2) AAS
数十社(延べ数百台)の業務アプリこなして来たけど、そんな事例は一件たりとも経験していない
じぶんが開発用とか運用テスト用とかで仕立てて来たマシンでも、そんな事態に陥った経験は無い
圧縮と書いているけど、最適化を指定しておけば修復もするはず 修復できたものは壊れたとは呼ばない
それでも尚壊れたというなら、お作法に則って無い制作物だったとかなのかも知れない
少なくとも「すぐ壊れる」事態には陥らない
開発途中で、試行錯誤を重ねてあれこれ試してしまった ←ようなケースでも、その作業の途中で
手動で最適化する、或いは一旦閉じて最適化をさせるだけで悲劇からは回避できる
743(1): 2024/12/03(火)21:02 ID:BzSKhMhy(1) AAS
中身全部別ファイルにコピーしないと、なんて事も珍しくはないけどね
744: 2024/12/04(水)00:01 ID:hze6J6h6(1/2) AAS
運用中に壊れたことないけど、昔は開発中に度々壊れてた(壊してた)な…
昼と夜にバックアップしてた懐かしい思い出w
745: 2024/12/04(水)11:09 ID:oDv/ROvl(1) AAS
Accessが安定したのは2000くらいからだよ
746: 2024/12/04(水)11:12 ID:HphOCGl2(1) AAS
>>743
最適化は全部別ファイルにコピーしているよ
747: 2024/12/04(水)17:06 ID:ZnmFvaLG(1) AAS
ニホンゴムツカシイネ
最適化の最中は隠しファイル作ってソッチにコピーした後圧縮して、完了したら元ファイルに上書きしてる
てことを言いたいのだろうが
(おれは)最適化(したファイル)は全部別ファイルに・・とも読めて、一瞬「無駄だろ?」とか思った
748: 2024/12/04(水)20:59 ID:hze6J6h6(2/2) AAS
日本語プロパティになった時は、なんて事しやがるねんて思った
特定文字列がうまく認識されなかったり(T_T)
初心者にはわかりやすかったけれども
749: 03/28(金)20:56 ID:DlL+MxYf(1) AAS
ACCESSには散々、世話になったがもう要らないんでvisual studioにレポートとサブフォームの機能だけ移行して亡くなっていいよ
上下前次1-新書関写板覧索設栞歴
あと 39 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.029s