下記のような質問をもらいました
サーバーにあるエクセルファイルのセルを(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