ALL Program Selenium VBA

【VBA×Selenium】オブジェクト変数がカラの時にスキップする方法

VBASeleniumを使っていますが、オブジェクト変数が カラだった場合、処理をスキップする方法はありますか?
 

こんな疑問に回答します。

 

オブジェクト変数がカラだった場合とは?(問題点の確認)

本記事の読者の皆様は、プログラミング知見が高いと思いますので、
初歩的なところはショートカットして説明していきますね
(要望あればTwitterで「@nkmr_dai」向けに質問なげてくださいませ。回答できなかったら、申し訳ないですが。。。)

ということで、まずは、以下のコードをベースに説明します。

わざわざオブジェクト変数に入れてClickをさせてるのは謎ですが、お許しください。笑
Nakamura
 
 

はい。

ということで、もし仮に 該当のXPathが存在しなかった場合
obj.click()」の実行時、VBA側ではエラーになります。

これは当然のことで、オブジェクト変数に未格納な状態でClickメソッドを実行すると、
「何を押せばいいんですか?」とプログラム側で判断不可となるためエラーとなるわけです。
Nakamura
 

では、どうすれば良いの?ということを説明していきます。

 

オブジェクト変数がカラの時の戻り値は?(問題の理解)

この問題を解決するためには、オブジェクト変数が カラだった時の戻り値を知る必要があります。

結論、オブジェクト変数何も無い時戻り値は「Nothing」となります。

たまにVBAを触ると、オブジェクト変数がカラ=Nothing になること忘れちゃうんですよね。
Nakamura

はい。

ここまでで、カンが良い人は 解決方法は分かってしまってるかと思いますが、
Nothing」が戻り値であることが分かれば、IF文で分岐を作ってあげれば解消できますね。

前段で紹介したコードを元に、対象のXPathの有無で 処理が分岐する方法を 次段では説明していきますね。

 

オブジェクト変数がカラの時にスキップする方法(解決方法)

既に IF文で解決できると、前段で説明していますが、改めて。

 

結論、IF文でNothingの時は処理をスキップするようにコーディングしてあげれば解決します。

 

前段の説明用に紹介したコードを元に、コーディングすると以下の通り。

分かりやすく理解するために「obj = nothing」を条件分岐にしています。

一応、コード上にコメントを入れてますので、
そちらを一読してもらえれば、「そんなもんね」と理解できるかと思います。

上記のコードを理解できれば、もっとスリムなコーディングもできますので、次段で紹介しますね。
Nakamura
 

参考:もうちょっとスリムにコーディングしたい

もうちょっとスリムに 条件分岐を コーディングしたい人向けのコーディング方法も紹介します。

 

ちょっとだけ解説すると、
If obj = nothing then は、「空である場合に、正の処理してね。」となります。
この場合、空であるときは処理をスキップしたいため、Elseで追加コードを記載する必要があるわけです。

 

一方、今回のスリム化したコードでは
If Not(obj = nothing) then は、「空でない場合に、正の処理してね。」となります。
この場合、Elseを使わずに、そのまま コーディングすれば良いため、視認性が良くなります。

まぁ筆者は、プログラムはとりあえず動けば良いと思っている人間なので、自分が理解しやすいコーディング方法で使用すれば良いと思います。この辺は、好みの問題だと思うんで。
Nakamura
 
 

おわりに

今回はここまでとなります。

VBA × Selenium のネタでしたが、どちらかというとVBA寄りの話でしたね。

ただ個人的には、Seleniumの戻り値を1つとってもGoogle検索で中々出てこなかったりしたので
今回の記事作成に至っていたりします。

今後も、VBA×Seleniumに関する、実際に直面した問題などをネタに記事作成して参りますので、
NakamuraBlogをどうぞよろしくお願いします。(主に自分の備忘止めブログになっていますが。)

ここまでお読みいただきありがとうございました。

少しでも あなたが ストレスレスなSeleniumライフを送れることを筆者を心より祈っております。

以上、おわりです。

 




-ALL, Program, Selenium, VBA
-, ,