我在Excel中有一个宏,它从两个其他工作簿中提取数据并导入它。在此过程中,会显示一个进度条,用户可以通过取消和标准X按钮随时退出。
当我使用这两个按钮中的任何一个退出进程时,当我尝试再次启动宏时,它会给出错误429。不知怎的,我猜我的表格仍然活跃。按下VBA编辑器中的重置按钮后,我可以再次启动宏而没有任何错误。
我的表单上还有一个OK按钮,当导入过程完全结束时,该按钮变为活动状态。
所有这三个按钮都执行相同的代码片段,即关闭所有内容。唯一的区别是它们在执行的不同点使用,这使得调试有点混乱。
我的进度条:
用户形式中的代码:
Dim Button As String
Sub StartForm(CalledFrom As String)
Button = CalledFrom
End Sub
Private Sub UserForm_Initialize()
ProgressBar.PBOKButton.Enabled = False
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
If ProgressBar.PBBar.Width < 200 Then
If MsgBox("Wollen Sie den Vorgang wirklich abbrechen?", vbYesNo + vbQuestion, "Extrahiere Daten...") = vbNo Then
'Do nothing
Cancel = True
Else
ExitProcess
End If
Else
ExitProcess
End If
End If
End Sub
Private Sub UserForm_Activate()
If Button = "GetDataButton" Then
GetData
End If
End Sub
Private Sub PBOKButton_Click()
ExitProcess
End Sub
Private Sub PBCancelButton_Click()
If MsgBox("Wollen Sie den Vorgang wirklich abbrechen?", vbYesNo + vbQuestion, "Extrahiere Daten...") = vbYes Then
ExitProcess
End If
End Sub
代码片段以结束它(存储在我的宏中)
Sub ExitProcess()
KostenstellenWB.Close SaveChanges:=False
MAStundenWB.Close SaveChanges:=False
ExcelApp.Quit
Set ExcelApp = Nothing
End
End Sub
错误
感谢您的帮助。
答案 0 :(得分:0)
我曾经在Word VBA中遇到类似的问题,虽然我不记得也找不到所有细节,但解决方案如下:
' In module myUserForm
'
Dim Button As String
Dim myCancel as Boolean
Sub StartForm(CalledFrom As String)
Button = CalledFrom
myCancel= False
Me.Show
' Control returns after the form has been unloaded
If (myCancel = True) Then
ExitProcess
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
If ProgressBar.PBBar.Width < 200 Then
If MsgBox("Wollen Sie den Vorgang wirklich abbrechen?", vbYesNo + vbQuestion, "Extrahiere Daten...") = vbNo Then
'Do nothing
Cancel = True
Else
myCancel = True
Unload Me ' unload the form from memory
End If
Else
myCancel = True
Unload Me ' unload the form from memory
End If
End If
End Sub
也就是说,卸载表单后运行ExitProcess。请注意,这仍然发生在用户表单模块中。如果这不起作用,那么你必须将ExitProcess函数移动到StartForm的调用者,我假设它在userform模块之外,所以你肯定不再使用该模块了。
答案 1 :(得分:0)