Saltar al contenido

Que se pone en la macro para realizar cosas en otra hoja


lphant

Recommended Posts

publicado

Buenas noches;

tengo una duda, estoy haciendo una macro y me falla una cosa, estoy trabajando con 2 hojas y tengo que poner cada vez que quiero que haga algo en otra hoja que no sea la principal la letra de la hoja y lo que quiero hacer, se que ahi una forma para decir que todo lo haga en esa hoja, no se si me he explicado bien, en vez de estar poniendo lo que he señalado en rojo, algo inicial para no tener que poner la letra de la hoja.

muchas gracias

Dim A, B As Worksheet

Sub Duplicados_Precert()

Set A = ThisWorkbook.Sheets("Precertificado")

Set B = ThisWorkbook.Sheets("Stock")

A.Activate

Set r1 = Range("A1")

ultimafila = r1.End(xlDown).Row

Range("T1").Select

ActiveCell.FormulaR1C1 = "Fecha "

Range("T2:T" & ultimafila).FormulaR1C1 = _

"=YEAR(RC[-3])&IF(MONTH(RC[-3])<10,""0""&MONTH(RC[-3]),MONTH(RC[-3]))"

B.Activate

B.Columns("T:T").Select

Selection.Copy

B.Columns("Q:Q").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Invitado Gengis Khan
publicado

Hola:

Es evidente y supongo que no tiene Vd. duda, es que hay que especificar en que lugar vamos ha hacer nuestros cálculos.

Una de las formas mas habituales es la que Vd usa, asignar las hojas a variables y así nos olvidamos del nombre.

Piense que VBA lo hace exactamente lo mismo que Vd de forma manual.

Si está en la Hoja1 y quiere copiar un dato de la Hoja2 ha de ir a la Hoha2 copiar el rango, volver a la Hoja1, seleccionar el rango a pegar y pegar la información.

No obstante VBA nos facilita las cosas permitiendo ciertas "licencias", la parte de la macro que destaca podría quedar así:


[COLOR=#ff0000]B.Columns[/COLOR][COLOR=#333333]("T:T").[/COLOR][COLOR=#333333]Copy[/COLOR]
[COLOR=#ff0000]B.Columns[/COLOR][COLOR=#333333]("Q:Q").[/COLOR][COLOR=#333333]PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _[/COLOR]
[COLOR=#333333]:=False, Transpose:=False[/COLOR][/CODE]

Otra forma podría ser:

[CODE][COLOR=#4D5153]ThisWorkbook.Sheets("Stock").Select 'Activate también valdría
[/COLOR][COLOR=#ff0000]Columns[/COLOR][COLOR=#333333]("T:T").[/COLOR][COLOR=#333333]Copy[/COLOR]
[COLOR=#ff0000]Columns[/COLOR][COLOR=#333333]("Q:Q").[/COLOR][COLOR=#333333]PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _[/COLOR]
[COLOR=#333333]:=False, Transpose:=False[/COLOR][/CODE]

Y abreviando, y habitualmente bastará con:

[CODE][COLOR=#ff0000]B.Columns[/COLOR][COLOR=#333333]("T:T").[/COLOR][COLOR=#333333]Copy:[/COLOR] [COLOR=#ff0000]B.Columns[/COLOR][COLOR=#333333]("Q:Q").[/COLOR][COLOR=#333333]PasteSpecial Paste:=xlPasteValues[/COLOR][/CODE]

Animese y haga pruebas, el ordenador no se va a romper.

Saludos

publicado

muchas graciass...

en eso esto, probando y probando, pero no doy con lo que quiero, se que ahí una forma de decir que todo lo haga en la hoja x o en la hoja x hasta que se pone end, tipo a ThisWorkbook.Sheets("Stock").Select, pero no doy con ello, es por no estar poniendo constantemente la hoja a la que hago referencia.

publicado

Buenas noches;

El otro día en la cama me acorde, era with lo que había que poner por si alguien lo quiere usar.

Set A = ThisWorkbook.Sheets("Precertificado")

Set B = ThisWorkbook.Sheets("Stock")

with.A

.Columns("T:T").Select

Selection.Copy

.Columns("Q:Q").Select

muchas gracias

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.