下面是我在宏中实现的3个请求的声明变量.我列出了他们使用的库以及他们在评论中的后期绑定:
Dim XMLHTTP As New MSXML2.XMLHTTP 'Microsoft XML, v6.0 'Set XMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
Dim ServerXMLHTTP As New MSXML2.ServerXMLHTTP 'Microsoft XML, v6.0 'Set ServerXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
Dim http As New WinHttpRequest 'Microsoft WinHttp Services, version 5.1 'Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
Run Code Online (Sandbox Code Playgroud)
我有一些旧的Web抓取宏,它使用Internet Explorer自动化.我想清理编码并加快这些请求的速度.
不幸的是,我注意到,MSXML2.ServerXMLHTTP并且WinHttpRequest在线商店的20个产品测试(34和35秒)比IE自动化更慢,图片和活动脚本关闭(24秒)!MSXML2.XMLHTTP在18秒内执行.我常常看到这三个请求中的一些请求比其他请求快2-3倍的情况,所以我总是测试哪一个表现最好,但从来没有任何请求丢失到IE自动化.
带有结果的主页面如下,它是一页上的所有结果,1500多个,所以请求需要一些时间(如果粘贴到MS Word,则为6500页):
www.justbats.com/products/bat type~baseball /?sortBy = TotalSales Descending&page = 1&size = 2400
然后我从主结果页面打开单个链接:
http://www.justbats.com/product/2017-marucci-cat-7-bbcor-baseball-bat--mcbc7/24317/
我想知道这3个请求是否都是我必须从没有浏览器自动化的网站获取数据的选项.此外 - 浏览器自动化有多可能超过其中一些要求?
UPDATE
我已经使用Robin Mackenzie提供的程序测试了主要结果页面,在运行之前清除了IE缓存.至少在这个特定页面上,缓存似乎没有明显的好处,因为后续请求产生了类似的结果.IE禁用了活动脚本,没有加载图像.
IE自动化方法,文档长度:7593346个字符,处理时间:8秒
WinHTTP方法,文档长度:7824059个字符,处理时间:29秒
XML HTTP方法,文档长度:7830217字符,处理时间:4秒
Server XML HTTP方法,文档长度:7823958个字符,处理时间:26秒
URL下载文件方法,文件长度:7830346字符,处理时间:7秒
对我来说非常令人惊讶的是这些方法返回的字符数量的差异.
我有英文版的Excel和波兰语区域设置.我尝试制作一个代码,它将在数字值之前使用井号符号格式化单元格.
不幸的是,当我将符号粘贴到VBA窗口时,它被转换为"L".宏录制器还将以这种方式格式化的单元格记录为"L".Chr(163)返回"Ł".
更改系统语言设置,本地化设置或键盘设置无效.只有在将区域设置(需要PC重启)更改为英语(英国)后才能正常工作.有没有办法在不改变区域设置的情况下使用此符号?
对于Debug.Print一切正常的行,意味着Option Explicit捕获错误并显示有关未定义变量的弹出窗口.
但是,如果我删除Debug.Print我添加的行以查看是否Option Explicit有效,代码将成功执行.编译也是成功的.它不应该是,因为在第二个ReDim声明中存在拼写错误,"vDailBuys"而不是"vDailyBuys" .
为什么不检测到这个错字?
我使用第二个ReDim来清除数组内容,确定它是否是推荐方式,但它就像一个魅力.
Option Explicit
Option Base 1
Sub test()
Dim vDailyBuys() As Variant
ReDim vDailyBuys(1, 10)
ReDim vDailBuys(1, UBound(vDailyBuys, 2)) As Variant
Debug.Print abcde
End Sub
Run Code Online (Sandbox Code Playgroud) 我有以下部分代码,随着时间的推移,它的执行速度会减慢。我的 Word 文档有超过 200 页和大约 12000 个段落。在第 3000 段左右,可以说执行速度比开始时慢了几倍。
有什么办法可以让速度保持在同一水平?也许遍历段落对于大文档根本没有办法?
Dim worddoc As Word.Document
Dim ParaCount as long, J as long, x as long
Dim RowData as string
With worddoc
ParaCount = .Paragraphs.Count
For J = 1 To ParaCount
RowData = .Paragraphs(J).Range.Text
x = x + 1
If x Mod 10 = 0 Then Application.StatusBar = x
Next ParaCount
End With
Run Code Online (Sandbox Code Playgroud) 我想用VBA编辑我的UserForm对象.
当我使用以下内容时,我收到错误,如帖子标题:
Sub myTest()
ThisWorkbook.VBProject.VBComponents("UserForm1").Properties("Caption") = "myCaption"
End Sub
Run Code Online (Sandbox Code Playgroud)
我尝试将"标题"更改为"标题",同样的错误.此错误发生在我尝试设置Width或Height属性时,并非总是在第一次,但是当我再次运行代码来调整大小时.
编辑1:启用宏设置中的"信任对VBA项目对象模型的访问".
编辑2:创建新工作簿和用户窗体时不会发生错误.在工作簿中重新创建已发生错误的UserForm时,确实会发生这种情况.
编辑3:添加Unload UserForm1或Set UserForm1 = Nothing之前没有帮助.
编辑4:对于新工作簿,如果我创建UserForm并从模块运行此代码,但右键单击UserForm - > View Object后,我收到一个错误:"无法将焦点移动到控件,因为它是不可见的,未启用,或者不接受焦点的类型." 当我确认,在连续的宏运行中,我收到错误,如在帖子标题.
编辑5:Excel 2010和2016上也是如此.
我刚刚检查了一些GitHub代码,它充满了以"VBA"开头的语句,没有它就可以正常工作.
添加"VBA"背后的原因是什么?