Access VBA 質問スレ Part1

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん2012/02/06(月) 22:53:46.88
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

850デフォルトの名無しさん2018/02/07(水) 11:19:44.29ID:mhmm9auu
医療過誤?

851デフォルトの名無しさん2018/04/14(土) 12:06:32.62ID:bV7+SAsd
すみません質問させてください。

Private Sub Form_Load()
  Me.TimerInterval = 1000
End Sub

Sub Form_Timer()
  Static intShowPicture As Integer
  If intShowPicture Then
    Me.btnPicture.Picture = "C:\taiyo.jpg"
  Else
    Me!btnPicture.Picture = ""
  End If
  intShowPicture = Not intShowPicture
End Sub

このコードは何をしているのでしょうか?
ご回答よろしくお願いします。

852デフォルトの名無しさん2018/04/14(土) 12:24:03.37ID:2RkkR2xg
一秒毎に画像を出したり引っ込めたり

8538532018/04/14(土) 12:53:27.07ID:bV7+SAsd
ご回答ありがとう御座います。
イメージはなんとなく掴めたのですが、
この場合のintShowPictureには何が格納されているのでしょうか?
もしくはBoolean型なのでしょうか?

854デフォルトの名無しさん2018/04/14(土) 16:08:38.27ID:1T8oabCl
Static intShowPicture As Boolean
にして試してみろよ

855デフォルトの名無しさん2018/04/14(土) 19:25:20.18ID:cGW/rI9o
VBAには暗黙の変換ってのがあるから
IntegerをBooleanに暗黙的に変換して評価してる

まあ、あまり良いコードじゃないな

856851,8532018/04/14(土) 21:39:02.03ID:criYFAGW
>>852さん
試しに、フォームと画像を用意して作ったら、点滅しました!
>>854さん
この文でも点滅しました!
>>855さん
Falseが0でTrueが-1なのですね!

ご回答ありがとうございました。
解決しました!

857デフォルトの名無しさん2018/04/15(日) 10:38:49.74ID:E1b18XLI
>Falseが0でTrueが-1なのですね!

そうだっけ?

858デフォルトの名無しさん2018/04/15(日) 12:40:33.57ID:VXOW+WoG
Access で画像を点滅する?

そんなの普通は、JavaScript, jQuery とかだろ

859デフォルトの名無しさん2018/04/15(日) 22:05:01.30ID:4uH7KTiu
ここは Access の質問スレですよ

860デフォルトの名無しさん2018/04/21(土) 00:22:50.08ID:IpoNn3EX
10万件以上の大量レコードを追加するインサート処理をクエリを作成してDocmd.OpenQueryでやっているが時間が1分以上かかる
この処理をモジュールにADO、もしくはDAOでインサート処理を記述したら、Docmd.OpenQueryより早くなるかな?

861デフォルトの名無しさん2018/04/21(土) 12:05:09.74ID:M/Q9a6+d
VBAで書くと数倍遅くなるんじゃね?
Cからなら速いかも知れん

862デフォルトの名無しさん2018/04/21(土) 14:39:22.47ID:JSWmVJf3
たぶんクエリのほうが遥かに速い

863デフォルトの名無しさん2018/04/21(土) 16:21:47.73ID:Zke6MJB8
OpenQueryをCから実行

864デフォルトの名無しさん2018/04/21(土) 17:48:56.41ID:e0mRRnZY
BULK INSERT は?

そもそも、INSERT文は速くならない!

865デフォルトの名無しさん2018/04/22(日) 14:54:13.01ID:QBM3hGX3
10万が大量かどうかという問題も有るがRecordset + AddNewの方が速いと聞いたし、実際俺が組んだ場合も明らかに早いんだが。

状況にもよるかもしれんけど。

866デフォルトの名無しさん2018/04/23(月) 02:01:29.71ID:zWK+uIrS
そもそもOpenQueryでどんなクエリ流してインサートしてるかわからんのに比較にならんわ

867デフォルトの名無しさん2018/04/23(月) 02:08:10.01ID:zWK+uIrS
>>865
例えば単純な追加クエリや、INSERT SELECTするSQL発行するより
1件ずつAddNewして(どこかから値持ってきて)1カラムずつ値セットするほうが早いっての?
どこで聞いた話だそれ?

868デフォルトの名無しさん2018/04/23(月) 09:13:20.51ID:/uUuSWda
やってみてから言ってくれ。
俺の場合は実際早かった。

俺の場合は1カラムずつじゃなくてフィ―ルド名の配列と値の配列でAddNewだけど、たぶん1カラムずつセットしてUpdateでも早いんじゃないかな。

869デフォルトの名無しさん2018/04/23(月) 09:41:02.27ID:Yo1LL5su
そんなあほな

870デフォルトの名無しさん2018/04/23(月) 15:45:02.07ID:YMq7Ch8w
SQLでもINSERT一回じゃなくて1行のINSERTを何度も繰り返したら遅くなるからな
それと比べるなよ

871デフォルトの名無しさん2018/04/23(月) 17:22:09.14ID:zWK+uIrS
>>868
やってみるから、フィールド数、フィールド長とレコード数教えれ
あと配列のデータどう用意するのかと、比較するクエリの元データどうすのかも

とうぜんACCESSと対象DBエンジンとADOかDAOのバージョンも明示してくれよ

で、ループまわして1レコードずつ.AddNewして.Updateするんだな


これでほんとにVBAが速いならちょっとACCESS使うの考えるわ

872デフォルトの名無しさん2018/04/25(水) 22:44:48.30ID:dGu0vJMQ
>>870
そんな低レベルの話はしとらん。

>>871
たぶんフィールドは40~50ぐらいじゃね?
レコードは200万ぐらい。
リモートでOracleに接続してる。
JOINで20個位のテーブル繋げてるな。
ADO使ってる。

パススルーのSELECTクエリ+INSERTじゃ永遠に終わらない感じが20分程度で取得出来るようになった。

「access insert addnew 速度」でクグってみればけっこうAddNewの方が早い話が見つかるぞ。

873デフォルトの名無しさん2018/04/26(木) 20:39:25.51ID:/vLmdzNr
だからどこからどうやって元データ取ってきてるんだと
リンクテーブルやリモートDBでADOの方が早いとかなら別に驚くに値せんけどな

というかお前らOpenQueryってレコード数分実行する前提で話してたのか?

874デフォルトの名無しさん2018/04/27(金) 17:07:36.05ID:ash3pEtl
パススルーωとか使っちゃいけないTOP3じゃないか
素直にリンクテーブルにすれば良いのに

875デフォルトの名無しさん2018/04/27(金) 23:22:48.36ID:jiI6PjPI
パススルーって駄目なの?
リンクテーブルは話にならないくらい遅くてパススルーのが全然早かったんだが。

876デフォルトの名無しさん2018/04/28(土) 15:07:07.82ID:6AYZ4JmZ
ケースバイケース
たいていの場合、リンクテーブルに対する操作よりはSQL飛ばすほうが早いとは思うけどな
パススルーが使っちゃいけないTOP3とか初めて聞いたわ

877デフォルトの名無しさん2018/05/09(水) 09:34:09.66ID:OAputzVD
keydownイベントからのキー取得ではなくて、
OnKeyDownイベントからキーを取得する方法がわかりません。
Me("テキストボックス"& i).OnKeyDown = "=get_Key(" & this? & ")"
ご教授お願いします。

878>>8772018/05/09(水) 17:09:04.61ID:OAputzVD
レスが付かないので別の掲示板に移動します。

879デフォルトの名無しさん2018/05/11(金) 06:01:03.99ID:sj29e99C
>>877
OnKeyDownイベントを知らなくてすまん。

880デフォルトの名無しさん2018/05/11(金) 09:03:43.55ID:hWQk+urq
Excel で JavaScript も扱える様になるらしいね

881デフォルトの名無しさん2018/05/16(水) 14:07:17.01ID:aP5Z4SKQ
業務用mdbのコードを見てて気づいたんだけど、戻り値を使わないのに、functionを作成しているのが非常に多い。
どんなメリット、デメリットがあるのですか?戻り値用の変数を用意するから速度が低下するのが問題なんですか?

英語の本には
>>Many programmers think that they must return something, even if they have to make some artificial return code or status. This practice can make your code harder for others to understand.
て書いてあってヤメレって書いてあるのになんでやりまくるのですかね?

882デフォルトの名無しさん2018/05/16(水) 14:57:23.49ID:Ml4MG34X
subの代わりにしてんじゃないの

883デフォルトの名無しさん2018/05/16(水) 18:06:12.59ID:xULU+qSI
>>881
しまった戻り値無いfunction俺も作ってた
動くから別にいいやって感じだった

884デフォルトの名無しさん2018/05/16(水) 19:24:53.85ID:DzLb+Dky
業務でプログラム組むような場合は、コーディングスタイルが指定されてる事が多いんだよ

正確には戻り値のないFunctiionじゃなくて、戻り値を無視してるだけだけどな

885デフォルトの名無しさん2018/05/16(水) 20:47:56.46ID:xULU+qSI
functionとsubはcallが要るかどうかの違いだと思ってた。

886デフォルトの名無しさん2018/05/16(水) 23:07:53.34ID:aP5Z4SKQ
可読性が低下する以外のデメリットは無いんでしょうかね?
個人的には出番のない変数は目障りなんですけどね。

887デフォルトの名無しさん2018/05/17(木) 00:12:37.33ID:e2hshpiX
呼び出しネストの限界がFunctionのほうが浅いってデメリットがあるはず
呼び出しに必要なスタック領域が違うから
昔だれかが実測してたな。まあ再帰でよっぽどのことやらんと問題ないんじゃね

SubをFunctionにして可読性が落ちるとか、それ関数の命名に問題がある気がするがな

888デフォルトの名無しさん2018/05/17(木) 08:14:31.45ID:JDzFkPHQ
戻り値ある前提で組んでるんでしょ。
エラー処理等で単に関数が失敗か成功かを返すとか。
後で作ろうとしてたけどグダグダになって無しになっちゃうとか。

889デフォルトの名無しさん2018/05/17(木) 11:23:10.83ID:eM4CBQj1
後でやろうとしてやめちゃうってのは非常に大変頻繁によくあることだからね。

890デフォルトの名無しさん2018/05/17(木) 12:28:55.01ID:HY+Xmele
>>881
呼び出し側でいちいち call 書くの面倒だから

891デフォルトの名無しさん2018/05/17(木) 13:35:45.45ID:vSfZvvAw
>>890
FunctionもSubもCallを書かなくても呼び出せすので、理由にならないと思います。
個人的には、Callが書いてないと唐突に見慣れない文が出現するので驚いちゃいます。馴れれば、労力の軽減になるのかな?

892デフォルトの名無しさん2018/05/17(木) 13:53:44.02ID:HY+Xmele
call 書かないと () 付かないだろ
() 付かないから知らない文が出て来たと思ってしまう
() 付ければ関数だと判るが call 書かないといけないって話

893デフォルトの名無しさん2018/05/17(木) 15:12:43.90ID:vSfZvvAw
>>892
済みません。よくわかりませんのでかみ砕いておしてもらえますか?
Callと括弧がペアで必要なのは理解しています。
もちろん、CALLなし、括弧なしでFunctionもSubも呼び出せるのも知っています。
両者の呼び出しの記法が全く同じで、唯一の例外が
lngSum=AddNumbers(10,20)
等の場合ということも知っています。

894デフォルトの名無しさん2018/05/17(木) 15:32:30.96ID:vSfZvvAw
>>884
こんな感じですかね?
SUBは使わないのが基本?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47673&forum=36
↑でも結局解決していませんね。

895デフォルトの名無しさん2018/05/17(木) 17:22:26.67ID:eM4CBQj1
つい全文読んじゃったよ
いろんな考えの人がいるんだね

896デフォルトの名無しさん2018/05/19(土) 13:29:25.00ID:CLRFNNLm
>>893
えっcallなしで呼び出せるの?知らない事がたくさんあるなあ

897デフォルトの名無しさん2018/05/19(土) 13:36:56.85ID:hVWJ7ayQ
>>896
英語の本にはちゃんと書いてあるんですよね。私はVBSの本で知りました。

898デフォルトの名無しさん2018/05/23(水) 19:16:19.68ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

BHZ67

899デフォルトの名無しさん2018/05/24(木) 10:37:30.53ID:cPlRxlDn
BHZ67

900デフォルトの名無しさん2018/05/24(木) 21:31:25.23ID:fKzQ9ZgX
ありがとう、僕も幸せになります

新着レスの表示
レス数が900を超えています。1000を超えると表示できなくなるよ。
レスを投稿する