我刚刚学习了VBA,并且正在制定优化的计划程序。
我的编程过程如下。
我的程序首先打开打开窗口(用户窗体ufSplash
)约2秒钟,然后进入登录窗口(用户窗体ufLogin
)。并且可见的应用程序是错误的。 (下面的(1),(1-1)中的相关代码)
在用户正常登录后,将其卸载并打开项目设置窗口(用户窗体ufProjectSet
)。 (下面的相关代码(2))
在项目设置窗口中用户输入值后,将其隐藏(不卸载),并显示算法设置窗口(用户格式ufOptAlgoSet
)。 (下面的相关代码(3))
在算法设置窗口中单击命令按钮confirm
时,将隐藏用户窗体并执行优化算法(模块main
)。在模块Main
中,进度窗口(用户窗体ufOptProg
)显示为vbModeless
,用于显示优化算法的进度(10%,20%等),其中百分比计算代码包含在过程geneticAlgorithm
中。 (以下(4),(4-1)下面的相关代码)
我的问题如下。如果一次调试一行,则所有代码都是正常的。
我的Excel文件有时会正常打开(?),但大多数情况下它将继续加载但根本没有打开,或者直到process(1)的用户窗体ufSplash
为止,或者直到process(1-1) )的用户表单ufLogin
。但是,在加载过程中,如果单击另一个excel文件将其打开,则会将其打开。其他所有文件均正常打开,只有我的文件有问题。另外,如果我复制文件,则复制的文件几乎不会因上述问题而打开。我尝试更改Application.Visible = True
,但这是相同的。另外,我尝试删除ufSplash
或ufSplash
和ufLogin
,但这有时与问题相同。
在上述过程(4)中,显示了进度窗口,但窗口上没有任何内容。优化算法完成后,可以正常显示内容。
用户表单ufProjectSet
有很多控件,大约600 EA。有问题吗?另一台计算机(Office 2015)的文件存在相同的问题。 (我的计算机是Office 2013)
我的代码如下。如果有人想要我的所有代码,我可以发送Excel文件。 请请专家解决我的问题。
(1)首先,当我的文件启动时,启动以下事件。
Private Sub Workbook_Open()
Application.Visible = false
ThisWorkbook.Worksheets("Initial Setting").Visible = True
ThisWorkbook.Worksheets("Cycle Schedule").Visible = True
ThisWorkbook.Worksheets("Log").Visible = True
ThisWorkbook.Worksheets("Report").Visible = True
ThisWorkbook.Worksheets("DB").Visible = True
ThisWorkbook.Worksheets("UserInfo").Visible = True
Dim dtDelay As Date
dtDelay = Now
ufSplash.Show
If Now < (dtDelay + TimeSerial(0, 0, 2)) Then
Application.Wait dtDelay + TimeSerial(0, 0, 2)
End If
Unload ufSplash
ufLogin.Show
End Sub
(1-1)用户表单uflogin
的代码如下。
Private Sub btnClose_Click()
Application.Quit
End Sub
Private Sub btnConfirm_Click()
Dim loginData As Range
Dim pwd As String
Dim name As String
Set loginData = ThisWorkbook.Sheets("UserInfo").Range("A2:C3")
On Error Resume Next
pwd = Application.VLookup(Me.txtId, loginData, 2, 0)
name = Application.VLookup(Me.txtId, loginData, 3, 0)
If Err.number <> 0 Then
MsgBox "The corresponding ID does not exist.\n Please check again.", vbCritical, "ID Failure"
Exit Sub
End If
If pwd = Trim(Me.txtPwd) Then
MsgBox "Login success.", vbInformation, "Login"
Unload Me
Else
MsgBox "Password incorrect.", vbCritical, "Login Failure"
End If
ufProjectSet.Show
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFromControlMenu Then
MsgBox "x button does not work"
Cancel = True
End If
End Sub
(2)用户表单ufProjectSet
的代码如下。
Private Sub btnCoreActNext_Click()
Me.Hide
ufOptAlgoSet.Show
End Sub
(3)用户表单ufOptAlgoSet
的代码如下。
Private Sub btnAlgoConfrim_Click()
Me.Hide
Call Main
End Sub
(4)模块main
的代码如下。
Public Sub Main()
Application.ScreenUpdating = False
ufOptProg.Show vbModeless
Call InitialScheduling
Call geneticAlgorithm
Unload ufOptProg
ufResult.Show
End sub
(4-1)用户表单ufOptProg
的代码如下。
Private Sub UserForm_Initialize()
BarWidth = 0
Me.lbProgressbar.Caption = "Preparing for optimization......"
Me.progressBar.Width = BarWidth
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Unload Me
End Sub
答案 0 :(得分:0)
-------最近发布--------
我猜想我已经解决了问题,但是文件重复出现相同的问题。 我发现了有关(1)的新解决方案。通过下面的URL,我解决了我的问题(1),但是有人不知道为什么会发生此问题。...
https://www.purplefrogsystems.com/blog/2015/06/excel-crashes-when-enabling-macros/
-------过去的帖子--------- 我是这个问题的提问者。 我发现了问题(1)发生的原因。 问题非常简单...这是在第一个事件“ Workbook_open()”中。 某些代码应作如下修改;
uflogin.show-> uflogin.show vbmodeless
这是因为事件“ workbook_open”应该在启动excel文件的最后一个代码“ end sub”之前完成。因此,该事件可以通过使用vbmodeless显示用户窗体“ uflogin”来结束“ end sub”的最后一行。
Private Sub Workbook_Open()
Application.Visible = false
ThisWorkbook.Worksheets("Initial Setting").Visible = True
ThisWorkbook.Worksheets("Cycle Schedule").Visible = True
ThisWorkbook.Worksheets("Log").Visible = True
ThisWorkbook.Worksheets("Report").Visible = True
ThisWorkbook.Worksheets("DB").Visible = True
ThisWorkbook.Worksheets("UserInfo").Visible = True
Dim dtDelay As Date
dtDelay = Now
ufSplash.Show
If Now < (dtDelay + TimeSerial(0, 0, 2)) Then
Application.Wait dtDelay + TimeSerial(0, 0, 2)
End If
Unload ufSplash
ufLogin.Show
End Sub