Катастрофический сбой - Недостаточно памяти при открытии формы пользователя - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть программа VBA, которая открывает серию пользовательских форм.
Я спроектировал все это на своем ноутбуке и протестировал его на некоторых других ноутбуках.Как в Excel 2010, так и в 2016 году.

Я поделился этим с коллегами, которые используют другой стиль ноутбука (Win7, Office 2010).Каждый раз, когда они нажимают кнопку, чтобы открыть пользовательскую форму, они получают катастрофический сбой из-за нехватки памяти.

Я видел в Интернете, что модули должны иметь размер менее 64 КБ.Модуль, используемый для открытия кнопки, очень маленький (просто открывается UserForm1).

Файл пользовательской формы frm составляет 4 КБ.
Файл пользовательской формы frx имеет размер 1,24 МБ, поскольку он содержит изображения и т. Д.

Код, который запускает пользовательская форма.

Private Sub ComboBox1_DropButtonClick()

'Determines the controller model based off selection
If ComboBox1.Text = "VHX-6000 + VHX-A60E" Then
    Controller = 6000
Else
    Controller = 950
End If

'Updates textbox1 with current pricing info
TextBox1.Text = Application.VLookup(Controller, Sheet3.Range("A37:C45"), 2, 0)   

End Sub

Private Sub Continue1_Click()

price = 0

'Determines if it should show the camera page based on the controller selection
If Controller = 6000 Then
    CameraForm.Show
Else
    Camera = 6020
    StageForm.Show
End If

End Sub

Private Sub Image6_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)

End Sub

Private Sub Label2_Click()

End Sub

Private Sub UserForm_Activate()

'Make Sheet 3 activate to avoid that weird error message towards the end
Worksheets("sheet3").Activate

'Sets the dropdown list
ComboBox1.List() = Sheet3.Range("C6:C7").Value

'Clears the quote information if present
Sheet3.Range("M51:O100").ClearContents

Controller = 0

End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()

'Full Screen
With Me
    .Width = Application.Width
    .Height = Application.Height
End With

End Sub

1 Ответ

0 голосов
/ 06 декабря 2018

Enigma

Не так много:

enter image description here

Чтобы загрузить форму, у меня есть код для Командная кнопка OLE Object в окне кода Sheet3 :

Private Sub CommandButton1_Click()
  Load ControllerForm
  ControllerForm.Show
End Sub

Обратите внимание на два отличия от вашего кода:

Sub Button1_Click()
  ControllerForm.Show
End Sub
  1. У васвозможно, нужно использовать Load ControllerForm?
  2. Существует разница между этими кнопками: Commandbutton1 и Button1.Ваша Button1 - это msoFormControl (8), а моя кнопка - msoOLEControlObject (12).Смотрите здесь .
...