简体   繁体   English

Microsoft Excel 2010 Web 查询宏:从一个页面中提取多个页面

[英]Microsoft Excel 2010 Web Query Macro: Pulling Multiple Pages From One

I am looking to find some help on this Macro.. The idea is, upon execution the Macro will pull The Data from a Web Page (IE http://www.link.com/id=7759 ) and place it into let's say Sheet2, and then Open up Page 2, and place it right below Page 1's Data in Sheet 2.... And So on and So on until a set Page Number.. Ideally I would like it just to pull The following in order;我正在寻找有关此宏的帮助。想法是,在执行时,宏将从 Web 页面(IE http://www.link.com/id=7759 )中提取数据并将其放入假设Sheet2,然后打开第 2 页,并将其放在第 2 页中第 1 页数据的正下方.... 依此类推,直到设置页码.. 理想情况下,我希望它只是按顺序拉出以下内容;

Title Artist Type Paper Size Image Size Retail Prize Quantity标题 艺术家类型 纸张尺寸 图像尺寸 零售奖品数量

And further more it is ideal that is placed in proper columns and rows of 4 and 8 Rows down(Columns Across just like in the web page).此外,理想的情况是放置在适当的 4 行和 8 行的列和行中(跨列,就像在 web 页面中一样)。

Any help on this would be greatly, greatly appreciated.对此的任何帮助将不胜感激。 I have done some research and found similar macros, sadly have had no luck getting them to work for me.我做了一些研究,发现了类似的宏,遗憾的是没有运气让它们为我工作。 Mainly VB's fail to go through as well.主要是VB也无法通过go。

Bit of useful info (maybe) I figured this out when I was trying to write my own, maybe it will save who ever helps some time..一些有用的信息(也许)我在尝试编写自己的代码时发现了这一点,也许它会节省一些时间。

.WebTables = "8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38"

Those are the tables for each item I want to put into the Que...这些是我想放入 Que 中的每个项目的表格...

Here's a sample method to get you going这是一个让您前进的示例方法

Based on a few assumptions基于一些假设

  • Workbook contains a Sheet to hold query data called "Query"工作簿包含一个工作表来保存名为“查询”的查询数据

  • Workbook contains a Sheet to put the data in called "AllData"工作簿包含一个将数据放入名为“AllData”的工作表

  • All old data is removed on running the macro运行宏时删除所有旧数据

  • I think you need to include Table 7 in the qyuery我认为您需要在 qyuery 中包含表 7

  • Pages to process is hard coded as For Pg = 1 To 1 , change this to suit要处理的页面被硬编码为For Pg = 1 To 1 ,将其更改为适合

. .

Sub QueryWebSite()
    Dim shQuery As Worksheet, shAllData As Worksheet
    Dim clData As Range

    Dim qts As QueryTables
    Dim qt As QueryTable
    Dim Pg As Long, i As Long, n As Long, m As Long
    Dim vSrc As Variant, vDest() As Variant

    ' setup query
    Set shQuery = ActiveWorkbook.Sheets("Query")
    Set shAllData = ActiveWorkbook.Sheets("AllData")

    'Set qt = shQuery.QueryTables(1)
    On Error Resume Next

    Set qt = shQuery.QueryTables("Liebermans")
    If Err.Number <> 0 Then
        Err.Clear
        Set qt = shQuery.QueryTables.Add( _
            Connection:="URL;http://www.liebermans.net/productlist.aspx?id=7759&page=1", _
            Destination:=shQuery.Cells(1, 1))
        With qt
            .Name = "Liebermans"
            .WebSelectionType = xlSpecifiedTables
            .WebFormatting = xlWebFormattingNone
            .WebTables = "7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38"
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
    End If
    On Error GoTo 0

    i = InStr(qt.Connection, "&page=")

    ' clear old data
    shAllData.UsedRange.ClearContents
    shAllData.Cells(1, 1) = "Title"
    shAllData.Cells(1, 2) = "Artist"
    shAllData.Cells(1, 3) = "Type"
    shAllData.Cells(1, 4) = "Paper Size"
    shAllData.Cells(1, 5) = "Image Size"
    shAllData.Cells(1, 6) = "Price"
    shAllData.Cells(1, 7) = "Quantity"


    m = 0
    ReDim vDest(1 To 10000, 1 To 7)
    For Pg = 1 To 1
        ' Query Wb site
        qt.Connection = Left(qt.Connection, i + 5) & Pg
        qt.Refresh False

        ' Process data
        vSrc = qt.ResultRange
        n = 2
        Do While n < UBound(vSrc, 1)
            If vSrc(n, 1) <> "" And vSrc(n - 1, 1) = "" Then
                m = m + 1
                vDest(m, 1) = vSrc(n, 1)
            End If
            If vSrc(n, 1) Like "Artist:*" Then vDest(m, 2) = Trim(Mid(vSrc(n, 1), 8))
            If vSrc(n, 1) Like "Type:*" Then vDest(m, 3) = Trim(Mid(vSrc(n, 1), 6))
            If vSrc(n, 1) Like "Paper Size:*" Then vDest(m, 4) = Trim(Mid(vSrc(n, 1), 12))
            If vSrc(n, 1) Like "Image Size:*" Then vDest(m, 5) = Trim(Mid(vSrc(n, 1), 12))
            If vSrc(n, 1) Like "Retail Price:*" Then vDest(m, 6) = Trim(Mid(vSrc(n, 1), 14))
            If vSrc(n, 1) Like "Quantity in stock:*" Then vDest(m, 7) = Trim(Mid(vSrc(n, 1), 19))

            n = n + 1
        Loop
    Next

    ' Put data in sheet
    shAllData.Cells(2, 1).Resize(m, 7) = vDest

End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM