小编Rys*_*zyk的帖子

VBA - XMLHTTP和WinHttp请求速度

下面是我在宏中实现的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 xmlhttprequest excel-vba web-scraping

12
推荐指数
2
解决办法
4987
查看次数

不能在VBA中使用GBP(£)符号

我有英文版的Excel和波兰语区域设置.我尝试制作一个代码,它将在数字值之前使用井号符号格式化单元格.

不幸的是,当我将符号粘贴到VBA窗口时,它被转换为"L".宏录制器还将以这种方式格式化的单元格记录为"L".Chr(163)返回"Ł".

更改系统语言设置,本地化设置或键盘设置无效.只有在将区域设置(需要PC重启)更改为英语(英国)后才能正常工作.有没有办法在不改变区域设置的情况下使用此符号?

excel vba excel-vba

7
推荐指数
1
解决办法
948
查看次数

Option Explicit没有看到一个未声明的变量,但适用于其他变量

对于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)

excel vba excel-vba

6
推荐指数
1
解决办法
295
查看次数

VBA - Word - 随着时间的推移,遍历段落的速度会令人难以置信地变慢

我有以下部分代码,随着时间的推移,它的执行速度会减慢。我的 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 ms-word

5
推荐指数
1
解决办法
4460
查看次数

UserForm错误:对象'_VBComponent'的方法'属性'失败

我想用VBA编辑我的UserForm对象.

当我使用以下内容时,我收到错误,如帖子标题:

Sub myTest()
    ThisWorkbook.VBProject.VBComponents("UserForm1").Properties("Caption") = "myCaption"
End Sub
Run Code Online (Sandbox Code Playgroud)

我尝试将"标题"更改为"标题",同样的错误.此错误发生在我尝试设置WidthHeight属性时,并非总是在第一次,但是当我再次运行代码来调整大小时.

编辑1:启用宏设置中的"信任对VBA项目对象模型的访问".

编辑2:创建新工作簿和用户窗体时不会发生错误.在工作簿中重新创建已发生错误的UserForm时,确实会发生这种情况.

编辑3:添加Unload UserForm1Set UserForm1 = Nothing之前没有帮助.

编辑4:对于新工作簿,如果我创建UserForm并从模块运行此代码,但右键单击UserForm - > View Object后,我收到一个错误:"无法将焦点移动到控件,因为它是不可见的,未启用,或者不接受焦点的类型." 当我确认,在连续的宏运行中,我收到错误,如在帖子标题.

编辑5:Excel 2010和2016上也是如此.

excel vba excel-vba userform

5
推荐指数
1
解决办法
412
查看次数

"VBA".前缀,例如VBA.Randomize vs Randomize,有什么区别?

我刚刚检查了一些GitHub代码,它充满了以"VBA"开头的语句,没有它就可以正常工作.

添加"VBA"背后的原因是什么?

excel vba excel-vba

4
推荐指数
1
解决办法
67
查看次数