Я думаю, вы испытываете эту ошибку при нажатии на кнопку «Закрыть» («X» в верхнем правом углу), и что expence
это имя вашего UserForm.
для того, чтобы пользователь не закрывающий UserForm с помощью кнопки «X» добавить следующий код в UserForm код панели
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "Click the proper button to close the form" '<--| you may want to substitute "proper" with the actual caption of the button you want the user click to exit the userform
Cancel = True
End If
End Sub
Кроме того, вы должны правильно выйти из UserForm, что обычно может быть сделано :
имеющего родительской юга нагрузки, шоу и закрыть UserForm, как следует:
Sub main() ' your sub that cals 'expence' userform
' ... possible code preceeding 'expence' useform exploitation
With expence '<--| this loads the Userform and trigger its 'UserForm_Initialize()' event handler, too
' ... possible code for some userform controls values initializations not left to 'UserForm_Initialize()'
.ComboBox1.List = Array(1, 2, 3, 4)
.Show '<--| this actually makes the userform visible in the screen
' ... possible code for some userform controls values exploitations not already done in its "farewell" event handler ('CommandButton1_Click()' in this case)
End With
Unload expence '<--| this finally "closes" the userfom
' ... possible code following 'expence' useform exploitation
End Sub
, имеющий useform «прощай» суб просто скрыть сам
Private Sub CommandButton1_Click() '<--| thi is tha "farewell" sub, i.e. the one that uses the 'Hide' method of the Userform class to have the user leave the userform
Dim blankrow As Long '<--| better use "Long" type variables instead of integers and handle row index greater that 32k or so
Dim ws As Worksheet: Set ws = Worksheets("Data_Base")
blankrow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
With Me '<--| "me" actually refers to the Useform itself. this way you benefit from 'Intellisense' and have your control names available after typing the "dot" (".")
ws.Cells(blankrow, 1) = Format(.TextDate.Value, "mm/dd/yyyy")
ws.Cells(blankrow, 2) = .ComboBox1
ws.Cells(blankrow, 3) = Format(.TextPrice.Value, "General number")
.TextboxTotal.Text = ws.Range("F2")
.TextDate.Value = ""
.ComboBox1.Value = ""
.TextPrice.Value = ""
.Hide '<--| this just hides the userfom from the screen, leaving its actual "closing" to the caller sub
End With
End Sub
UserForm на какой линии вы получаете свою ошибку? вы можете войти в F8? –
Кроме того, забыли спросить, является ли имя пользовательской формы? если вам не нужно добавлять 'account.show' в' UserForm_Initialize', но в другой процедуре, которая вызывает эту процедуру. –