excel - 调整范围和转置数组时出现错误 1004
问题描述
我不会发布完整的代码,因为它非常庞大 - 我将专注于导致错误的部分。
该宏应该复制在 excel 中生成的 URL,在 IE 中打开它们,将源代码复制到另一个工作表,在此代码中查找内容,将结果保存在特定单元格中,删除工作表并转到下一个 URL。它工作得很好,它复制了许多 URL 的源代码,但对于某些 URL,它只是失败了。当我手动打开 URL 时 - 它们运行良好,但 Excel 以某种方式向我抛出了错误。
你们能否检查以下内容以帮助我更好地了解问题出在哪里?
以下是两个示例链接:
这个效果很好 - link1 这个抛出错误 1004 - link2
这是代码:
Sub CC_Check()
Dim ie As InternetExplorer
Dim html As HTMLDocument
Dim URL As Range
Dim Rng As Range
Dim ws1 As Worksheet
Set ws1 = Worksheets("One Code")
Set ie = New InternetExplorer
Set Rng = ws1.Range("A3:A18")
For Each URL In Rng
ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = ws1.Cells(URL.Row, 2).Value & "_" & ws1.Cells(6, 7).Value
ie.Visible = False
ie.navigate URL.Value
Do While ie.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Set html = ie.document
Range("A1").Value = html.DocumentElement.outerHTML
Dim arr
arr = Split(html.DocumentElement.outerHTML, vbLf)
Range("A1").Resize(UBound(arr) + 1, 1).Value = Application.Transpose(arr) '<-- this line causing error 1004
解决方案
有Application.Transpose
很多问题。它失败时
- 该数组只有一个成员 (
UBound(arr) = 1
) - 其中一个字符串的长度 > 32K(但我见过其他情况,当字符串超过 255 个字符时它已经失败)
- 数组大小大于 64K(但是,在 Excel 2016 中,这不会导致运行时错误,而是会导致大小较小的残缺数组
因此,下注是手动进行转换,这很容易。顺便说一句,您应该Worksheet
为您添加的工作表使用 - 变量 - 永远不要依赖Activesheet
. 以下代码仅在不存在时创建新工作表(否则它将清除其内容,以便您可以多次运行代码
Set newWs = Nothing
On Error Resume Next
Set newWs = ThisWorkbook.Sheets(wsName)
On Error GoTo 0
If newWs Is Nothing Then
' Sheet doesn't exist, create a new one and name it
Set newWs = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
newWs.Name = ws1.Cells(URL.row, 2).Value & "x" & ws1.Cells(6, 7).Value
Else
' Sheet already there, clear its content
newWs.UsedRange.ClearContents
End If
(..Load HTML and split..)
' Do your own transpose into a 2nd array and dump that into sheet
Dim brr
ReDim brr(LBound(arr) To UBound(arr), 1 To 1) ' Make it 2-dimensional
Dim i As Long
For i = LBound(arr) To UBound(arr)
brr(i, 1) = arr(i)
Next i
Range("A1").Resize(UBound(arr) + 1, 1).Value = brr
推荐阅读
- visual-studio-code - 如何使用 hjkl 导航上下文菜单 vscode
- ios - Expo 弹出应用程序 - 通过 Firebase 推送在 iOS 中不起作用
- java - Android Studio - 找不到 tools.jar。请检查 X 是否包含有效的 JDK 安装
- python - 当我调用 SPACE.step(1/FPS) 时,我所有的身体位置 Vec2D 变为 NaN
- javascript - 如何将两个javascript动画合二为一?
- python - Python 请求 - 从 GitHub 下载 .py 文件
- android - 想要将 Recyclerview Sqlite 数据传递给片段?
- node.js - 在 Node JS 服务器上启用 HTTPS 时如何解决 502 Bad Gateway 错误?
- stm32 - STM32板被识别为大容量存储设备
- node.js - 从集合中获取最后 N 个条目 | 使用 Mongoose 的分页问题