Activar la hoja con la macro sin indicar el nombre

Estoy haciendo un libro con 3 hojas iguales. En cada hoja tengo 6 autoformas, cada una de ellas con una macro asignada diferente entre las de la misma hoja pero iguales de una hoja a otra. La cuestión es que la macro copia un rango, va a una cuarta hoja, lo pega y debe volver a la hoja desde donde copió el rango. Mi problema es que la misma macro la utilizo en cada hoja. Si para volver utilizo:
Sheets("Hoja1").Select
Sólo me serviría para esa macro de esa hoja1 y debería hacer en la misma macro de la hoja2 otra macro incluyendo
Sheets("Hoja2").Select.
Con macros que trabajan con más de un libro para activar el libro desde el que se ejecuta la macro basta con indicar

ThisWorkbook. Activate
De esta forma sirve para todos los libros, se llamen como se llamen.
¿Hay algo similar para activar la hoja desde la que se ejecuta la macro se llame como se llame la hoja?
Respuesta
1
Esta macro hace lo que pides coge la dirección de la celda que estas y te devuelve a ella
Sub pasa_datos()
 Application.ScreenUpdating = False
 'coje direccion celda
 dire = ActiveCell.Address
      Range("A2:G2").Select
   Selection.Copy
   'copia en ultima fila vacia
   Sheets("Total").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    'regresa ha la hoja y celda antes de ejecutar macro
    ActiveSheet.Range(dire).Select
     Rows("2:2").Select
    Selection.Insert Shift:=xlDown
  ActiveSheet.Range(dire).Select
 Application.ScreenUpdating = True
 End Sub
Ya me cuentas
Lo primero, muchas gracias por la rapidez. Te pido disculpas por que no me he expresado con claridad. He probado tú código en un libro nuevo y me funciona. Pero no consigo adpatarlo al mío.
El problema que quiero solucionar es con este módulo:
Sub INFORME1()
    ActiveSheet.Unprotect
    Range("A20:T20").Select
    Selection.Copy
    Sheets("INFORME").Select
    Range("A10").Select
    Do While ActiveCell.Value <> ""
    ActiveCell.Offset(1, 0).Select
    Loop
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   Sheets("LA HOJA DE ORIGEN DE ESOS DATOS QUE ACABO DE COPIAR").Select
     ........ en la hoja de origen.
    End Sub
("LA HOJA DEORIGEN DE ESOS DATOS QUE ACABO DE COPIAR") puede ser la hoja1, hoja2 o hoja3, según desde donde ejecuto la macro, ya que es el mismo código. Lo fácil sería sustituir ("LA HOJA DE ORIGEN...") Por su nombre. Pero el problema es que debería hacer una macro para cada hoja. Y en cada hoja tengo 6 macros independientes. Es decir, donde ahora tengo 6 macros, debería meter 36. Las de una hoja no me valen para la otra porque al volver a la hoja desde la que se ejecutó la macro sólo se volver especificando el nombre.
Es por eso que busco un genérico para identificar la hoja desde dónde se empieza a ejecutar la macro para volver a ella sin tener que poner el nombre.
Lo mismo que si trabajas en VBA con dos libros. Para volver al libro desde el que se ejcuta la macro tu puedes indicar:
WorkBooK("origen").Activate
Volverá al libro de origen SOLO SI SE LLAMA "origen".
Ahora bien. Si cambias el nombre al libro no te funcionará.
Si Introduces:
ThisWorkBook.Activate
Siempre te reconocerá como Thisworkbook el libro desde el que se ejecuta, independientemente de cómo se llame este libro.
No encuentro un ThisSheet. Select. ¿No existe?
Pues lo que yo busco es lo mismo para volver a la hoja desde la que se ejecuta la macro sin tener que definirla por su nombre. De esta forma volvería a la hoja independiemente de cómo se llame esta. ¿Cómo vuelvo a la hoja identificandlo como la hoja desde la que se ejecuta la macro. ¿Bastaría con meter el código en cada hoja en vez de en un móludo? No lo sé. Así podría utilizar el mismo código en varias hojas con nombres diferentes o poder cambiar el nombre a la hoja sin problemas.
Espero haberme explicado bien sin ser pesado.
Muchas gracias por tu tiempo.
Bueno con asignar el rango al usar Do While no funciona bien así es que asignaremos nombre y rango al código prueba este
Sub INFORME1()
 Dim strnombrehoja$, strrangocelda$
strnombrehoja$ = ActiveSheet.Name
strrangocelda$ = ActiveCell.Address
ActiveSheet.Unprotect
 Range("A20:T20").Select
    Selection.Copy
    Sheets("INFORME").Select
    Range("A10").Select
    Do While ActiveCell.Value <> ""
    ActiveCell.Offset(1, 0).Select
    Loop
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
      Application.CutCopyMode = False
   Sheets(strnombrehoja$).Select
Range(strrangocelda$).Select
End Sub
En negrita tienes el código que te agregue
Ya me cuentas
Perfecto. Es una solución muy útil que llevaba tiempo buscando. A primera vista no parece complicado pero, para los que no tenemos mucha idea, este tipo de dudas, si no fuera por personas como tú, acaban por desanimarnos y pensar, erróneamente, que esto de la informática es un rollo inabarcable. Gracias a vosotros se demuestra, una vez más que, preguntar, escuchar y compartir lo escuchado es lo que hace que seamos cada día un poquito menos ignorantes.
Repito, muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas