Файл Excel (.xlms) продолжает загружаться, но не открывается. однако при загрузке он открывается, если щелкнуть другой файл Excel для открытия - PullRequest
0 голосов
/ 04 ноября 2018

Я только что изучил VBA и работаю над созданием оптимизированной программы планирования.

Мой программный процесс выглядит следующим образом.

  1. Моя программа сначала открывает открывающееся окно (пользовательская форма ufSplash) примерно на 2 секунды, а затем переходит в окно входа в систему (пользовательская форма ufLogin). И приложение видимо ложно. (связанный код ниже (1), (1-1))

  2. после обычного входа пользователя, он выгружается и открывается окно настройки проекта (пользовательская форма ufProjectSet). (соответствующий код ниже (2))

  3. После ввода пользователем значения в окне настроек проекта оно скрывается (не выгружается) и отображается окно настройки алгоритма (пользовательская форма ufOptAlgoSet). (соответствующий код ниже (3))

  4. при нажатии кнопки команды confirm в окне настройки алгоритма пользовательская форма скрывается и выполняется алгоритм оптимизации (модуль main). А в модуле Main окно прогресса (пользовательская форма ufOptProg) отображается с vbModeless для отображения хода оптимизации алгоритма (10%, 20% ... и т. Д.), Из которых код вычисления процента включен в процедура geneticAlgorithm. (соответствующий код ниже (4), (4-1))

Моя проблема заключается в следующем. Если отлаживать по одной строке за раз, весь код работает нормально.

  1. Мой файл Excel иногда (?) Открывается нормально, но в основном он продолжает загружаться, но не открывается вообще, либо до пользовательской формы процесса (1) ufSplash, либо до процесса (1-1) ' Пользовательская форма ufLogin. Однако во время загрузки он открывается, если щелкнуть другой файл Excel, чтобы открыть его. Все остальные файлы открываются нормально, проблема возникает только у моего файла. Кроме того, если я копирую свой файл, скопированный файл почти не открывается с вышеуказанной проблемой. Я пытаюсь изменить Application.Visible = True, но это то же самое. Кроме того, я пытаюсь удалить ufSplash или ufSplash и ufLogin, но это иногда совпадает с проблемой.

  2. в вышеописанном процессе (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

1 Ответ

0 голосов
/ 14 ноября 2018

------- Недавно опубликовано --------

Я догадался, что решил проблему, но файл повторяется, чтобы возникла та же проблема. Я нашел новые решения о (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" должно быть завершено до последнего кода "end sub" для запуска файла Excel. Таким образом, событие может завершить последнюю строку «end sub», показывая пользовательскую форму «uflogin» с vbmodeless.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...