问题描述
朋友,我是VBA的新手,在这里我试图从内部网站抓取数据。过程如下:在A3到End列中输入的序列号很少。该宏应该导航到URL->从excel中选择序列号->在搜索字段中输入并单击搜索。将结果填充到页面上后,它将抓取特定值并填充到excel工作表中。
页面打开得很好,可以从excel中选择数据,当宏读取表单元格时,它会给出 运行时70错误 。下面是我的代码供参考。非常感谢您提供修复帮助。
utf-8
解决方法
HTMLDoc.getElementById("submitAction").Click
可能会导致页面刷新,使所有引用的元素变得陈旧。当执行可能/已知会导致页面刷新/更新的操作时,请尝试始终使用ie.document
而不是将其设置为变量。这是导致权限被拒绝错误的常见原因。
您的If End If
应该是超时的循环。您只需要一个ie.visible = True
。我认为您很少将Visible设置为false。如果您打算向用户隐藏它,则应该从一开始就这样做,除非它会干扰功能。
Application.ScreenUpdating = True
没有意义,因为它从未在此子菜单中关闭。如果调用了此子项,则在循环外仅需要一次。您重复的ActiveCell.Offset(0,1).Activate
可以与Select Case
一起使用循环,并直接设置值而无需激活。重复行Do While ie.READYSTATE = 4: DoEvents: Loop
没有用。
您可以使用Find
的范围方法来确定第1列中发生0的行,而不用遍历该列。并测试确定是否找到它,并且> = 3。
此错误表示试图写入受写保护的磁盘或访问锁定的文件。您可以检查是否需要特殊权限才能访问工作表。有关详细的原因和解决方案,请参阅this doc。
此外,您还可以参考我的工作示例以读取VBA中的单元格值:
Sub LOADIE()
Set ieA = CreateObject("InternetExplorer.Application")
ieA.Visible = True
ieA.navigate "https://www.bing.com"
Do Until ieA.readyState = 4
DoEvents
Loop
Set doc = ieA.Document
Dim tempStr As String
tempStr = "sb_form_q"
doc.getElementById(tempStr).Value = ThisWorkbook.Sheets("SheetName").Range("E2").Value
End Sub