VBA代码仅在调试模式下有效

时间:2018-01-11 18:28:37

标签: excel vba excel-vba internet-explorer

所以我有这个函数从网页返回一个值。这个问题是,当我单步运行它时,它运行得很好,但是当我正常运行它时会返回另一个值并跳过Cargar。这是代码:

Private Sub Cargar()

Do Until objIE.Busy = False And objIE.readyState = 4
    DoEvents
Loop

End Sub

我正在用这个子测试:

body

当我单步运行它时,它返回“15%”,并在sub中传递参数,而当我使用任何给定参数正常运行时,它只返回“%”。知道为什么会这样吗?任何帮助将不胜感激。

注意: <input type="text" size="128" name="body" value="{{old('body')}}" /> 被定义为公共变量,但到目前为止这并没有给我带来任何不便,因为我有其他功能可以在不同的网站上正常工作。此外,// conf.js exports.config = { framework: 'jasmine', seleniumAddress: 'http://localhost:4444/wd/hub', specs: ['spec.js'], capabilities: { browserName: 'chrome' } } // spec.js describe('Protractor Demo App', function() { it('should have a title', function() { browser.get('http://juliemr.github.io/protractor-demo/'); expect(browser.getTitle()).toEqual('Super Calculator'); }); }); { // launch.json // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/spec.js" } ] } 通常是“等待页面加载”指令。

export interface SmartType {
    type: string;
    [x: string]: any;
}
    

2 个答案:

答案 0 :(得分:1)

在尝试从网页上抓取对象之前,应确保网页已完全加载。包含Application.Wait的行不会为您执行此操作。

将此子添加到您的模块中:

Sub ieBusy(ByVal ieObj As InternetExplorer)
    Do While ieObj.Busy Or ieObj.readyState < 4
        DoEvents
    Loop
End Sub

然后将Application.Wait的行替换为:ieBusy objIE

答案 1 :(得分:1)

因此,在将代码弄乱了几个小时并意识到这一点之后,遗憾的是,解决方案并不像修复Cargar Load IE sub那样简单(因为页面没有“加载”,因为它是JavaScript驱动的) ,我发现这是解决方案:

For Each t In objIE.document.getElementsByTagName("tr")
    DoEvents 'Holy fix
    If t.className = "domino-viewentry" Then
        temp = t.Children(8).innerText
    End If
Next

我很不确定为什么要修复它,并在用msgboxes检查代码的哪些部分没有正确运行时想出了这个,并且循环内的msgbox也修复了它。我很感激您对此为何起作用的评论。