我有一个电子表格,其中包含A列中的URL列表。我想读取每个URL并将输出存储在单个单元格中,或者至少存储在与URL相同的行中。我目前正在使用以下标准VBA代码来执行每次读取(此处简化为使用静态URL)。
问题是Excel会自动将数据分成多行和多列,具体取决于网页的格式(这显然是通常需要的)。
是否有任何简单的方法可以修改该代码以强制输出到单个单元格或行中?
Sub FetchData()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.someurl", Destination:=Range("$B$1"))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
别担心,我设法使用此处的代码来解决这个问题: Fetch specific table only from website into Excel
我的下面的版本假设列A包含URL列表,列B-I包含其他数据。我想从A列读取每个URL的网页,从表中提取2个字段并将它们放在J和K列(第10和11列)中。这些字段在网页中命名为ID =“Name1”和ID =“Name2”。
Sub Getfromweb()
Dim RowNumb As Long
Dim LastRow As Long
Dim htm As Object
Set htm = CreateObject("htmlFile")
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For RowNumb = 1 To LastRow
With CreateObject("msxml2.xmlhttp")
.Open "GET", Sheets(1).Cells(RowNumb, 1), False
.send
htm.body.innerhtml = .responsetext
End With
With htm.getelementbyid("Name1")
Sheets(1).Cells(RowNumb, 10).Value = .innertext
End With
With htm.getelementbyid("Name2")
Sheets(1).Cells(RowNumb, 11).Value = .innertext
End With
Next RowNumb
End Sub
答案 0 :(得分:0)
显然它与Text to Columns有关。如果之前已使用过,并且指定了空白作为分隔符,那么它将应用于将来的数据导入。奇怪的。无论如何只需进入Text to Columns并删除空白分隔符并接受,然后重做数据导入。