- ベストアンサー
エクセルデータをWebに入力する方法(VBA)
- エクセルデータをWebに入力する方法(VBA)についての質問です。エクセルのデータを1個ずつ社内のイントラネットの入力欄に転記し、検索結果を確認して判断する業務の効率化を図りたいです。
- 現在、エクセルデータをクリップボードにコピーし、対象のURLを開くことはできていますが、セルを選択するたびに新しいウィンドウが開かれる問題があります。また、クリップボードのデータを入力欄に自動的に貼り付け、検索ボタンを押すまで自動化する方法も知りたいと思っています。
- エクセルデータをWebに入力する方法(VBA)について効率化のヒントや自動化の方法を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、以下のようにobjIEをモジュール変数にしてはどうでしょう。前回使用した画面をそのまま使いまわす方法です。 Dim objIE As Object Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 'IEが起動しているかチェック。objIE.Nameプロパティの取得に成功したら起動とみなす。 Dim tmp As String On Error Resume Next tmp = objIE.Name If Err.Number <> 0 Then 'エラーならIEが起動していないので、起動する Set objIE = CreateObject("InternetExplorer.Application") End If On Error GoTo 0 With objIE .Navigate "?http://******.co.jp/******/**/***/Details/DetailsScr/init" .Visible = True Do While .Busy = True DoEvents Loop .Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定 'オートコンプリートなどの機能が働く場合があるので、念のため待機 Do While .Busy = True DoEvents Loop .Document.forms(0).submit '送信ボタンクリック End With End Sub 以上です。
その他の回答 (2)
- cistronezk
- ベストアンサー率38% (120/309)
>通常の大きさ(□ボタンを押して広がるサイズ)で開くにはどうすればよいのでしょうか? こちらを参考にしてください。Top、Left、With、Heightで位置とサイズを指定できます。さらに必要なら外観も。 http://www.ken3.org/cgi-bin/group/vba_ie.asp
お礼
有難うございます。 やはりサイズ指定するしかないんですね。 エクセルだと Application.WindowState = xlMinimized でいけるのですが・・・・。
補足
まちがいました。 エクセルだとApplication.WindowState = xlMaximized ですね。 サイズ指定だと他のオフィスバーなどの有無で違う場合があるんですよね。 ありがとうございました。
- cistronezk
- ベストアンサー率38% (120/309)
クリップボードを使わなくてもできると思います。 たとえば、以下のようなHTMLファイルがあるとします。 <html> <title>test</title> <body> <form> <input type="text" name="txt1" id="txt_1"> <input type="text" name="txt2" id="txt_2"> <input type="submit" name="btn1" id="btn_1"> </form> </body> </html> このテキストボックスにセルA1,A2の値を入力するには以下のようにします。 Sub Macro1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") With objIE .Navigate "http://******.co.jp/******/**/***/Details/DetailsScr/init" .Visible = True 'IE待機 Do While .Busy = True DoEvents Loop 'テストボックスへ入力その1:Name属性で指定する場合 .Document.all.Item("txt1").Value = Range("A1").Value .Document.all.Item("txt2").Value = Range("A2").Value 'テストボックスへ入力その2:ID属性で指定する場合 '.Document.getElementById("txt_1").Value = Range("A1").Value '.Document.getElementById("txt_2").Value = Range("A2").Value '送信ボタンクリック .Document.forms(0).submit 'IEを閉じる .Quit End With Set objIE = Nothing End Sub で、入力できます。 URLのソースを見れば、入力するinputタグのname属性かID属性がわかるはずです。実情に合わせて修正してください。
お礼
cistronezkさま、さっそくありがとうございます。 わざわざクリップボードを経由していたのは、値をWebに直接入力させる方法を知らなかったのでCtrl+Vで貼り付けるためでした。 今回、おかげさまで、ワークシートで選択した値を、Webの入力欄に自動的に入れ、検索することができるようになりました。 ただ、画面がすぐに閉じてしまうのは困るので.Quit はコメントアウトして、画面をよく見た後から手動で閉じるようにしようかと思うのですが、この部分を、次の検索作業にうつるとき、つまりワークシートのSelectionChangeイベントが作動したときに前回の検索画面が閉じるようにはできないものでしょうか? ためしに、.Navigate~ の一行前に.Quit を入れてみましたが、オートメーションエラーになってしまいました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") With objIE .Navigate "?http://******.co.jp/******/**/***/Details/DetailsScr/init" .Visible = True Do While .Busy = True DoEvents Loop .Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定 .Document.forms(0).submit '送信ボタンクリック ' .Quit '←ここで閉じられては困ります。 End With Set objIE = Nothing End Sub
お礼
cistronezkさま、ありがとうございます。 こうなればいいと思ったとおりに出来ました! これで作業時間がかなり短縮されます。 ほんとうに助かりました。 これで作業を続けるうちにまた希望が出てくるとは思いますが、その際にはまたご指導賜れれば幸いです。
補足
cistronezkさま、大変申し訳ないのですが甘えついでにもう一点だけご教示ねがえませんでしょうか? 指定のIE画面が中途半端な大きさで開いてしまうのです。 通常の大きさ(□ボタンを押して広がるサイズ)で開くにはどうすればよいのでしょうか? .FullScreen = True で最大化するとメニューから何から全て無くなってしまいますのでこれは使えません。 宜しくお願いいたします。