三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

○○さんへ サーバー上/IE上のExcelファイルからデータを抜き取る方法 途中まで、、、

下記のような質問をもらいました

サーバーにあるエクセルファイルのセルを(IEの中のエクセル)から、
通常のエクセルへコピーしたいのですがうまくいきません。
両方のファイルは開いていてるので、コピーする先のシートをアクティブにできれば、うまくいくのですが、
どうにもうまくいきません。
よろしくお願いします。

Sub TENKI()

部材記号 = ActiveCell.Value
部材名 = ActiveCell.Offset(0, 2).Value
ActiveCell.Offset(1).Select
エス = MsgBox(部材記号 & " 部材名も必要ですか?", vbYesNo)
If イエス = 6 Then
ActiveCell = 部材記号
ActiveCell.Offset(0, 2).Value = 部材名
ActiveCell.Offset(1).Select
ElseIf イエス = 7 Then
ActiveCell = 部材記号
ActiveCell.Offset(1).Select
End If
End Sub

調べること

1.IE上で開いているExelを判断する

起動済み、指定したURLのIEを探し、閉じる方法
http://ken3-info.blog.ocn.ne.jp/objie/2009/09/urlie_785f.html
このソースを元にして、探してみたいと思います。

イントラネットなどで、サーバーに裸のxlsファイルが置いてあり、ブラウザで(IEで)そのファイルが開かれている、 そのアクティブなセルからデータを取得したい、そんな処理です。

まず、 http://h22-jun.top1-12.info/2010-06-28.xls テストファイル を 探してみたいと思います。

Sub ddd() ' http://h22-jun.top1-12.info/2010-06-28.xls を 見つけるテスト
'CreateObject("Shell.Application") で
'通常のフォルダー表示ファイルエクスプローラーとIE(インターネットエクスプローラー)
'を.FullNameで区別する

    Dim objShell  As Object
    Dim objIE     As Object
    Dim n         As Integer
    
    'これで、エクスプローラーのウインドウを取得する
    Set objShell = CreateObject("Shell.Application")
      
    '後ろから消してく。頭から、For n=0 To objShell.Windows.Count - 1 のループでもいいけど
    '.Windowsでエクスプローラーとインターネットエクスプローラーにさわれる
    For n = objShell.Windows.Count To 1 Step -1  'MAXから-1ひいてく感じで後ろからチェック
        Set objIE = objShell.Windows(n - 1) 'n番目のウインドウを代入 配列が0からなので-1補正
        Debug.Print n
        Debug.Print ".FullName " & objIE.FullName
        Debug.Print ".locationURL " & objIE.locationURL
        
        '.FullNameで普通のファイルエクスプローラーとIE(インターネットエクスプローラー)を区別する
        If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then 'IEか?
            If Right(objIE.locationURL, 14) = "2010-06-28.xls" Then '次に.locationURでURLのチェック06-28.xlsか?
                Exit For  '見つかったので、Exitでループ抜ける
            End If
        End If
    Next
    Set objShell = Nothing

    '↑上で、.locationURL 2010-06-28.xlsが見つからなかった 判断
    If n = 0 Then  'ループを最後まで回ってしまった=見つからなかった n=0で判断
        MsgBox "2010-06-28.xls が 見つかりません"
        Exit Sub  'テスト関数を抜ける・・・
    End If
    
    '見つかったので、IE上のExcelファイルを操作する(値を取り出す)
    Debug.Print ".Name " & objIE.Name

End Sub

単純に、objIE.FullName で IEか普通のファイルエクスプローラーか判断して、
次に、objIE.locationURL で XXXXXX.xls を判断しただけです。

試行錯誤の失敗動画 : http://www.youtube.com/watch?v=AIkRXCjn5Go
www.youtube.com

↑動画の中でLeftとやっているけど、If Right(objIE.locationURL, 4) = ".xls" Then ですね。Leftは左からなので、拡張子.xlsを判断するなら、Rightから4文字取らないと・・・

2.上記(1.)で捕まえたIE上のExcelのアクティブセルを取得。

2.1 テスト方法 と 失敗、試行錯誤、、、

objie.document.Sheets("DATA").cells(7,3)
で、IE上のデータを取得できたのですが、
.ActiveCell が 効かなかったです。

証拠の失敗動画 と ウォッチ式で止めて探る方法
いつもの操作動画 : http://www.youtube.com/watch?v=VZU4alVQdhw
www.youtube.com

少し続きを調べてみます。。。

少々(しばらく)お待ちを。 三流プログラマー Ken3

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)