Subscripció VBA fora del rang (error en temps d'execució '9') | Per què es produeix aquest error?

Subíndex VBA d'Excel fora del rang

El subíndex fora del rang és un error que trobem a VBA quan intentem fer referència a alguna cosa o una variable que no existeix en un codi, per exemple, suposem que no tenim una variable anomenada x, però utilitzem la funció msgbox a x we trobareu un error de subíndex fora del rang.

S'ha produït un error en el subíndex VBA perquè l'objecte al qual intentem accedir no existeix. Es tracta d'un tipus d'error en la codificació VBA i es tracta d'un "Error de temps d'execució 9". És important entendre els conceptes per escriure codi eficient i és encara més important entendre l’error del vostre codi VBA per depurar-lo de manera eficient.

Si no sou el vostre error de codificació i no sabeu quin és aquest error.

Un metge no pot administrar medicaments al seu pacient sense saber quina és la malaltia. Amb seguretat, metges i pacients saben que hi ha una malaltia (error), però és important entendre la malaltia (error) que no pas administrar-li medicaments. Si podeu entendre l’error perfectament, és molt més fàcil trobar la solució.

En una nota similar en aquest article, veurem un dels errors importants que solem trobar amb regularitat, és a dir, error "Subscript Out of Range" a Excel VBA.

Què és l'error de subíndex fora del rang a Excel VBA?

Per exemple, si esteu referint el full que no hi ha, hi ha el llibre de treball, llavors obtindrem Error de temps d'execució 9: "Subíndex fora de l'interval".

Si feu clic al botó Finalitza, finalitzarà el subprocés, si feu clic a la depuració, us portarà a la línia de codi on s'ha produït un error i l'ajuda us portarà a la pàgina web de Microsoft.

Per què es produeix un error de subscripció fora de rang?

Com he dit com a metge és important trobar el difunt abans de pensar en el medicament. L’error de subíndex VBA es produeix quan la línia de codi no llegeix l’objecte que hem introduït.

Per obtenir un exemple, mireu la imatge següent: tinc tres fulls anomenats Sheet1, Sheet2, Sheet3.

Ara, al codi, he escrit el codi per seleccionar el full "Vendes".

Codi:

 Sub Macro2 () Fulls de càlcul ("Vendes"). Seleccioneu Finalitza sub 

Si executo aquest codi amb la tecla F5 o manualment, acabaré obtenint el fitxer Error de temps d'execució 9: "Subíndex fora de l'interval".

Això es deu al fet que he intentat accedir a l'objecte de full de càlcul "Vendes" que no existeix al llibre. Es tracta d'un error en temps d'execució perquè s'ha produït durant l'execució del codi.

Un altre error de subíndex comú que obtenim és quan ens referim al llibre de treball que no hi és. Per obtenir un exemple, mireu el codi següent.

Codi:

 Sub Macro1 () Dim Wb As Workbook Set Wb = Workbooks ("Salary Sheet.xlsx") End Sub 

Al codi anterior es diu que la variable WB hauria de ser igual al llibre de treball "Salary Sheet.xlsx". A hores d’ara, aquest llibre no està obert al meu ordinador. Si executo aquest codi manualment o mitjançant la tecla F5, ho aconseguiré Error de temps d'execució 9: "Subíndex fora de l'interval".

Això es deu al llibre de treball que estic referint, que no està obert fins ara o no existeix en absolut.

Error de subíndex VBA a matrius

Quan declareu la matriu com a matriu dinàmica i si no utilitzeu la paraula DIM o REDIM a VBA per definir la longitud d’una matriu, normalment obtindrem un error d’interval VBA Subscript. Per exemple, mireu el codi següent.

Codi:

 Sub Macro3 () Dim MyArray () As My Long array (1) = 25 End Sub 

A l'anterior, he declarat la variable com a matriu, però no he assignat el punt inicial i final, sinó que he assignat immediatament a la primera matriu el valor de 25.

Si executo aquest codi amb la tecla F5 o manualment, ho aconseguirem Error de temps d'execució 9: "Subíndex fora de l'interval".

Per solucionar aquest problema, he d'assignar la longitud d'una matriu mitjançant la paraula Redim.

Codi:

 Sub Macro3 () Dim MyArray () Com a llarg ReDim MyArray (1 a 5) MyArray (1) = 25 End Sub 

Aquest codi no dóna cap error.

Com es mostren els errors al final del codi VBA?

Si no voleu veure l’error mentre el codi està en funcionament, però al final necessiteu una llista d’errors, haureu d’utilitzar el gestor d’errors “On Error Resume”. Mireu el codi següent.

Codi:

 Sub Macro1 () Dim Wb As Workbook On Error Resume Next Set Wb = Workbooks ("Salary Sheet.xlsx") MsgBox Err.Description End Sub 

Com hem vist, es llançarà aquest codi Error de temps d'execució 9: "Subíndex fora de l'interval a Excel VBA. Però he d’utilitzar el controlador d’errors On Error Resume Next a VBA mentre s’executa el codi, no rebrem cap missatge d’error, més aviat al quadre de missatge final em mostra la descripció d’error així.

Podeu descarregar la plantilla Excel de VBA Subscript fora del rang aquí: - Plantilla VBA Subscript fora del rang