[[20180623235213]] 『VBAでIEのボタンを点滅させる方法を教えてくださax(かず) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでIEのボタンを点滅させる方法を教えてください』(かず)

VBAで会社のWebページでの操作を行わせるマクロ
を作成しています
デモンストレーションとしてボタンを押す操作の前に
ボタンを点滅させたいと思っています

元々のページでボタンがマウスオーバー時に色が変わ
るなど二設定されていれば以下のようなテクニックも利用
できると知りましたが、私の対象とするページのボタンは
以下のようにはなっていません。

下記のようにマウスオーバーした時のgif がsrc タグで
取得できない時にも、ボタンの背景色やフォントを変える
javascriptの設定を変える?などで、何らかのことはできないで
しょうか? 

下記のような方法以外で。ボタンを点滅近い効果を出す
方法をご存知の方がいましたらぜひ教えて下さい。

<div class="search-btn">

  <imput> type="image" src"http://略/orange.gif"(A) onmouseover="this.src='http://略/orange_over.gif'" (B)
 ・・・略
  onmouse="this.src='http://略/form.gif'" /></div>

のような状況の場合

Const Src1 As String = "http:// (A)
Const Src2 As String = "http:// (B)


Set Doc = IE.object

For i = 1 to10

     For  Each objTag In Doc.getElementsByTagName("input")
            With objTag
                    On Error Resume Next               
                          If.  .src = Src1 Then
                                .src = Src2
                                sleep 200
                                .src = Src1
                                sleep 200
                                Exit For
                         End If     
                    On Error GoTo 0
            End With
     Next 
Next i 
 (出典 Excel VBAでIEを思いのままに操作できるプログラミング術)

< 使用 Excel:Excel2016、使用 OS:Windows7 >


晒すようなことでもないんでしょうけど気になったので
 [[20180623235213]]『VBAでIEのボタンを点滅させる方法を教えてください』(かず)
 [[20180620030304]]『VBAでIE制御しダウンロードし開いたExcelブックをVBAから扱いたい』(かず)
 [[20180619011814]]『IE制御で画面遷移のイベント待受けについて』
 [[20180421102416]]『Excel VBAでIE制御の際、文字列をShift-JISからUTF-8に変換したい』

この辺の質問を拝見していると、ほぼ【エクセル】と関係なくなっているような。
単純にVBA使ってIE制御したいだけなら、この掲示板じゃないような気がします。
(だからといって紹介してくれといわれても思いつかないのですが・・・)
(もこな2) 2018/06/24(日) 00:14


もこな2さん

 いつもご支援頂いていて有難うございます
 私の意見は以下です

 この掲示板でもキーワードIEで全文検索すると自分の
 投稿も含めて100件ほどの投稿があります。
  
 既にIE制御はエクセル/VBA利用の重要なトピックでは
 ないでしょうか?この点がそもそも認識のずれでしょうか

 具体的に私の場合、
 ・IEで取得した情報をダウンロードしてダウンロード
 ・文字列の正規表現でExcel内データを編集
 ・Outlookの添付ファイルに添付して送信
  といった処理をしようとしていてIE制御はその前段です。
  上記が特に特殊な例なのかは、客観的にどうなのか不明です
  IE制御だけ特別扱いにすることなの?と思います 

  いずれにしても上記のことをやり遂げるには、大元のエクセル
  やVBAに詳しい方のノウハウをお借りすることが必須と思って
  います

  具体例
 ・IEから「ダウンロードの通知バー」を制御して入手したファイル名が
  「固定文字列+日付時刻.xls」となっていてファイル名が事前にわか
  らない。
 ・cFiles = Split(CreateObject("WScript.Shell").Exec("CMD /C DIR /A:-D/B/S """ & cPath & "*.xls | SORT /r""").StdOut().ReadAll(), vbNewLine)

 といったDOSコマンドを利用して、ファイル名を取得しています。

 このDOSコマンドは確か???さんから教えて頂きました。こういったノウハウ
 をこの掲示板で教えて頂けるのでこの掲示板を利用させて頂いています。
 
 エクセルやVBAについて教えて頂いたノウハウをどんどん吸収して
 自分のやりたいことの中でベールとして活用して、できることの
 幅を広げていけるといいなと私は考えています。
 
 掲示板を見られている初心者の方が、せっかく教えて頂いたエクセルやVBA
 の技を自分なりに活用してできるように、いろいろな応用についてもあげて
 できることの幅を広げられるように利用していただく方がこの掲示板の価値
 が高まるのではと思います

 以上 

(かず) 2018/06/24(日) 08:48


 >下記のようにマウスオーバーした時のgif がsrc タグで 
 >取得できない時にも、ボタンの背景色やフォントを変える 

 当該ボタンにsrc属性が無いんですか?(無いとボタン画像が出ないと思うんですが・・余り詳しくないですけど・・)

 あるなら、サンプルコードと同じ要領で

 Const Src1 As String = "本物"  (A) 
 Const Src2 As String = ""      (B) Dummy

 とすればいいんじゃないですか?

 直ぐ「Exit For」しないで、4,5回ループさせれば、
 消えたり、現れたりで、点滅風になりますけど。

(半平太) 2018/06/24(日) 10:29


単なるわたしの考えですので参考程度で。

>既にIE制御はエクセル/VBA利用の重要なトピックでは
>ないでしょうか?この点がそもそも認識のずれでしょうか

たとえば、IE制御をして得られた結果をさらにエクセルで加工したいっていうのであれば話はわかるのですが、単純にIE制御だけしたいのであれば、エクセル経由にする関係ないじゃんとおもうってことです。

例にあげられたものも、元トピックに目を通してないのでわかりませんけど、
 ・IEで取得した情報をダウンロードしてダウンロード   ←IE制御
 ・文字列の正規表現でExcel内データを編集        ←Excel内データってなんだろう
 ・Outlookの添付ファイルに添付して送信         ←Outllokの制御(何を添付するんだろう)
なので、エクセルがどこに関係してるのかはよくわかりません。
たとえば、2番目がテキストファイルの操作をしてるだけなら、それこそエクセル関係ないですし
3番目がメールアドレスなどのリストがエクセル側にあるなら、そこがエクセルを使ってる部分ということだとおもいます。

もし、上記のとおりなら、エクセルにあるリストに沿ってoutllokでメール送付したいって質問になるんじゃないかと・・・

まぁ、エクセルと関係ない質問しちゃダメってことでもないですが、一応、「エクセル」の質問掲示板なのでエクセルと関係ない部分はなかなか回答つかないんじゃないかな〜なんて勝手に心配してるだけなので、私の意見はあんまり参考にならないかもです。
スレ汚し失礼しました。
(もこな2) 2018/06/24(日) 15:30


もこな2さん
 
 もこなさんの「エクセルと関係する」の範囲が「VBAでの処理」をどこまで
 なのか不明です。 

 >単純にIE制御だけしたいのであれば、
  そうではないでと申し上げています。

 >なので、エクセルがどこに関係してるのかはよくわかりません。

   ダウンロードしたファイルの名前が不定で、間接的に扱うのに
  VBAでのDOSコマンドを活用させてもらっています
  
 >エクセルにあるリストに沿ってoutllokでメール送付したいって質問になるんじゃないかと・・・ 
  そういう理解もあると思いますが、私の場合はいろいろとややこしいんで
  エクセルとVBAの機能をいろいろ使っています

  ・あるWebページからIEでExcelデータをダウンロードして、そのデータを正規表現
  でマッチングして、次に検索するデータを作成
  ・そのデータを別のWebページでに入力してメールアドレスを取得、
  ・コレクションでメールアドレスの重複を排除
  ・Outlookでメールに添付するファイルが列数が多いので見やすく
   作成したリストの重要な情報を見やすくするのにgroup化したりウィンドウ枠
   の固定を使ったりしています
  ・メールを送信したらイベント拾って、メール本文と添付ファイル
   を送信データを保存するフォルダにコピーし、別のExcelに送信者と
   メールタイトルなど一覧表の台帳に記録し台帳から保存フォルダにハイパーリン
   クを設定
  
  といった感じです
  これらの機能の大元は すべてエクセルの機能で それをVBAで実現している
  だけです。
  人それぞれいろいろな目的で「エクセル」やVBAの機能を活用していると思います
  ので、多様なトピックを認める考え方もあっていいのでは というのが私の考え方
  です。

  以上
(かず) 2018/06/24(日) 22:55


>デモンストレーション
なら、そのボタンの画面上の位置は特定できますよね?
どうせ、ボタンも押すのでしょうから、
APIのSetCursorPos でボタンの辺りをウロウロさせれば良いのでは無いでしょうか?
カーソルを見せたくなかったらカーソルを変えてしまえば良いと思います。

(kazuo) 2018/06/24(日) 23:25


Kanzoさん

  コメント有難うございます。なるほどそんなAPIもあるんですね。
  理想は目立つようにしたいんです

半平太さん 
  コメント有難うございます
  返信遅くなりました。
  >当該ボタンにsrc属性が無いんですか?
  >(無いとボタン画像が出ないと思うんですが・・余り詳しくないですけど・・)

    当該HTML調べたのですが src属性はなく入れ替えるgifはないのです
 
自己研究
   https://www.vba-ie.net/code/iejs.html
   に VBAから Navigate メソッドで javascript を実行できる

   JavaScriptで要素を点滅させるショートコーディング
   https://qiita.com/n4o847/items/3fc84a2937aa9b2f7a58
   サンプル
■  HTML
   <span id="text">点滅</span>
    JavaScript
   setInterval("text.style.opacity^=1",500) //500ms毎に切り替え

   IDをつけた要素はグローバル変数に入っている の意味がピント
   こないですが。研究します。

■[JavaScript] 透過率を変更する(style.opacity)
   【JavaScript】
    var obj = document.getElementById("target");

       obj.style.opacity = 0.5;  //50%

       VBAでこれができるといいのですが。
  
■jQuery を使ってページの opacity を徐々に上げて fadeIn して見せる

■【JavaScript】jQueryとjQuery UIを使ってボタンを点滅させる

  など見ると、いろいろあるらしいのですが意味が分からず
  もっと勉強しないといけないと思いいました。

  何かお気づき点があればコメントお願いいたします。

   

  

  
(かず) 2018/06/26(火) 01:35


 >当該HTML調べたのですが src属性はなく入れ替えるgifはないのです

 gif画像である必要はないです。

 そのボタンの画像を決定している記述がどこかにあるハズです。
 そのタグを見付けてください。

 ※こちらでテストした時は、IMGタグに入っていました。

(半平太) 2018/06/26(火) 08:24


ブラウザ上のオブジェクト操作って、非常に難しいと思います。 Excelとはほぼ赤の他人のアプリですし、HTMLの指示に従ってオブジェクト描画しているのはIEですし、ブラウザがどうやって表示しようがソース側は何も意識しないのがHTML技術ってもんです。 JSでそれがボタンになるのは、そのように表現して欲しいというテキストが仕様通りに書かれているからというだけ。なので、IE上のボタンをどうこうするなんて、考えるべきではないと思いますよ。(半平太さん案とKanzoさん案は、直接操作はできないので、間接的に書き換えようとする面白い考えです)

対象のHTMLを自分で書いているならば、JQueryを使う手もあるでしょう。 しかしそれは、HTMLの書き方というだけであり、Excelと全く関係ない話です。

やりたい事は、本当にIE上のボタンオブジェクトを点滅させなければできない事なのでしょうか? デモ用との事ならば、操作して欲しい箇所に矢印とか枠を重ねるとか、IE外で表現しては駄目なのでしょうか? なにか過剰に難しい事を考えているように思えます。
(???) 2018/06/26(火) 09:54


ボタンといってもHTMLではいろいろなものがあります。
buttonタグだったり、ボタンの画像だったり、CSSでボタンのように見せていたり、・・・
まずはそれを分析することから始めましょう。

CSSでボタンのように見せいてるなら背景色やフォントを変えることは可能です。

buttonタグにても画像にしてもCSSにしても、点滅(表示/非表示の切り替え)でいいならその要素を特定して、
.Style.visibilityプロパティの設定で可能です。

例えば、そのボタン要素に id属性があるなら、それで要素を特定して下記のコードで点滅できます。

With Doc.getElementById("ID名")

   .Style.visibility = "hidden"
   DoEvents
   Sleep 500
   DoEvents
   .Style.visibility = "visible"
End With

(hatena) 2018/06/26(火) 12:18


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.