2016-07-11 1 views
0

Ошибка (переменная объекта или не заданная блочная переменная) запрашивает при закрытии пользовательской формы.vba userform Время выполнения Ошибка 91 переменная объекта или с переменной блока не установлена ​​

Private Sub UserForm_Initialize() 
    TextboxTotal.Text = Worksheets("Data_Base").Range("F2") 
expence.Show 
End Sub 

Private Sub CommandButton1_Click() 
Dim blankrow As Integer 
Dim ws As Worksheet 
Set ws = Worksheets("Data_Base") 
    blankrow = Sheets("Data_Base").Range("A" & Rows.Count).End(xlUp).Row + 1 
    Sheets("Data_Base").Cells(blankrow, 1) = Format(TextDate.Value, "mm/dd/yyyy") 
    Sheets("Data_Base").Cells(blankrow, 2) = ComboBox1 
    Sheets("Data_Base").Cells(blankrow, 3) = Format(TextPrice.Value, "General number") 
    TextboxTotal.Text = Worksheets("Data_Base").Range("F2") 
    TextDate.Value = "" 
    ComboBox1.Value = "" 
    TextPrice.Value = "" 
End Sub 
+0

UserForm на какой линии вы получаете свою ошибку? вы можете войти в F8? –

+1

Кроме того, забыли спросить, является ли имя пользовательской формы? если вам не нужно добавлять 'account.show' в' UserForm_Initialize', но в другой процедуре, которая вызывает эту процедуру. –

ответ

0

Я думаю, вы испытываете эту ошибку при нажатии на кнопку «Закрыть» («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, что обычно может быть сделано :

  1. имеющего родительской юга нагрузки, шоу и закрыть 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 
    
  2. , имеющий 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 
    
+0

@SandeepBhatt, вы попробовали это? – user3598756