当其他代码执行时,Excel VBA窗体上的Webbrowser控件中未连续播放Gif
我创建了一个表单,用于获取用户凭据、登录公司系统和请求导出。单击“获取导出”按钮时,我会显示gif(旋转的轮子)和文本(首先是启动Internet Explorer实例时的“建立连接”,然后应该更改为“验证用户凭据”)。我遇到的问题是gif在创建/显示后,在整个代码执行过程中没有按照我希望的方式一致地播放 单击前填写表单 用户表单代码:当其他代码执行时,Excel VBA窗体上的Webbrowser控件中未连续播放Gif,excel,forms,vba,webbrowser-control,userform,Excel,Forms,Vba,Webbrowser Control,Userform,我创建了一个表单,用于获取用户凭据、登录公司系统和请求导出。单击“获取导出”按钮时,我会显示gif(旋转的轮子)和文本(首先是启动Internet Explorer实例时的“建立连接”,然后应该更改为“验证用户凭据”)。我遇到的问题是gif在创建/显示后,在整个代码执行过程中没有按照我希望的方式一致地播放 单击前填写表单 用户表单代码: Dim progresslbl As Object, progressbar As Object Dim webBr As Object 'vbNewLine
Dim progresslbl As Object, progressbar As Object
Dim webBr As Object
'vbNewLine for linebreak in msgbox
Private Sub GetExports_Click()
'Call FetchExports
number = login.number.Text
username = login.username.Text
password = login.password.Text
Label2.Enabled = False
Label4.Enabled = False
login.number.Enabled = False
login.username.Enabled = False
login.password.Enabled = False
login.Height = login.Height * 1.02
Set webBr = login.Controls.Add("Shell.Explorer.2", "x", True)
With webBr
.Navigate "C:\Users\Me\Dropbox\Macros\loadspinner.html"
.Width = 12
.Height = 12
.Top = Label4.Top + 30
.Left = 17.25
.Visible = True
End With
Set progresslbl = login.Controls.Add("Forms.Label.1", "Progress", True)
With progresslbl
.Caption = "Establishing Connection"
.Width = 150
.Height = 21.75
.Top = Label4.Top + 31.25
.Left = 32
.Visible = True
End With
Do While webBr.Busy Or webBr.ReadyState <> READYSTATE_COMPLETE
DoEvents 'Starts the loadspinner gif
Loop
DoEvents
'Call IE instance
Call GetIE
DoEvents
'Wait for system to get successful instance via loop that tests for control and number of tabs
progresslbl.Caption = "Validating User Credentials"
login.Height = login.Height * 1.04
Set progressbar = login.Controls.Add("Forms.Label.1", "Progressbar", True)
With progressbar
.BackColor = RGB(29, 104, 176)
.Width = 10 '-> 150 finish
.Height = 7.75
.Top = Label4.Top + 47 '280
.Left = 17.25
.Visible = True
End With
DoEvents
' Do While progressbar.Width <> 150
' Application.Wait (Now + TimeValue("0:00:01"))
' progressbar.Width = progressbar.Width + 5
' DoEvents
' Loop
'Proceed with login credentials and wait until we successfully get in (and don't receive popup)
End Sub
点击后形成
场景1:纺车gif直到GetIE()
完成后才会显示
场景2:纺车gif在首次创建时显示,但即使在GetIE()
完成后,文本仍停留在“建立连接”状态
我尝试使用中提供的方法,但无法使其工作。也许是因为我在用后期装订
我的问题:
Dim progresslbl As Object, progressbar As Object
Dim webBr As Object
'vbNewLine for linebreak in msgbox
Private Sub GetExports_Click()
'Call FetchExports
number = login.number.Text
username = login.username.Text
password = login.password.Text
Label2.Enabled = False
Label4.Enabled = False
login.number.Enabled = False
login.username.Enabled = False
login.password.Enabled = False
login.Height = login.Height * 1.02
Set webBr = login.Controls.Add("Shell.Explorer.2", "x", True)
With webBr
.Navigate "C:\Users\Me\Dropbox\Macros\loadspinner.html"
.Width = 12
.Height = 12
.Top = Label4.Top + 30
.Left = 17.25
.Visible = True
End With
Set progresslbl = login.Controls.Add("Forms.Label.1", "Progress", True)
With progresslbl
.Caption = "Establishing Connection"
.Width = 150
.Height = 21.75
.Top = Label4.Top + 31.25
.Left = 32
.Visible = True
End With
Do While webBr.Busy Or webBr.ReadyState <> READYSTATE_COMPLETE
DoEvents 'Starts the loadspinner gif
Loop
DoEvents
'Call IE instance
Call GetIE
DoEvents
'Wait for system to get successful instance via loop that tests for control and number of tabs
progresslbl.Caption = "Validating User Credentials"
login.Height = login.Height * 1.04
Set progressbar = login.Controls.Add("Forms.Label.1", "Progressbar", True)
With progressbar
.BackColor = RGB(29, 104, 176)
.Width = 10 '-> 150 finish
.Height = 7.75
.Top = Label4.Top + 47 '280
.Left = 17.25
.Visible = True
End With
DoEvents
' Do While progressbar.Width <> 150
' Application.Wait (Now + TimeValue("0:00:01"))
' progressbar.Width = progressbar.Width + 5
' DoEvents
' Loop
'Proceed with login credentials and wait until we successfully get in (and don't receive popup)
End Sub
DoEvents
?我觉得我可能用得太多了?我应该如何使用DoEvents
GetIE()
),而不是等到结束时跳过(或快速浏览其他文本)DoEvents
只是将控制权传递给处理器,以执行队列中的任何任务/消息,然后再将控制权返回给执行代码。听起来,在vba中,您想要的是极其复杂的,因为它是单线程执行,不能同时运行多个作业。如果表单尚未设置为“非模态”,并在继续执行之前强制暂停加载gif,您可能会更幸运。似乎所做的只是按照您的建议更改登录表单的模态属性。非常感谢。嗨,我知道这是一个旧的线程,但你是如何实现文本框的外观?它看起来几乎像HTML表单。DoEvents
只是将控制权传递给处理器,以执行队列中的任何任务/消息,然后再将控制权返回给执行代码。听起来,在vba中,您想要的是极其复杂的,因为它是单线程执行,不能同时运行多个作业。如果表单尚未设置为“非模态”,并在继续执行之前强制暂停加载gif,您可能会更幸运。似乎所做的只是按照您的建议更改登录表单的模态属性。非常感谢。嗨,我知道这是一个旧的线程,但你是如何实现文本框的外观?它看起来几乎像HTML表单。