justinyutw wrote:
會 Error 在 .PasteSpecial NoHTMLFormatting:=True
...(恕刪)
justinyutw wrote:
如果是使用 Debug 模式執行,則完全不會有 Error產生,並執行完畢。請問是和網路品質有關嗎或是哪個指令執行太慢了造成貼不過去?
...(恕刪)
這我無法回答,我用迴圈跑了幾千次都無法重現出您的錯誤
您可以試著把這行
.PasteSpecial NoHTMLFormatting:=True
改成
.Paste
試看看
單純資料可以不用nohtml,因為這棟樓的範例都是抓網頁資料
所以我才會一律用nohtml的功能
或是使用348樓的副程式
在貼上表格之前,稍微延遲一下程式的速度
justinyutw wrote:
雖然自己的方法不是很好,就是想要不超過65536下,一部份一部份的轉置。
...(恕刪)
這不是不好的方法,不用迴圈,在陣列中只取出想要的部分,是arraylist進階用法
我沒預料到有人只看msdn的說明,在google不到範例的情況下,自己想到這個方式
因為屬於特殊技巧,加上沒人認真看,所以一直都用arraylist的基本用法來寫範例
justinyutw wrote:
照著 ArrayList 的 msdn 說明,嘗試著新的指令,卻試不出來。
與其說要試出小量 Transpose,不如說是想知道遇到一個新指令,照著說明輸入指令,但還是Error,要如何才能改到好。
google只有 msdn 的說明,卻沒有人使用後的心得可供參考。
...(恕刪)
大部份的人,都不會深入了解,您google不到使用心得,很正常
msdn沒vba的寫法,arraylist是.net的功能,照著參數說明寫會出錯
不是所有的參數都可以正常用在vba
vba的寫法應該要用getrange + toarray
請看範例,使用f8逐行執行,試著自行理解
'======================================
Sub test5()
Cells.Clear
Dim DataArray As Object, TargetArray(), lastrow As Double
Set DataArray = CreateObject("System.Collections.ArrayList")
lastrow = 30
For i = 1 To lastrow
DataArray.Add i
Next i
Range(Cells(1, 1), Cells(1, lastrow)) = DataArray.toarray()
Range(Cells(1, 1), Cells(lastrow, 1)) = Application.Transpose(DataArray.toarray())
Dim Start As Integer '>=0 <=lastrow-1 , or as long as double ...
Dim N As Integer 'start+n <=lastrow , or as long as double ...
Start = 12: N = 7
TargetArray = DataArray.getrange(Start, N).toarray
Range(Cells(3, 5), Cells(3, 5 + N - 1)) = TargetArray
Start = 0: N = 4
TargetArray = DataArray.getrange(Start, N).toarray
Range(Cells(5, 5), Cells(5, 5 + N - 1)) = TargetArray
Start = 3: N = 10
TargetArray = DataArray.getrange(Start, N).toarray
Range(Cells(7, 5), Cells(7, 5 + N - 1)) = TargetArray
Start = 21: N = 8
TargetArray = DataArray.getrange(Start, N).toarray
Range(Cells(9, 5), Cells(9 + N - 1, 5)) = Application.Transpose(TargetArray)
Start = 15: N = 2
TargetArray = DataArray.getrange(Start, N).toarray
Range(Cells(9, 7), Cells(9 + N - 1, 7)) = Application.Transpose(TargetArray)
Start = 0: N = 30
TargetArray = DataArray.getrange(Start, N).toarray
Range(Cells(9, 9), Cells(9 + N - 1, 9)) = Application.Transpose(TargetArray)
Set DataArray = Nothing
End Sub
'======================================