Todo,error de tiempo de ejecución '9': Subíndice fuera del intervalo - sólo cuando se cierra Excel VBE
Estoy frente a un error con un poco de código VBA en una macro de Excel. Aquí está el flujo de trabajo que intento:
- he un módulo que se ejecuta el código para crear una nueva hoja de cálculo, el formato y añadir en un puñado de valores
- dentro de este mismo módulo, determino un rango de celdas basadas en la última fila poblada (que siempre será diferente dependiendo de los pasos anteriores)
Una vez que conozco este rango, uso el siguiente código para escribir en la hoja de trabajo recién creada, así puedo configurar un 'change_event'. Sólo quiero lo change_event para disparar cuando los valores en el rango acabo determinado se cambian: `
Dim Startline As Long Startline = 1 Dim x As Integer x = Errors.Count - 1 Dim rng As Range Set rng = Range("D" & LastRow - x & ":" & "D" & LastRow) With ThisWorkbook.VBProject.VBComponents(VRS.CodeName).CodeModule Startline = .CreateEventProc("Change", "Worksheet") + 1 .InsertLines Startline, "Dim rng As Range " Startline = Startline + 1 .InsertLines Startline, "Set rng = Range(" & """" & CStr(rng.Address) & """" & ")" Startline = Startline + 1 .InsertLines Startline, "If Target.Count > 1 Then Exit Sub" Startline = Startline + 1 .InsertLines Startline, "If Intersect(Target, rng) Is Nothing Then Exit Sub" Startline = Startline + 1 .InsertLines Startline, "MsgBox (""Value Changed!..."") " End With
funciona el código, y escribe lo siguiente en el CodeModule de la hoja de cálculo especificada:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("D58:D62")
If Target.Count > 1 Then Exit Sub
If Intersect(Target, rng) Is Nothing Then Exit Sub
MsgBox ("Value Changed!...")
End Sub`
Este código también funciona, y el cuadro de mensaje aparece cuando se cambian las celdas del rango. Sin embargo, con el VBE cerrado se producirá el error:
Run-time error '9': Subscript out of range
Golpear depuración me lleva a la de la línea:
With ThisWorkbook.VBProject.VBComponents(WS.CodeName).CodeModule
Pero en realidad arroja el error en la línea siguiente:
Startline = .CreateEventProc("Change", "Worksheet") + 1
Ok, así que modifiqué el código para simplemente eliminar todo el código de la hoja de cálculo especificada y volver a escribir en lugar de eliminar y escribir cada vez. Esto evita que aparezca el error, pero abre automáticamente el VBE en su lugar ... Utilizo la línea siguiente para cerrar el VBE ... aunque no es muy ingenioso. Estoy abierto a una solución más elegante: Application.VBE.MainWindow.Visible = False – gg7aph
Posible duplicado de [VBA changing sheet codename Run-Time Error 9: Subíndice fuera de rango] (http://stackoverflow.com/questions/ 41022319/vba-changing-sheet-codename-run-time-error-9-subscript-out-of-range) – ThunderFrame