是否有一种万无一失的方式让脚本等到Internet Explorer完全加载?
两者oIE.Busy
和/或oIE.ReadyState
都没有按照他们应该的方式工作:
Set oIE = CreateObject("InternetExplorer.application")
oIE.Visible = True
oIE.navigate ("http://technopedia.com")
Do While oIE.Busy Or oIE.ReadyState <> 4: WScript.Sleep 100: Loop
' <<<<< OR >>>>>>
Do While oIE.ReadyState <> 4: WScript.Sleep 100: Loop
Run Code Online (Sandbox Code Playgroud)
还有其他建议吗?
我有自己签名的.pfx证书.我已经签署了我的VSTO(Visual Studio中的Excel加载项项目类型)项目的ClickOnce清单.最近我们已经将应用程序从.Net 3.5迁移到4.5,从Office 2007迁移到2010以后的项目(过去工作),现在它给了我一个错误:
签名时出错:未知错误"-2147012894"
SignTool错误:发生了意外的内部错误
证书完全有效且未过期
以前有人有过这种错误吗?有什么建议?
我不喜欢未初始化的 VBA 数组,因为每次使用之前都需要检查数组是否已初始化UBound()
或For Each
避免异常,并且没有本机 VBA 函数来检查它。这就是为什么我初始化数组,至少用a = Array()
. 这在大多数情况下消除了额外检查的需要,因此一维数组没有问题。
出于同样的原因,我尝试创建一个空的二维数组。不可能简单地做ReDim a(0 To -1, 0 To 0)
,转置一维空数组或类似的东西。我偶然遇到的唯一方法是使用MSForms.ComboBox
,将空数组分配给.List
属性并将其读回。这是在 Excel 和 Word 中工作的示例,您需要插入UserForm
到 VBA 项目中,放置ComboBox
在其上,并添加以下代码:
Private Sub ComboBox1_Change()
Dim a()
ComboBox1.List = Array()
a = ComboBox1.List
Debug.Print "1st dimension upper bound = " & UBound(a, 1)
Debug.Print "2nd dimension upper bound = " & UBound(a, 2)
End Sub
Run Code Online (Sandbox Code Playgroud)
组合更改后的输出为:
1st dimension upper bound = -1
2nd …
Run Code Online (Sandbox Code Playgroud) 我在Windows上创建一个VB脚本,在IE中打开一个站点.我想要的:检测网页何时加载并显示消息.我通过使用sleep(WScript.Sleep
)来实现这一目标.网站加载时的秒数.但是,该网站在中途弹出用户名,密码.只有当用户输入凭据时,才会完成加载页面.所以我不想使用"睡眠"大约几秒钟,而是使用精确的函数或检测页面加载的方法.我查了线路和尝试使用Do While
循环,onload
,onclick
功能,但没有任何工程.为了简化,即使我编写脚本来打开像yahoo这样的站点并检测,在页面加载时显示消息"Hi":如果不使用sleep(WScript.Sleep
),它将无法工作.
我的场景是 - 我在.xls文件中有一组数据,在oracle数据库表中有另一组数据.我想使用excel vba导入两个数据然后执行join(sql like),最后将数据保存在某个工作簿中.
问题 - 我不知道如何在vba中获取两组不同的数据然后执行连接.在.Net中有DataSet对象,我们可以在其中保存导入的数据,然后对其执行任何查询但是vba我该怎么做?
我正在开发一个 VBScript,用于在桌面上显示“计算机”图标。我已经能够使用以下代码为 IE 执行一个操作,但是由于计算机是一个似乎没有实际位置的“特殊文件夹”,我无法使用相同的方法。有谁知道如何通过 VBScript 启用它?
IE 快捷代码:
Set objShell = WScript.CreateObject("WScript.Shell")
'Create Shortcut for IE on desktop
allUsersDesktop = objShell.SpecialFolders("AllUsersDesktop")
usersDesktop = objShell.SpecialFolders("Desktop")
Set objShortCut = objShell.CreateShortcut(usersDesktop & "\Internet Explorer.lnk")
objShortCut.TargetPath = "C:\Program Files\Internet Explorer\iexplore.exe"
objShortCut.Description = "Open Internet Explorer"
objShortCut.Save
Run Code Online (Sandbox Code Playgroud) 我试图将以制表符分隔的文本文件中存储的公式加载到工作表中的某个范围。我已经使用该函数Split(Expression As String, Delimiter)
正确地将每一行依次加载到一维数组中,但是遇到了有关返回的数组类型的问题。
Split函数仅返回字符串类型的数组,而我需要一个变量类型数组来将范围设置为。这是因为使用字符串类型数组设置单元格的公式会导致将单元格值设置为原始文本,即使字符串以等号开头。
'Example code to demonstrate the problem:
Sub Tester()
Dim StringArr(1 To 3) As String
StringArr(1) = "= 1"
StringArr(2) = "= 2"
StringArr(3) = "= 3"
Range("Sheet1!$A$1:$C$1").Formula = StringArr
'Cells display raw string until edited manually
Dim VariantArr(1 To 3) As Variant
VariantArr(1) = "= 1"
VariantArr(2) = "= 2"
VariantArr(3) = "= 3"
Range("Sheet1!$A$2:$C$2").Formula = VariantArr
'Cells display formula result correctly
End Sub
Run Code Online (Sandbox Code Playgroud)
结果输出:
我想知道是否有一种方法可以将Split
函数返回的数组转换为变量类型数组,最好没有循环。我知道我可以在一个循环中分别设置每个单元格公式,但是我试图使其尽可能高效和整洁。
我正在使用Microsoft Excel for Mac 2011 …
要暂停代码直到网页完全加载,我几乎一直都在使用下面的方法取得了巨大的成功.
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
Run Code Online (Sandbox Code Playgroud)
但偶尔,我会在方法确定页面已完全加载后看到文本内容加载,因此不会提取内容.
但是,如果我通过F8单步执行代码,则每次都会提取内容.这是我可以反复按F8键的速度.
那么如何在代码继续提取数据之前检查以确保页面及其所有内容是否已完全加载?
在这两种情况下,IE都是无形的运行.但是,我已经尝试使用IE浏览器,并且在我正在使用的页面上的这个特定位置实际上有内容.
这是在Excel 2016中使用VBA脚本完成的.具体内容请求如下:
'get item name from page and write it to the first cell on the first empty row available
Set itemName = objIE.document.querySelector(".the-item-name")
Worksheets("Results").Range("A1048576").End(xlUp).Offset(1, 0).Value = itemName.innerText
Run Code Online (Sandbox Code Playgroud)
我已经阅读了Excel VBA:等待在Internet Explorer中执行JavaScript,因为我认为在加载文档后可能会添加值,以防止任何人抓取数据.但是,我似乎无法识别可能正在执行此操作的任何脚本.并不意味着它不存在.我还是看不到它.
具有此问题的页面的具体示例是URL
https://www.homedepot.ca/en/home/p.dry-cloth-refills-32---count.1000660019.html
最初product-total-price
div元素包含破折号( - ),在加载价格之前,这就是请求将返回的内容:- / each
而不是$11.29 / each
.
我有一个解决方法,但它不像我希望的那样高效或简洁.我测试返回的字符串是否存在破折号.如果它在那里,循环并再次检查它,否则捕获它并将其插入工作表.
setPriceUM:
Set hdPriceUM = objIE.document.querySelector(".product-total-price").innerTe????xt
hdPriceUMString = hdPriceUM.innerText
stringTest = InStr(hdPriceUMString, "-")
If stringTest = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试抓取以下网页
http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?flag=0&expandable=7
在搜索框(它说进入股代名称/代码/ ID) ,在这里我有困难,我可以框的值设置为凭证编号500222通过使用下面的代码,
IE.Document.All.Item("ctl00$ContentPlaceHolder1$GetQuote1_smartSearch").innerText = "500222"
但是,如果您尝试在搜索框中手动输入值500222,则会出现一个下拉框,该框将是相应脚本的名称.但是,我无法通过VBA使其工作.任何帮助都会很棒.
对此我很陌生,请耐心等待.我需要从嵌入式谷歌地图中提取标记坐标 - 示例链接是http://www.picknpay.co.za/store-search,我想提取搜索中地图中生成的所有标记位置.考虑使用像ParseHub这样的服务,但在走这条路线之前,我以为我会用SO /我自己动手.
必须有一种更简单的方法来查找存储在地图中的标记的坐标,而不是手动浏览它们并单独搜索它们的坐标?