45 votos

¿Qué hace el VBA de Excel gama.Filas de la propiedad realmente?

OK, estoy terminando un complemento de proyecto para un legado de Excel-VBA aplicación, y me han vuelto a enfrentarse con el dilema de la misteriosa gama.Filas(?) y la hoja de cálculo.Filas de propiedades. ¿Alguien sabe qué estas propiedades realmente hacer y lo que se supone que debe proporcionar para mí? (nota: probablemente todo esto se aplica a la correspondiente *.Propiedades de columnas también).

Lo que realmente me gustaría ser capaz de utilizar para devolver un rango de filas, como este:

   SET rng = wks.Rows(iStartRow, iEndRow)

Pero nunca he sido capaz de llegar a hacer que, incluso a pesar de que el Intellisense muestra dos argumentos para ello. En lugar de eso tengo que usar uno de los otros dos o tres (muy desacoplados) técnicas. La ayuda es muy ineficiente (normalmente, así que para Oficina VBA), y buscando en google por "Filas" no es muy útil, no importa cómo muchos otros términos que añadir.

Lo único que he sido capaz de usarlo para: 1) devolución de una sola fila como un intervalo ( rng.Filas(i) ) y 2) devolver un recuento de las filas en un rango de ( rng.Las filas.Contar ). Es que es? Hay realmente nada que es bueno para?

Aclaración: sé que devuelve un rango y que hay otras maneras de obtener un rango de filas. Lo que estoy pidiendo es específicamente lo que podemos obtener .Filas() lo que hacemos no ya lo tienes .Las células() y .Rango (a)? Las dos cosas que sé que son: 1) una forma más sencilla de devolver un intervalo de una sola fila y 2) la manera de contar el número de filas en un rango. ¿Hay algo más?

43voto

Joe Erickson Puntos 4571

La gama.Filas y Rango.Columnas de retorno esencialmente de la misma Gama, excepto por el hecho de que la nueva Gama tiene una bandera que indica que se representa Filas o Columnas. Esto es necesario para algunos de Excel propiedades tales como la Gama.Del recuento y de la Gama.Ocultos y para algunos métodos, tales como la Gama.Autoajustar():

  • La gama.Las filas.Count devuelve el número de filas en el Rango.
  • La gama.Columnas.Count devuelve el número de columnas en el Rango.
  • La gama.Las filas.Autoajustar() autofits las filas de la Gama.
  • La gama.Columnas.Autoajustar() autofits las columnas en el Rango.

Usted podría encontrar que la Gama.EntireRow y Rango.EntireColumn son útiles, a pesar de que todavía no son exactamente lo que usted está buscando. Regresan todas las columnas posibles para EntireRow y todas las posibles filas para EntireColumn para la representación del rango.

Lo sé porque SpreadsheetGear .NET viene con .NET Api que son muy similares a las de Excel Api. El SpreadsheetGear API viene con varios inflexible de sobrecargas para el IRange indizador incluyendo el que usted probablemente desea Excel:

  • IRange este[int row1, int columna 1, int row2, int columna2];

Descargo de responsabilidad: yo tengo SpreadsheetGear LLC

6voto

e.James Puntos 51680

Dos ejemplos son las únicas cosas que he usado alguna vez el Rows y Columns propiedades, pero en teoría se podría hacer algo con ellos que se puede hacer con un Range objeto.

El tipo de devolución de las propiedades es en sí mismo un Range, por lo que usted puede hacer cosas como:

Dim myRange as Range
Set myRange = Sheet1.Range(Cells(2,2),Cells(8,8))
myRange.Rows(3).Select

Que se seleccione la tercera fila en myRange (las Celdas B4:H4 en la Hoja1).

actualización: Para hacer lo que quieres hacer, puedes usar:

Dim interestingRows as Range
Set interestingRows = Sheet1.Range(startRow & ":" & endRow)

actualización #2: O, para obtener un subconjunto de filas de dentro de otro rango:

Dim someRange As Range
Dim interestingRows As Range

Set myRange = Sheet1.Range(Cells(2, 2), Cells(8, 8))

startRow = 3
endRow = 6

Set interestingRows = Range(myRange.Rows(startRow), myRange.Rows(endRow))

3voto

Nile Puntos 903

La gama.Filas De La Gama.Las columnas y el Rango.Las celdas de Excel.La gama de objetos, de acuerdo con el Tipo de VBA() funciones:

?TypeName(De Selección.filas)
Rango de
Sin embargo, eso no es toda la historia: los objetos devueltos se extienden tipos que heredan todas las propiedades y método de Excel::Gama - pero .Y columnas .Las filas tienen una especial Para... Cada iterador, y un especial .Cuenta la propiedad que no están muy a la misma como el padre de la Gama del objeto iterador y contar.

Así .Las células se procesa y se consideran como una colección de una sola célula de rangos, como el valor predeterminado de iterador de los padres de la gama.

Pero .Las columnas se procesa y se consideran como una colección de vertical subintervalos, cada uno de ellos una sola columna de ancho;

...Y .Las filas se procesa y se consideran como una colección de horizontal subintervalos, cada uno de ellos una sola fila alta.

La manera más fácil de entender esto es el paso a través de este código y ver lo que se ha seleccionado:

Public Sub Prueba()

Dim Subrango Como Rango Dim ParentRange Como Rango

Conjunto De ParentRange = ActiveSheet.Range("B2:E5")

Para Cada Subrango En ParentRange.Las células Subrango.Seleccione Siguiente

Para Cada Subrango En ParentRange.Filas Subrango.Seleccione Siguiente

Para Cada Subrango En ParentRange.Columnas Subrango.Seleccione Siguiente

Para Cada Subrango En ParentRange Subrango.Seleccione Siguiente

End Sub

Disfrutar. Y tratar de hacerlo con un par de celdas combinadas allí, sólo para ver cómo extraño combinado rangos.

2voto

Joel Goodwin Puntos 3477

No estoy seguro, pero creo que el segundo parámetro es un arenque rojo.

Ambos .Filas y .Columnas tomar dos parámetros opcionales: RowIndex y ColumnIndex. Intente utilizar ColumnIndex, por ejemplo Rows(ColumnIndex:=2), genera un error de ambos .Filas y .Columnas.

Mi sensación es hereditario en algunas sentido de la Cells(RowIndex,ColumnIndex) de la Propiedad, sino sólo el primer parámetro es el adecuado.

2voto

Nick Mellor Puntos 21

Me he encontrado a mí mismo con rango.Filas de sus efectos en el método de Copia. Se copia a la altura de las filas desde el origen hasta el destino, que es el comportamiento que yo quiero.

rngLastRecord.Rows.Copy Destination:=Sheets("Availability").Range("a" & insertRow)

Si hubiese usado rngLastRecord.Copiar en lugar de rngLastRecord.Las filas.Copia, el alto de la fila sería lo que estaba allí antes de la copia.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X