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.

    2015年1月12日月曜日

    仕事で覚えたEXCEL小技〜マイケル・チャンは凄い How did my VBA-master notice that MicroSoft's Windows patch was the source of glitch?

     過日のマイクロソフトのパッチが悪さをして、それまで動作していたIE+VBA自動運転スクリプトが動かなくなった騒動で、わがVBAの師匠は、なぜ、マイクロソフトのパッチに辿りつけたのか。

    When the recent MacroSoft windows patch almost made my autopilot-scripts trash, why could my VBA-master reach to the MicroSoft patch as the source of glitch.  

    それはVBAをいくら、いじっても上手くいかないので、「視点を変えてみた」という。さすが、師匠である。
    owl
    Owl

    It is , to shift his perspective on that, since he couldn't solve the problem even if he did whatever he thought.
    That's my master!

    昨日まで動いていたスクリプトが何故、今日は動かないのか。違いは何だろうか。そもそも社内Webチームが急にセキュリティ強化をする理由はあるだろうか?冷静に考えると思い当たらない。

    Why the scripts that were working perfectly before didn't work?
    What's the differences?
    Why our intranet web site team ever has a reason to tighten the security abruptly?
    While he had time to clam down, he didn't come to think any reasons.

     今後は、まずは、マイクロソフトのパッチを一番に疑うことにする。師匠、ありがとう。

      Next time I will doubt a possibility of MicroSoft Windows patches first. Thanks my master! I got the tips.

     さて、NHKがテニスの錦織を特集していた番組で、彼を一躍、世界のトッププレーヤーに押し上げた、師匠、いや、コーチのマイケル・チャンのインタビューでの言葉があまりにも哲学的であったので、メモしておく。

      In the TV program of NHK was featuring a world's top tennis player Kei Nishikiori, as what his coach Michel Chan said was very impressive and philosophical, I took a note.

    • 錦織が自分で考えて戦ったのは良かった。(結果は、うまくいかなかったが)上手くいかないことがあってもいい、それが人間なのですから・・・。
    • It was good that Nishikiori fought changing how to fight. ( he lost the game) It's OK to do what  does not work. That is human.
    • 何千回も繰り返す練習を強いたのは、本番の苦しい時にも意識せずにそれができるようにするためだった。
    • The reason why Michel makes Kei practice same basic trainings thousaunds times is to do same thing in real games. 



    2015年1月10日土曜日

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

    smaphogirl
    green-girl




      この記事にある、トラブルの原因となったパッチはそのあと、しばらくして消滅し、不具合もいつの間に密かに修正されたのであるが、Windows patchが悪さをすることが、日常茶飯事である。そのことに警鐘を鳴らすためにこのエピソードを消さずに残しておく。

     2014年の年末、それまで調子良く、社内Webシステムからデータを吸い上げてくれていた、VBAによるIE自動運転スクリプトが突然、「フレーム(frame)へのアクセス拒否」のエラーで動かなくなってしまった。このままでは、ここ1年、半泣き顔で我慢と忍耐でひとつひとつ積み上げてきたプログラムがゴミになってしまう。いまだかつてない危機を迎えた。
     
     At the end of 2014 my IE+VBA auto-pilot intranet cursing scripts were not working due to ”Access Denied (error) to a frame”.  If this goes on, All my scripts made by half-crying patience and persistence for past a year will end up in the garbage. I faced the greatest challenge I had never experience.

     始めは、社内Webシステムの連中がセキュリティを強化してきたのかと思い、「なんとか突破してみせるぞ」とエラーを回避する方法を探し試行錯誤するも、うまくいかず、途方に暮れた。最後に、藁をもつかむ気持ちで、隣の席の「VBAの師匠」に教えを乞う。

     First I thought that the intranet team strengthened system's security. I tried to break through the barrier but I couldn't.
    Finally I asked my VBA master.


     すると、ほどなく、師匠は「あなたの敵は社内のWebサイトチームではなく、マイクロソフトですよ、KB3025390のWindowsパッチを外せば、OKですよ」と教えてくれた。
     言われたとおりにパッチを外すと、見事に昔のように動いてくれた。さすが、師匠!やっぱ、自分とはレベルが違うなぁ。

     Quite quickly my master told me " Your enemy is Microsoft , not our intranet team.  Remove KB3025390 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.

    それにしても、敵は海の向こう、米国シアトルのマイクロソフトで、何の断りもなく、適用された、レベルダウンしたWindowsパッチが悪さをしていたのだ。
     とりわけ、腹が立つのは、通常のシャットダウンではこのダメなパッチが再び、ゾンビのように自動適用されてしまうことですね。

     Anyway my enemy is Microsoft in Seattle, USA and its level-down patch  did nasty to me.
    What makes me mad most is that the patch is reinstalled automatically for  normal shutdown like zombi.

     とりあえず、Windows終了は、デスクトップ画面で左クリックし、ALT+F4でシャットダウンすることで、パッチの自動適用を回避している。

    Remove the KB3025390 of Windows's patch(update) if you found that your IE-auto-pilotting scripts by VBA stopped for "frame access error" or IE+VBA failed to access a frame.

      後日、特定のWindowsパッチ(Windows updates)を適用されないようにするためには、コントロールパネルの延長で出てくる、利用可能な更新プログラムの一覧で、今後表示しない更新プログラムを右クリックし、[更新プログラムの非表示] をクリックすればよいとわかった。楽チンだね。




    2015年1月6日火曜日

    ちっちゃい男になる方法 その1 コピー用紙の包装紙をブックカバーに変身させる

    swimminggirl
    swimming girl
      会社でコピーをする際に紙切れで、自分で用紙を補填しなければならないことがあります。そんなときには、ビリッと破かずに、綺麗に包装紙を外し、家に持ち帰り、裏返しにして、ブックカバーに変身させてください!実に、すべり具合がイイんですよ!
     ここで、ちっちゃい男のこだわりとしては、他人が補填したコピーの包装紙までは持っていかないゼというところです。

       高速道路のサービスエリアで無料の地図があります。
     地図が古くなって捨てずに、ブックカバーとして利用しましょう!地図は、とても素敵な柄になるので。






    2015年1月2日金曜日

    仕事で覚えたEXCEL小技〜複数セルから特定の長さの文字列を生成

    sheepgirl
    sheepgirl
     仕事で編み出したEXCELの小技をご紹介。

    ・2つのセルを空白でつないで、特定の長さにする 
     2つのセル(例えば、A2とB2)の文字列の間を空白で埋めて、特定の長さ(例えば、20文字)の文字列を生成するのには、REPT関数(リピート、REPeaT)を使います。
     =A2&REPT(" ",20-LEN(A2)-Len(B2))&B2

    ・VLOOKUPの結果が0なら、空白にする
     =VLOOKUP(D2,A2:B5,2,FALSE)&""




    ここで、ちょっと、一息。
    簡単、カツ丼レシピ。
    ・だし カップ3/4、醤油 大さじ2、みりん 大さじ3+1/2
    ・上を鍋に入れて、中火で3分
    ・市販のカツを入れ、溶き卵

    今回は、おまけの小話。
    年末に博多へ行ってきました。福岡市博物館では「漢委奴国王(かんのわのなのこくおう)」の金印を鑑賞。意外と小さい。けど、ずっしりと重い。
    ぶらりと入った、天神の酔灯屋(すいとうや)で玄界灘の新鮮な魚を堪能。とりわけ、突き出しの海鮮の刺身3種が、美味。「好(す)いとうや」は博多弁で、好きですかという意味だと思うのですが、本当のところはわかりません。

    I went to HAKATA for holidays at the end of last year 2014 with my friends. What we were amazed at was Kinin which is a  golden seal given by Chinese king to Japan. It is small but a bit heavy. We enjoyed fresh sea food from GE-N-KA-I-NA-DA sea near HAKATA bay at SU-I-TO-U-YA in TE-N-JI-N, FUKUOKA. SU-I-TO-U-YA means " Do you like this restaurant or HA-KA-TA?" in Japanese I guess.