質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • VBA

    2247questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Internet Explorer

    328questions

    Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

  • マクロ

    280questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

VBAマクロエラー「オブジェクトが必要です」

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,904

hatsuk0i1216

score 6

前提・実現したいこと

在庫数確認のため、WEBページにアクセス

ログイン

在庫確認ページへアクセス

商品コードをセルから取り出し貼り付け
問い合わせボタンを押す

出力された情報をエクセルへ貼り付け

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

技術に関する回答ではありませんが一言。

他社の会員制のWebサービスに対してスクレイピングのような動作をしようとしていると見受けられますが
一般的に、会員制のWebサービスには利用規約が設けられています。
その利用規約には、いわゆるスクレイピングや機械的な操作を禁止している場合があります。
それに反する行為を行った結果、そのサービスを利用できなくなったり、規約に定められた罰則をうける可能性がありますのでご注意ください。
VBAの使用者=ログイン者=あなたなら責任は自身で負えますが、そうでない場合は他人も巻き込むことになります。

簡単にいうと

stock.aspへ直接アクセスしようとすると、index.htmlへ強制的に飛ばされる。

という動作から察して、あまり変な処理はしない方がよいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/08 17:10

    ご丁寧にご教授いただきありがとうございました。
    上記につきましては一旦会社側と相談させていただきます。

    キャンセル

  • 2017/03/08 17:20

    たとえ規約で禁止されてなくても、誤動作で「注文」ボタンを押しちゃった、ということもありえるので慎重に進めるべき事案かと思います。

    キャンセル

checkベストアンサー

0

stock.aspへ直接アクセスしようとすると、index.htmlへ強制的に飛ばされる。

これが原因なのでは?
VBA 関係なく。
飛ばされないように設定してもらって下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/08 15:49

    >飛ばされないように設定してもらって下さい。
    →該当のページは他社メーカーのページになり、こちらではHTMLやJavaの設定変更は
     できかねるのですが、VBA上でそのような設定が可能ということでしょうか?

    キャンセル

  • 2017/03/08 15:52

    他社のページならそれは無理ですね。しかしデータの入っているページを取得できなければどうにもなりませんが、できていますか?

    キャンセル

  • 2017/03/08 16:03

    objIE から objFrame そして objDoc と取得しようとされていますが、そのどの段階で失敗しているのかを調べる必要があると思います。

    キャンセル

  • 2017/03/08 16:57

    フレーム内のオブジェクトが取得できていないことが原因でした。
    functionを追加して無事にできました!ありがとうございました。

    キャンセル

0

エラー発生行なのだと思いますが、1行のみのコード提示ではなんとも言えません。
現時点で言えることは、提示いただいた1文のどこかでオブジェクトに結びついていないものがあるので怒られているのでは?というくらいです。

一般的に見て一番あやしそうなのは.Item("strNUMBER")の部分です。
・開いたページに"strNUMBER"が存在しない
・そもそもページを開き終わる前に参照してしまい見つからない
など考えられますが、推測の域を出ません。

もう少しコードを提示いただければより具体的なアドバイスができると思うのですが。。ご検討ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/05 03:01

    Sub 自動ログイン値取得()

    Dim objIE As Object
    Dim obj As Object
    Dim obj3 As Object
    Dim objIE2 As Object
    Dim strNUMBER As String
    Dim strURL As String


    'IEを起動 URLを指定
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    objIE.Navigate "http://XXXXXXXXXXXXXXXXXXXXXXXXX"
    'ページ表示待機



    'IDとパスワードの入力
    For Each obj In objIE.Document.getElementsByTagName("input")
    If obj.Name = "LOGON" Then
    obj.Value = "********" '←正しいものに変更
    End If
    If obj.Name = "PASSWORD" Then
    obj.Value = "********" '←正しいものに変更
    End If
    Next

    'ログインボタンをクリック
    For Each obj In objIE.Document.getElementsByTagName("input")
    If obj.Name = "SUBMIT" Then
    obj.Click
    End If
    Next

    '在庫確認ページへ遷移
    objIE.Navigate "http://XXXXXXXXXXXXXXXXXXXXXXXXX"

    'セルB2の商品名を代入
    obj.Document.Forms(0).Name("strNUMBER").Value = Cells(2, 2).Value

    (このあとSUBMITするつもりですが、)
    End Sub

    キャンセル

  • 2017/03/08 16:44

    ソースコードの提示ありがとうございます。
    できれば
    ・回答する人全員が見たいものであること
    ・ソース全体を```で囲んで投稿いただくことでネストの段組みなどがきれいに表現できること
    といった理由から、個々の回答欄へのメッセージでなく質問本文への追記としていただいたほうがうれしいです。

    今後のご参考までに。

    ---
    提示いただいたコードでは2回のページ遷移(Naviagte)を行っているようですね。
    1回目のNavigate後は待機処理のコメントがありますが、実装が見当たりません。
    2回目のNavigate後も待機処理がなく、次行ですぐに"strNUMBER"の参照を試みています。

    2回目のNavigate後に問題が発生するのであれば、1回目で参照しているページはさほど表示に時間が掛からないページなのかもしれませんし、たまたま運がよかったのかもしれません。
    ネットの混み具合によっては1回目でアウトとなる場合もありそうです。

    改善策として待機処理を追加してみてはどうでしょうか?

    方法としては、Navigate後に例えば5秒待機してから参照する、といった方法もありますが、IEオブジェクトのBusy状態を確認するのが一般的だと思います。
    例えば
    ```
    Do While objIE.Busy Or objIE.ReadyState < READYSTATE_COMPLETE
    Debug.Print objIE.Busy & "/" & objIE.ReadyState
    DoEvents
    Loop
    ```
    というような処理になります。
    お試しください。

    キャンセル

0

objIEがそもそも適切に宣言されてないのではないですか。

検証したところ、ページに要素が無い場合はDocumentメソッドは失敗しました等、もう少し具体的なエラーになりました。

以下のように型を指定せず、オブジェクトもセットしなかった場合に「オブジェクトが必要です」というエラーになりました。

Sub hoge()
    Dim objIE
    objIE.Document.Forms(0).Item("strNUMBER").Value = Cells(1, 2).Value
End Sub

つまり、変数名の間違いなどの単純ミスかと推測します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/05 03:00

    Sub 自動ログイン値取得()

    Dim objIE As Object
    Dim obj As Object
    Dim obj3 As Object
    Dim objIE2 As Object
    Dim strNUMBER As String
    Dim strURL As String


    'IEを起動 URLを指定
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    objIE.Navigate "http://XXXXXXXXXXXXXXXXXXXXXXXXX&quot;
    'ページ表示待機



    'IDとパスワードの入力
    For Each obj In objIE.Document.getElementsByTagName("input")
    If obj.Name = "LOGON" Then
    obj.Value = "********" '←正しいものに変更
    End If
    If obj.Name = "PASSWORD" Then
    obj.Value = "********" '←正しいものに変更
    End If
    Next

    'ログインボタンをクリック
    For Each obj In objIE.Document.getElementsByTagName("input")
    If obj.Name = "SUBMIT" Then
    obj.Click
    End If
    Next

    '在庫確認ページへ遷移
    objIE.Navigate "http://XXXXXXXXXXXXXXXXXXXXXXXXX&quot;

    'セルB2の商品名を代入
    obj.Document.Forms(0).Name("strNUMBER").Value = Cells(2, 2).Value

    (このあとSUBMITするつもりですが、)
    End Sub

    キャンセル

  • 2017/03/06 09:47 編集

    ※自分の回答と間違えてコメントつけてしまいました。スミマセン。
    ※自分の回答にコメントを移させていただきますm(__)m

    キャンセル

  • 2017/03/08 15:38

    jawaさま
    ご返信ありがとうございました。
    本件につきまして、質問本文を変更させていただきました。
    引き続きご教授いただきますようお願いいたします。

    キャンセル

同じタグがついた質問を見る

  • VBA

    2247questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Internet Explorer

    328questions

    Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

  • マクロ

    280questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。