2015年2月22日日曜日

IE+VBAで仕事を効率化〜再びIE自動運転の不具合[フレーム(frame)へのアクセス拒否]の原因はWindowsパッチの自動更新 if IE+VBA failed to access(Access Denied) to a frame again!

 2015年の2月初め、VBAによるIE自動運転スクリプトが再び「フレーム(frame)へのアクセス拒否」のエラーで動かなくなってしまった。

 At the beginning of  Feb. of 2015 my IE+VBA auto-pilot intranet cursing scripts were not working due to ”Access Denied (error) to a frame”. 

 今回は、社内Webシステムの連中がセキュリティを疑うことない。迷わず、隣の席の師匠に教えを乞う。

 This time I won't doubt about that the intranet team strengthened system's security. Without hesitation, I asked my VBA master.

 師いわく、「今回は、KB3034196のWindowsパッチを外せば、OKです」。
 言われたとおりにパッチを外すと、見事に昔のように動いてくれた。さすが、師匠!なんでもご存知だ。

 My master told me " Remove KB3034196 of Windows Patch!"
 After removal of the patch as told, my script went well as before. That's just what you'd expect from him. He knows everything.

 再び、マイクロソフトは、駄目パッチを堂々と出してきたわけだ。


 MicroSoft rolled out "haunted and damned patch" again as if that could help us out but it wouldn't .


  今回も、特定のWindowsパッチ(Windows updates)の自動適用を封じるために、コントロールパネルの延長で出てくる、利用可能な更新プログラムの一覧で、今後表示しない更新プログラムを右クリックし、[更新プログラムの非表示] をクリックした。これで、一安心だね

 To prevent the specific window's patch, in the list of available updates of Control Panel, right-click any update that you don’t want to see again, and choose Hide Update. 

 数日後、なぜか、非表示にしたはずのKB3025390は「非表示」のリストから姿を消し、KB3034196は、まんまと適用済となっていたが、ワタシの自動スクリプトは問題なく、動いているのだった。どうしたんだろう。マイクロソフトに完全に遊ばれている。マイクロソフトとの闘いが始まった。

A few days later, I don't why but hidden KB3025390 has really disappeared and KB3034196 has appeared in the installed patches list, Luckily my autopilot VBA programs are going well. What happened? Microsoft may want to play with us? Endless battles to Microsoft have begun.


2015年2月7日土曜日

EXCEL+VBAで仕事を効率化〜選択したセルの値を別のセルへコピペ

 仕事でチマチマと地味な繰返し作業をしていると、ストレスでへこんでしまう。少しでも楽をしたいなぁと思い、自分だけの特製マクロを作り続けている。
batboy
batboy

 例えば、EXCELで1つのセルの値を別のEXCEL文書(あるいは別シート)のセルへコピペする作業では、6つの操作の単純な繰返しになる。
1)マウスをコピー元のセルへ移動する。
2)マウスを右クリックする
3)コピーを選ぶ。
4)マウスをコピー先のセルへ移動する。
5)マウスを右クリックする
6)貼付けを選ぶ。
 
 地味なデータ分析など、データを色んなシートから拝借するので、膨大なコピペ作業の繰返しになることが多い。
 
 そこで、一連の操作で、特に2回の右クリックが「イラっ」とするので、VBAでコピペ用ダイアログ(COPYボタンとPASTEボタン、値エリアの3つで構成される小さいウィンドウ)を出して、右クリックの代わりに、COPYボタン、PASTEボタンをクリックだけでできるようにしてみた。

 最初に、VBAによるコピペ用ダイアログは出しておく。そして、
1)マウスをコピー元のセルへ移動する。
2)COPYボタンをクリックする
3)マウスをコピー先のセルへ移動する。
4)PASTEボタンをクリックする
セルのコピペが必要なセル総数が数個であれば、効力を発揮しないけど、数十個を超えるときは、右クリックがない分、作業が簡単になり、右クリックによるストレスがなくなる。
Sub Copy_Paste()
  UserForm1.Show(vbModeless)
  UserForm1.TextBox1.Value = ActiveWindow.ActiveCell.Value
  ActiveCell.Select
  Selection.Copy
End Sub
Sub Paste_TextBox1()
  ActiveWindow.ActiveCell.Value = UserForm1.TextBox1.Value
End Sub
 CopyボタンとPasteボタンを持つ、Userform1という名前のフォームを作成し、Copyボタンには「Copy_Paste」というマクロを、Pasteボタンには「Paste_TextBox1」をそれぞれ割当る。こんな感じ。






 ここで一息のコーナー。
 以前、ぶらり旅で鳥取砂丘を見に行った。運悪く、「砂丘フェスティバル」にブチあたり、選べるホテルが限られていた。そんな運命の糸に操られてか、「しいたけ会館」という渋い名前のホテルに宿泊することになった。名前どおり、夕食は「しいたけのフルコース」。メインのしいたけステーキは、巨大なぞうり。見た目どおり、大味。ここに泊まらねば、巡り会えない味なので、貴重な体験ができた訳だ。
 前日の島根では、「マリンタラソ出雲」というホテルに宿泊。次回はぜひ、水着を持参して宿泊したい(そのときは、貸出しを利用)。温水プールに、ジャグジーもあり、水中トレーニングができる。食事も美味しかった。何よりも、段々と沈む夕日を眺めることができて、格別。隣にある道の駅の出雲うどんとパン屋さん(小さなカフェがあり、そこでたまたま、ハワイの海で溺れかけながらも奇跡的に生還した話が隣の席から漏れ聞こえてきた。びっくりしたけど、聞こえていないふり)もおすすめ。島根では「鬼太郎の妖怪ロード」を見てきた。

2015年2月1日日曜日

IE+VBAで仕事を効率化〜新しいページを捕まえる Catch a new web page

foxman
Foxman
 VBAでIEを制御するとき、IEで新しいウィンドウが開かれる場合、そのウィンドウのIE(例えば your-web-page-title-1というタイトルを持つページ)を捕まえないとIEを制御できない。
   IEの制御が思ったとおりにできないときには、この「新しいページが作られている」という可能性を考えてみるとよい。

 その新しいページの IEを捕まえるコードが、こんな感じ。


The following codes enable you to get the control of the new IE window while a new window like "your-web-page-title-1" is open by JavaScript.   
    Set objIE = Nothing
    Set objShell=CreateObject("Shell.Application")
    For Each objWindow in objShell.Windows
      If TypeName(objWindow.document) = "HTMLDocument" Then
        Set objIE = objWindow
        Debug.Print objIE.Doucument.Title 
        If objIE.document.Title = "your-web-page-title-1"  Then Exit For
      End If
    Next
    
    1行目は、新しいIEページの内容へアクセスするための変数objIEを初期化(ゼロクリア)。
    2行目は、新しいIEページ(=ウィンドウ)を探す際、ウィンドウを巡回するための変数objShellをセット。
    3行目は、新しいIEページ(=ウィンドウ)を含む、全てのウィンドウをたぐるためにFor Each文で、9行目のNext文までで、目的のページを探す。
    4行目のIf文で、IEページがウィンドウタイプ=HTMLDocumentであることを利用して見つける。ここがポイント。
    5行目で、見つけたウィンドウを新しいIEページとして、設定。
    6行目は、デバッグのための文で、IEページのタイトルをVBAのデバッグ用エリアに出力。
    7行目のIf文で探しているタイトルを持つページかを判定し、そうであれば、For Eachのループを脱出する。そうでなければ、次のウィンドウをたぐる。これをウィンドウがあるだけ、繰り返すことになる。

     ここで、ちょっと一息。おいしい枝豆レシピ。

    ・枝豆の両端をカット(湯がとおるように)
    ・よく洗う
    ・塩をまぶし、しばらく、置く
    ・塩水でゆでる。塩の量は、4%。1500ccの水なら、60g
     (まぶすときに使う分も含む)

    I would like to introduce my favorite Japanese cuisine "edamame". Let me explain a recipe for cooking tasty edamame. First, cut both ends off the pods and wash until clean. Then, stir in some salt, leave for a awhile, and then boil for 4 minutes in a big pan of salted water. The salt should be 4 % all the water (including when stirring); for example, 60 grams of salt for 1500 cc of water.