2017-01-22 3 views
1

У меня возникла проблема сбрасывания всего массива в лист. Является ли он b/c его не определенным вариантом?Array Wont Dump to Sheet? VBA

Sub pix() 
    Dim htm As Object 
    Dim Tr As Object 
    Dim Td As Object 
    Dim Tab1 As Object 
    Dim tblArr(500) As String 
    Dim this$ 
    Dim counter# 

    Web_URL = "pathtosite" 
    Set HTML_Content = CreateObject("htmlfile") 

    With CreateObject("msxml2.xmlhttp") 
     .Open "GET", Web_URL, False 
     .send 
     HTML_Content.body.innerHTML = .responseText 
    End With 
    counter = 0 

    For Each Tab1 In HTML_Content.getElementsByTagName("div") 
     If Tab1.className = "resizing-cig" Then 
      this = Tab1.innerText 
      tblArr(counter) = this 
     End If 
     counter = counter + 1 
    Next Tab1 

    ThisWorkbook.Sheets("Sheet2").Range("A1:A500").Value2 = tblArr 'This line 

End Sub 
+1

Вы должны определить его как 2D массив - 'Dim tblArr (1 К 500, 1 к 1)' и загрузить его как 'tblArr (счетчик, 1) = ... 'и initialize' counter = 1' –

+0

@chrisneilsen Ну так же, как я думал, насколько я был идиотом, забыв, что объекты WS - это 2d массивы, получается, что это тоже не работает. –

+1

«не работает» не так много ... –

ответ

1

Сбор вопросов от комментариев

  1. место 2D массив на лист только
  2. использование размер динамического массива
  3. приращение счетчика, когда новая точка данных найдена
  4. факультативные: четкие старые данные
  5. объявить все переменные - вы должны использовать Option Explicit
  6. счет для возможности каких-либо результатов

Sub pix() 
    Dim htm As Object 
    Dim Tr As Object 
    Dim Td As Object 
    Dim Tab1 As Object 
    Dim tblArr() As String 
    Dim this$ 
    Dim counter# 
    Dim Web_URL$ 
    Dim HTML_Content As Object 

    ' Clear old data 
    With ThisWorkbook.Sheets("Sheet2") 
     .Range(.Cells(1, 1), Cells(.Rows.Count, 1).End(xlUp)).ClearContents 
    End With 

    Web_URL = "http://magic.wizards.com/en/articles/archive/card-image-gallery/eternal-masters" 
    Set HTML_Content = CreateObject("htmlfile") 

    With CreateObject("msxml2.xmlhttp") 
     .Open "GET", Web_URL, False 
     .send 
     HTML_Content.body.innerHTML = .responseText 
    End With 

    ReDim tblArr(1 To 500) As String 
    counter = 1 

    For Each Tab1 In HTML_Content.getElementsByTagName("div") 
     If Tab1.className = "resizing-cig" Then 
      this = Tab1.innerText 
      tblArr(counter) = this 
      counter = counter + 1 

      ' Increase array size if full 
      If counter > UBound(tblArr) Then 
       ReDim Preserve tblArr(1 To UBound(tblArr) + 500) 
      End If 
     End If 
    Next Tab1 

    ' resize result array to actual results 
    If counter > 1 Then 
     ReDim Preserve tblArr(1 To counter - 1) 
     ' Transpose to 2D array 
     ThisWorkbook.Sheets("Sheet2").Range("A1").Resize(UBound(tblArr), 1).Value2 = Application.Transpose(tblArr) 
    End If 
End Sub 
0

Привет сбросить значение от его лучше использовать цикл по каждому элементу

j=0 
for each element in tblArr 

    if element <> "" then 

    ThisWorkbook.Sheets("Sheet2").Range("A1:A500").offset(j,0).Value2 = element 
    j=j+1 

    end if 
next element 

Надеется, что это помогает вам :).

+0

Насколько я ценю ваш вклад, это не эффективный способ сделать это. Написание непосредственно на листе не один раз является наихудшим и мой законченный результат, когда я закончил с этим проектом с 1k + линиями. Мой метод выше работает только что у меня были некоторые ошибки пользователя, идущие на –

+1

Хорошо, честно, point. Я проверю эффективность того, что вы предлагаете. Возможно, я не помог вам, но, по крайней мере, я кое-что узнал;). – Tackgnol

+0

Имейте в виду, если вы используете мой метод, вам нужно настроить размер диапазона и размер массива. Вещи становятся странными на выходе, если есть дисперсия (я уверен, что вы заметите, когда играете с ней) –