tiene que online necesario imprimir hotel hacer hace costo como check avianca argentinas aeropuerto aerolineas excel vba excel-vba range

excel - necesario - que es el check in online



Es el.en.Rango necesario cuando está definido por.Cells? (3)

La respuesta parece ser: solo si el código se encuentra en un objeto de hoja de trabajo. Sospecho firmemente que esto se debe a que los objetos de la Hoja de trabajo son los únicos que son extensibles y tienen una función de Range . Cuando se llama a Range desde una Hoja de trabajo, la función Range ese objeto tiene alcance. Cuando el código se encuentra en ThisWorkbook o en un módulo o clase de usuario, la función Range con el alcance disponible más cercano es el objeto Range global (suponiendo, por supuesto, que no haya una función Range definida por el usuario). Ese está vinculado a la Application , que debe resolverlo en función de los parámetros pasados ​​y reenviar la llamada a la hoja de trabajo correcta.

Es ampliamente aceptado que esta no es la "mejor práctica".

dim rng as range with thisworkbook ''<~~ possibly set an external workbook with .worksheets("sheet1") set rng = .range(cells(2, 1), cells(rows.count, 1).end(xlup)) end with end with

Las dos propiedades Range.Cells que definen el alcance del objeto Range se establecerán de manera predeterminada en la propiedad ActiveSheet . Si esto no es Sheet1 (definido como .Parent en la .Parent With ... End With ), la asignación fallará con,

Run-tim error ''1004'': Application-defined or object-defined error

Solución: use .Cells no Cells . Caso cerrado.

Pero...

Es el . es necesario en esta definición de objeto Range cuando ambas propiedades Range.Cells heredan la propiedad de la hoja de trabajo .Parent que se define en la instrucción With ... End With ?

¿Cómo puede esto?

dim rng as range with thisworkbook ''<~~ possibly set an external workbook with .worksheets("sheet1") '' define rng as Sheet1!A2 to the last populated cell in Sheet1!A:A set rng = .range(.cells(2, 1), .cells(rows.count, 1).end(xlup)) ''<~~ .range end with end with debug.print rng.address(0, 0, external:=true)

... ser diferente de esto,

dim rng as range with thisworkbook ''<~~ possibly set an external workbook with .worksheets("sheet1") '' define rng as Sheet1!A2 to the last populated cell in Sheet1!A:A set rng = range(.cells(2, 1), .cells(rows.count, 1).end(xlup)) ''<~~ range not .range end with end with debug.print rng.address(0, 0, external:=true)

Usamos .range cuando los parámetros que definen el alcance del rango son ambiguos; por ejemplo .range([A1]) La celda A1 podría ser de cualquier hoja de trabajo y por defecto será la propiedad ActiveSheet sin la . . Pero, ¿por qué necesitamos hacer referencia al elemento primario de un objeto de rango cuando el ámbito que lo define ha hecho referencia a su hoja de cálculo principal?


Mi opinión es ligeramente diferente aquí.

es obligatorio. No siempre puede controlar desde dónde puede ejecutar el código el usuario.

Por favor considere estos pocos casos de prueba

GUIÓN

El libro de trabajo tiene 2 hojas de trabajo. Hoja1 y Hoja2

PRUEBA 1 (Ejecutando desde un módulo)

Ambos códigos dan el mismo resultado

PRUEBA 2 (Ejecutando desde un área de código de Hoja de Hoja1)

Ambos códigos dan el mismo resultado

TEST 3 (Ejecutando desde un área de código de Sheet2)

''~~> This code fails set rng = range(.cells(2, 1), .cells(rows.count, 1).end(xlup))

Obtendrá un error de Application Defined or Object defined

Y, por lo tanto, siempre es aconsejable calificar adecuadamente sus objetos para que el código pueda ejecutarse desde cualquier lugar


No, el no se requiere donde las referencias de celda dentro de los corchetes están calificadas, a menos que el código esté en un módulo de Worksheet . Dicho esto, es más rápido ejecutar set rng = .range(.cells(...), .cells(...)) que ejecutar set rng = range(.cells(...), .cells(...)) así que incluye el . hace algo bueno

Para un módulo de Worksheet , el . es requerido.