Я только что изучил VBA и работаю над созданием оптимизированной программы планирования.
Мой программный процесс выглядит следующим образом.
Моя программа сначала открывает открывающееся окно (пользовательская форма ufSplash
) примерно на 2 секунды, а затем переходит в окно входа в систему (пользовательская форма ufLogin
). И приложение видимо ложно. (связанный код ниже (1), (1-1))
после обычного входа пользователя, он выгружается и открывается окно настройки проекта (пользовательская форма ufProjectSet
). (соответствующий код ниже (2))
После ввода пользователем значения в окне настроек проекта оно скрывается (не выгружается) и отображается окно настройки алгоритма (пользовательская форма ufOptAlgoSet
). (соответствующий код ниже (3))
при нажатии кнопки команды confirm
в окне настройки алгоритма пользовательская форма скрывается и выполняется алгоритм оптимизации (модуль main
). А в модуле Main
окно прогресса (пользовательская форма ufOptProg
) отображается с vbModeless
для отображения хода оптимизации алгоритма (10%, 20% ... и т. Д.), Из которых код вычисления процента включен в процедура geneticAlgorithm
. (соответствующий код ниже (4), (4-1))
Моя проблема заключается в следующем. Если отлаживать по одной строке за раз, весь код работает нормально.
Мой файл Excel иногда (?) Открывается нормально, но в основном он продолжает загружаться, но не открывается вообще, либо до пользовательской формы процесса (1) ufSplash
, либо до процесса (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