【问题标题】:VBA website automationVBA网站自动化
【发布时间】:2018-05-16 01:06:58
【问题描述】:

大家下午好,

我创建了一些代码,可以自动将我登录到我的作品网站,但是当尝试让 VBA 将值输入到其中一个搜索框时,我总是收到错误 438:对象不支持此属性或方法。

这是我下面的代码,请你帮忙:

Option Explicit

Const MyUserName As String = "username"
Const MyPassword As String = "password"

Const READYSTATE_COMPLETE As Integer = 4

Dim objIE As Object


Sub LoginScript()

Dim Message, Title, Default
Dim MyValue As String
Dim currenttime As Date

Set objIE = CreateObject("InternetExplorer.Application")

    If MsgBox("Do you want to search for a member?", vbYesNo, "Login") = 
vbNo Then
With objIE
.Visible = True
.Silent = True
.Navigate ("https://XXXXXXXXX.com/")
Do Until .ReadyState = READYSTATE_COMPLETE
  DoEvents
Loop
.Document.all.txtuserid.Value = MyUserName
.Document.all.txtpassword.Value = MyPassword
.Document.all.save_button.Click
Do Until .ReadyState = READYSTATE_COMPLETE
  DoEvents
Loop
End With
    Else

    Message = "Please enter clients CTC number"    ' Set prompt.
    Title = "Member Search"    ' Set title.
    ' Display message, title, and default value.
     MyValue = InputBox(Message, Title)

With objIE
    .Visible = True
    .Silent = True
    .Navigate ("https://XXXXXXXXX.com/")
    Do Until .ReadyState = READYSTATE_COMPLETE
    DoEvents
    Loop
    .Document.all.txtuserid.Value = MyUserName
    .Document.all.txtpassword.Value = MyPassword
    .Document.all.save_button.Click
    Do Until .ReadyState = READYSTATE_COMPLETE
    DoEvents
    Loop
    currenttime = Now
    Do Until currenttime + TimeValue("00:00:10") <= Now
    Loop
    Do Until .ReadyState = READYSTATE_COMPLETE
    DoEvents
    Loop
    .Document.getElementsById("txtClientRef").Value = MyValue <------ Errors Here
End With
End If
End Sub

【问题讨论】:

  • 为什么您使用与登录凭据不同的方法来填写搜索字段?顺便说一句,这是一个非常糟糕的主意。
  • 我尝试了同样的方法,但也没有用。我是唯一可以访问包含代码的文件的人,并且我有密码保护文件
  • exceldevelopmentplatform.blogspot.com/2018/02/… 有助于将焦点设置在您正在操作的控件上。
  • 我仍然收到错误 424

标签: vba excel


【解决方案1】:

id应该是唯一的,语法是getElementById,所以试试:

 .Document.getElementById("txtClientRef").Value

先做.Document.getElementById("txtClientRef").Focus也是个好主意。

如果这会产生运行时错误 424,则可能是该对象不存在,如指定的那样,或者在您尝试分配时不可用。对于后者,您可以尝试循环直到没有指定超时为止。

【讨论】:

  • 打败我。发布:.Document.getElementsById("txtClientRef").Value
  • 这已导致错误发生变化。我现在收到错误 424。需要对象
  • 这表明它要么不存在,要么在您尝试分配时不可用。
  • 有网址可以分享吗?您是否右键单击网页中的元素检查?
  • 很遗憾,我无法共享该 URL,因为我的所有客户都在使用它。我检查了页面,我要填充的框位于名为“form_element varchar”的 Span 类下,然后框的 ID 为“txtClientRef”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 2018-06-17
  • 2017-04-05
相关资源
最近更新 更多