2012-03-29 24 views
6

He hecho un pequeño proyecto, que consiste en 5 hojas de Excel, el código funciona bien y obtengo el resultado exacto también, pero si cambio el nombre de las hojas de la hoja 1 por otro nombre I estoy obteniendo el subíndice fuera del rango de error.Subíndice fuera de rango Error después de cambiar el nombre de las hojas

¿Cuál es la razón de esto y lo que se necesita hacer para superar esto. Por favor ayuda.

A continuación se muestra el código

Public Sub amount_final() 

Dim Row1Crnt As Long 
Dim Row2Crnt As Long 


With Sheets("sheet4") 
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

Row1Crnt = 2 
With Sheets("sheet3") 
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 
+0

favor publicar su código, así –

+0

Por favor pegue su código aquí – playercharlie

Respuesta

11

No hay nada malo con el código en sí. Obtendrá el error Subscript out of range si Excel no puede encontrar una hoja en particular, lo cual es bastante obvio ya que le cambió el nombre. Por ejemplo, si cambia el nombre de su hoja "Sheet3" a "SheetXYZ", Excel no podrá encontrarla.

La única manera de evitar este tipo de errores es usar CODENAME de las hojas. Ver instantánea

enter image description here

Aquí tenemos una hoja que tiene un nombre "Nombre de la muestra antes de cambiar el nombre de"

así que considere el código

Sheets("Sample Name before Renaming").Range("A1").Value = "Blah Blah" 

El mismo código puede escribirse como

Sheet2.Range("A1").Value = "Blah Blah" 

Ahora no importa cuántas veces renam e la hoja, el código anterior funcionará siempre :)

HTH

Sid

+0

1 con buena explicación instantánea :) –

+0

Gracias siddharth, explicación agradable y simple. – neobee

+0

+1 Sid bien cubierto – brettdj

1

El problema básico es que usted se refiere a las hojas usando sus nombres comunes y no sus nombres en clave. Siempre que se refiera a Hojas ("hoja 4"), se basa en la hoja que tiene ese nombre en Excel. Los nombres codificados son los nombres asignados en Visual Basic para que el usuario final no interactúe con ellos/como desarrollador puede cambiar los nombres de Excel en cualquier momento

El uso de nombres de código se cubre alrededor de las 9:40 en este Excel help video. Notará que son más rápidos de escribir que los nombres de Excel ya que no requieren el calificador 'Sheets()'

No pude ver Hojas ("Hoja1") en el ejemplo de código pero puede cambiar a nombres en clave para todas las hojas muy rápidamente al encontrar/reemplazar todos los ejemplos de, por ejemplo, 'Hojas ("Hoja2").' con 'Sheet2'.

0

Consulte cada hoja por sus nombres de código en su lugar. Se configuran en Sheet1, Sheet2, etc. como valor predeterminado, pero puede cambiarles el nombre en la ventana Propiedades para cada hoja, si lo desea. De esta forma, puede escribir su código como se muestra a continuación, independientemente de cómo nombre las hojas.

With Sheet1 
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

Row1Crnt = 2 
With Sheet2 
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row 
End With 

etc... 
0

Quería compartir mi experiencia en la resolución de este problema. Aquí está el error que se comete:

Dim DailyWSNameNew As String 
lastrow = Sheets("DailyWSNameNew").Range("A65536").End(xlUp).Row + 1 -- This is wrong as I included a placeholder worksheet name in quotes 

Corrección:

lastrow = Sheets(DailyWSNameNew).Range("A65536").End(xlUp).Row + 1 

Esta resuelto.

0

Encontré este error el día de hoy pero no pude usar ninguna de las soluciones anteriores, sin embargo, logré resolverlo yo mismo.

Mi situación era que tenía una lista en la columna A. Para cada celda con un valor almacenaba el valor en una variable, creaba una nueva hoja y la nombraba de acuerdo con el valor almacenado en la variable.

Un poco más adelante en el código que he intentado seleccionar la hoja recién creado utilizando el código:

Sheets(ValueVariable).Select 

me encontré con el "Subíndice fuera del intervalo" error y no podía entender por qué. He usado código similar antes con éxito. Sin embargo lo resolví lanzando la variable como una cadena. Declarar la variable como una cadena no pareció funcionar para mí.

Por lo tanto, si alguien más se encuentra con este error y quieren algo para tratar, tal vez esto va a funcionar para usted:

Sheets(Cstr(ValueVariable)).Select 
Cuestiones relacionadas