2016-03-07 13 views
0

我有點新,有點舊VBA。Excel的VBA。當再次加載表單時如何擺脫錯誤91

我有兩個學生(男孩和女孩)的列表,我隨機調用他們的名字重新排序。但是,當一個列表更短時,我希望VBA再次選擇範圍2(第一個學生),以便他們可以繼續回答問題。但是,當它再次加載時,出現錯誤91:/

我有一個顯示學生姓名和另一個顯示問題的表單。問題在於初始化事件。這是密碼

Private Sub UserForm_Initialize() 
Dim NUEVAPOSICIONb As range 
Dim NUEVAPOSICIONg As range 


Form_00_ListaDeAlumnos.Width = ActiveWindow.Width 'IGUALA ANCHO FORMULARIO A ANCHO DE EXCEL 
Form_00_ListaDeAlumnos.Height = Application.Height ''IGUALA ALTO FORMULARIO A ALTO DE EXCEL 

'PONE TODOS LOS TABSTOPS Y FOCUSONCLICK EN FALSE 
On Error Resume Next 
For i = 0 To Controls.Count - 1 ' Use the Controls collection 
Controls(i).TabStop = False 
Controls(i).TakeFocusOnClick = False 
Next 

''SI DICE CHICOS 
If Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("WHOSE TURN IS IT?").range(2) = "BOYS" Then 
Form_00_ListaDeAlumnos.BackColor = vbBlue 
Label1.BackColor = vbBlue 
'CAMBIA EL SEXO PARA EL PROXIMO EQUIPO:CHICAS 
Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("WHOSE TURN IS IT?").range(2) = "GIRLS" 
Set NUEVAPOSICIONb =  Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("Position of Boys").range(2) 
'SELECCIONA POSICION DE TABLA DE CHICOS, FILA APELLIDO Y NOMBRES 
Sheets("Lista Primer Trimestre").Select 
Sheets("Lista Primer Trimestre").ListObjects("LISTA_1T_CHICOS").ListColumns("APELLIDO Y NOMBRE").range(NUEVAPOSICIONb).Select 


''SI DICE CHICAS 
ElseIf Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("WHOSE TURN IS IT?").range(2) = "GIRLS" Then 
Form_00_ListaDeAlumnos.BackColor = vbRed 
Label1.BackColor = vbRed 
'CAMBIA EL SEXO PARA EL PROXIMO EQUIPO:CHICOS 
Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("WHOSE TURN IS IT?").range(2) = "BOYS" 
Set NUEVAPOSICIONg = Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("Position of Girls").range(2) 
'SELECCIONA ENCABEZADO DE TABLA DE CHICOS, FILA APELLIDO Y NOMBRES 
Sheets("Lista Primer Trimestre").Select 
Sheets("Lista Primer Trimestre").ListObjects("LISTA_1T_CHICAS").ListColumns("APELLIDO Y NOMBRE").range(NUEVAPOSICIONg).Select 
End If 

'PARA QUE CADA VEZ QUE VENGA A BUSCAR A UN CHICO SIGA EL SIGUIENTE 
'SI HAY DATOS DEBAJO 
If Selection.Offset(1, 0) <> Empty Then 
ActiveCell.Offset(1, 0).Select 
TextBox1_Nombre.Text = Selection 
'COPIAR QUIÉN FUE SELECCIONADO EN UNA CELDA EN SETTINGS 
sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("Chosen_student").range(2) = Selection 

ElseIf Selection.Offset(1, 0) = Empty Then 
'SI NO QUEDAN MÁS ALUMNOS 
MsgBox "All Students have been chosen" 
Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("WHOSE TURN IS IT?").range(2) = "BOYS" 
Sheets("Settings").ListObjects("WHOSETURNISIT").ListColumns("Position of Boys").range(2) = 1 
Set NUEVAPOSICIONb.Value = 2 
Set NUEVAPOSICIONg.Value = 2 

Unload Me 
load_Form_00_ListaDeAlumnos 
End If 


End Sub 

在這裏您的鏈接下載文件:My file

+0

如果按'F8'逐行運行代碼,哪條線會產生錯誤? – Tim

+2

在載入表單時卸載表單並不是一個好主意。 – Rory

+1

請在代碼中對'On Error Resume Next'發表評論,以便獲得錯誤消息。如果沒有顯示錯誤,就不可能麻煩地拍攝像這樣的東西。這是不應該用於一兩行或多行代碼的事情,因爲一個非常特殊的原因! –

回答

0

好的。我會嘗試這些東西:)非常感謝你如此快速的迴應。 能夠讓你成爲我的老師真是太好了,因爲我從來沒有跟任何人一起學習,只是自己閱讀和觀看視頻。但我真的花了很多時間,有時候爲了嘗試新事物來解決我的問題而不睡覺。

我試圖不卸載窗體的初始化和它的工作。錯誤消失了。我在一個按鈕點擊事件中編寫了代碼,並且我得到了我想要的東西:)但是,我必須在初始化時再次修改一些內容。令人難以置信的是,不同的方法可以產生相同的結果:D