アプリ版:「スタンプのみでお礼する」機能のリリースについて

私は「緑のパスワードがなくnanacoをお持ちの方」です。

カード記載の番号にはvbaで値を入れることはできるのですが、
nanaco番号に値を入れることとログインボタンを押すことができません。

**********************************************
Sub nanaco()
Dim objIE As InternetExplorer
Dim myObj As Object

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True

objIE.navigate "https://www.nanaco-net.jp/pc/emServlet"

Do While objIE.Busy = True
DoEvents
Loop
Do While objIE.document.readyState <> "complete"
DoEvents
Loop

objIE.document.all("XCID").Value = "12345"
objIE.document.all("SECURITY_CD").Value = "Password"

For Each myObj In objIE.document.forms(0).all
If TypeName(myObj) = "HTMLInputElement" Then
If myObj.alt = "ログイン" Then
myObj.Click
Exit For
End If
End If
Next

Set objIE = Nothing

End Sub
**********************************************

これだとまずall("XCID").Value でエラーになります。

ソースでは、
<input name="XCID" tabIndex="1" class="txtBoxLogin" accessKey="1" type="text" maxLength="16" value=""/>
となっておりますが、同じコードが二つあるからエラーになるのでしょうか?

all("SECURITY_CD").Value
は問題なくできます。

ソースにも、SECURITY_CDは一つしかないです。

次にログインボタンも二つあるのですが、

For Each myObj In objIE.document.forms(0).all
If TypeName(myObj) = "HTMLInputElement" Then
If myObj.alt = "ログイン" Then
myObj.Click
Exit For
End If
End If
Next

このコードを実行すると、多分上の方のログインボタンが押されてるようです。


なので、

Dim 二つ目 As Boolean

For Each myObj In objIE.document.forms(0).all
If TypeName(myObj) = "HTMLInputElement" Then
If myObj.alt = "ログイン" Then
If 二つ目 = True Then
myObj.Click
Exit For
End If
二つ目 = True
End If
End If
Next

に変更してみたのですが、
どうやら
If myObj.alt = "ログイン" Then
になるのは、1回しかないようです。

うーん、うまくできません。
ご教授よろしくお願いします。

「vbaでnanacoにログイン(ie操作」の質問画像

A 回答 (2件)

rvnaclnvlhmrさん


こんにちは。

nameは普通ユニークだと思ったのですが同じ名前を2つ使っているのですね。
それでもnameで定義されているので簡単に対処できます。

objIE.document.all("XCID").Value = "12345"
objIE.document.all("SECURITY_CD").Value = "Password"
For Each myObj In objIE.document.forms(0).all
  :
Next
      ↓↓↓↓↓↓
objIE.document.all.XCID(1).Value = "12345"
objIE.document.all.SECURITY_CD.Value = "Password"
objIE.document.all.ACT_ACBS_do_LOGIN2.Click

※objIE.document.all.XCID(0).Value … 1つ目のanaco番号入力エリアです。
注)objIE.document.all("XCID")(1).Value = "12345"
でもOKですが、上記の方がちょっとはスッキリしている?と思います。

お試し下さい。
    • good
    • 0
この回答へのお礼

With objIE.document.all
.XCID(1).Value = 会員番号
.SECURITY_CD.Value = Password
.ACT_ACBS_do_LOGIN2.Click
End With
にしたらうまくできました!

nameが二つある場合は、インデックスをつければいいのですね。
ACT_ACBS_do_LOGIN2についてもソースをよく見てみたらありました。

実は私、以前にもjcctairaさまにvbaの事でご回答いただきました。
以前のIDはパスワードがわからなくなりログインできなくなってしまったので、違うIDを使って質問しました。

でも色々試してみたら以前のIDのパスワードがわかったので、
jcctairaさまに過去にご回答いただいた分もやっとお礼できました!
(ZXEARIZUCC7です。遅くなってすいません)

何度もご回答いただけて助かります!
画像のねこちゃん可愛いです!

ありがとうございました!!!

お礼日時:2013/05/19 09:34

# 上手く行ったなら解決済みにされた方がいいのではと。



objIE.document.forms(1).Item("XCID").Value = "12345"
objIE.document.forms(1).Item("SECURITY_CD").Value = "Password"
objIE.document.forms(1).all("ACT_ACBS_do_LOGIN2").Click
とも書けますね。

---
> nameは普通ユニーク

Idの方はUI Automationの AutomationId として検索としても使われるのでユニークなのですが、nameはForm毎に同名なのは結構ある様です。
(Twitterのログインページも同じ類)
    • good
    • 0
この回答へのお礼

閉め忘れてました
大変失礼しました

一つのページ内で
Nameは複数使われることがあるのですね。
勉強になりました。
ありがとうございました。

お礼日時:2013/05/21 19:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!