2017-01-22 60 views
1

我有一個問題將整個數組轉儲到工作表中。它沒有被定義爲變體嗎?數組不會轉儲到工作表? 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

需要將其定義爲一個二維陣列的可能性 - '暗淡tblArr(1至500,1對1)'和裝載它像'tblArr(計數器, 1)= ...'並初始化'計數器= 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

喜轉儲值最好使用foreach循環

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

好吧,點。我會檢查你提議的效率。 也許我沒有幫你,但至少我學到了一些東西;)。 – Tackgnol

+0

請記住,如果您使用我的方法,您需要調整範圍與數組大小。如果有差異,事情會在輸出中變得怪異(當你玩弄它的時候你會注意到) –