Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用VBA将数据从html表格写入excel表格时速度较慢?_Html_Excel_Vba - Fatal编程技术网

为什么使用VBA将数据从html表格写入excel表格时速度较慢?

为什么使用VBA将数据从html表格写入excel表格时速度较慢?,html,excel,vba,Html,Excel,Vba,VBA代码工作正常,但写入数据需要很长时间,是否有其他方法从html表/url获取数据 Sub pull_option_data() Dim tod As String, UnderLay As String, exp As String Dim IE As Object Dim doc As HTMLDocument Dim Tbl As HTMLTable, Cel As HTMLTableCell, Rw As HTMLTableR

VBA代码工作正常,但写入数据需要很长时间,是否有其他方法从html表/url获取数据

Sub pull_option_data()
        Dim tod As String, UnderLay As String, exp As String
        Dim IE As Object
        Dim doc As HTMLDocument

    Dim Tbl As HTMLTable, Cel As HTMLTableCell, Rw As HTMLTableRow, Col As HTMLTableCol
    Dim TrgRw As Long, TrgCol As Long

'START INTERNET EXPLORER AND NAVIGATE TO URL
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    Dim ColOff As Long
    For Nurl = 2 To 151
    UnderLay = ThisWorkbook.Sheets("URLList").Range("A" & Nurl).Value
    ColOff = (Nurl - 2) * 23
TrgRw = 1

    IE.navigate "https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=" & UnderLay & ""

        Do While IE.Busy Or IE.readyState <> 4
        Application.Wait DateAdd("s", 1, Now)
        Loop

'GET DATA FROM TABLE AND PUT TO SHEET
    Set doc = IE.document
    Set Tbl = doc.getElementById("octable")
    TrgRw = TrgRw
    For Each Rw In Tbl.Rows
        TrgCol = 1
        For Each Cel In Rw.Cells
            ThisWorkbook.Sheets("Sheet1").Cells(TrgRw, ColOff + TrgCol).Value = Cel.innerText
            TrgCol = TrgCol + Cel.colSpan
        Next Cel
        TrgRw = TrgRw + 1
    Next Rw

TrgRw = TrgRw + 1
Next Nurl

End Sub
Sub-pull_选项_数据()
标注tod为字符串、参考底图为字符串、exp为字符串
模糊的物体
作为HTMLDocument的Dim doc
Dim Tbl为HTMLTable,Cel为HTMLTableCell,Rw为HTMLTableRow,Col为HTMLTableCol
变暗TrgRw为长,TrgCol为长
'启动INTERNET EXPLORER并导航到URL
设置IE=CreateObject(“InternetExplorer.Application”)
可见=真实
暗淡的科洛夫一样长
对于Nurl=2至151
参考底图=ThisWorkbook.Sheets(“URLList”).Range(“A”&Nurl).Value
科洛夫=(努尔-2)*23
TrgRw=1
即“导航”https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=“参考底图(&U)”
在忙或准备状态4时执行
Application.Wait DateAdd(“s”,1,Now)
环
'从表中获取数据并放到工作表中
Set doc=IE.document
设置Tbl=doc.getElementById(“八进制”)
TrgRw=TrgRw
对于Tbl.行中的每个Rw
TrgCol=1
对于Rw.单元格中的每个单元格
ThisWorkbook.Sheets(“Sheet1”).单元格(TrgRw、ColOff+TrgCol)。值=Cel.innerText
TrgCol=TrgCol+Cel.colSpan
下一个细胞
TrgRw=TrgRw+1
下一个Rw
TrgRw=TrgRw+1
下一个努尔
端接头

考虑任务的更具程序性的解决方案:

  • 在过程顶部添加application.ScreenUpdate=False
  • 以数组形式获取.Sheets(“urlist”)中的所有值
  • 创建新的二维阵列。将工作表中的键写入第1列,查找HTML表结果(按您的操作),并将结果保存在第2列中
  • 最后,只需粘贴整个数组,而不是在工作表中循环

循环中有一个循环-这会很慢。取决于表的大小,将取决于这种子类型的速度。请记住,您的代码将通过html表的任何单个单元格。根据表格在网页上的填充方式,您可以查看WinHTTPRequests,并可能通过它检索它。