• ベストアンサー

vbaで出来る事をわざわざAPIを使う理由・必要性

vbaで出来る事をわざわざAPIを使う理由・必要性は? 他人が作ったエクセルファイルを操作しているのですが ところどころにAPIが使われています。 しかし、「なぜvbaでできるのにAPIを使ってるのだろう?」と思う部分があります。 例えば、 時間を止め対場合、 vbaで Sub vba() Application.Wait Now + TimeSerial(0, 0, 2) End Sub とすればいいのに、 APIで Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub API() Sleep 2000 End Sub としています。 APIを使う事によって、どのようなメリットがあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

APIについては・・・ 訳も分からず使用してアプリやOSを気絶させるのが得意ですが (*_*) Excel にはApplication.Wait メソッド がありますが Access にはこれに相当するモノがありませんので 止む無く API のSleep を使用せざるを得ません。 (Form のタイマーイベントでも出来なくはないけど使いづらい) そうすると、アプリケーションの壁を越えて使用できる Sleep を・・ となるのは自然な流れです。 また、Application.Wait は無駄に CPU を使用します。 タスクマネージャを立ち上げて、CPU使用率を比べてみてください。 いまは、マルチコアが当たり前の時代になっていますから あまり問題にはなりませんが、 昔はシングルコアだったので、長い待ち時間だと 他のアプリケーションが足を引っ張られてしまいます。 この辺も Sleep が選ばれる理由です。

JOZCNEYGQSEO
質問者

お礼

>Excel にはApplication.Wait メソッド がありますが Access にはこれに相当するモノがありませんので 止む無く API のSleep を使用せざるを得ません。 これは自分もよくやります。 時間を止める時は エクセル→Application.Wait メソッド アクセス→API にしています。 CPUの使用率にも違いがあるのですか。 気にしてませんでした。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

TimeSerialとSleepの使い分けは、 時間制御を1秒単位でするか、0.001秒単位でするかの違いです。 2秒と2,000m秒は同値ですから、どちらでもOK 単なる趣味の問題です。

JOZCNEYGQSEO
質問者

お礼

APIを使う事に意味があったのですね。 そういう細かな部分も気にしてみます。

すると、全ての回答が全文表示されます。
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

> APIを使う事によって、どのようなメリットが 「おれはAPIも使えるんだぜ」アピール かな^^; と言うか、可読性を上げることを目的の一つに挙げるならば、 解る人であれば、メンテナンスや引継ぎが少々楽である、ってことが一番だと思います。 もう一つは、作った人が作った当時、 「これはAPIじゃないと出来ない」と思っていた可能性。 おそらく、コレが想定し得る一番の可能性じゃないでしょうか。 VBAのコード進行だけ見ていても、 「あれ?ココってもっと簡単に書けない?」 「ココはこうしたらもっと早いのに」 と思うことも多いですからね。 この辺りは、好みの問題でしょうけどね^^;

JOZCNEYGQSEO
質問者

お礼

>「おれはAPIも使えるんだぜ」アピール あー、わからなくもないですが笑 APIを使った方がメンテナンスが楽なのですか? 他人のコードを見るともっと楽な方法があるのに! と思う事がありますね。(自分も思われてるんでしょうけど)

すると、全ての回答が全文表示されます。

関連するQ&A