** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Macro para cambiar parte del contenido en un modul
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Macro para cambiar parte del contenido en un modul

 Responder Responder Página  <123>
Autor
Mensaje
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Enero/2019 a las 14:34
Voy a exprimir al máximo la respuesta anterior.

Libro 1 en modulo 1 con esta macro

Sub  UNA_2010_11 ()

Application.ScreenUpdating = False

Workbooks.Open Filename:="C:\Users\root\Desktop\ESCRITORIO\CARPETA1\LIBRO1\CARPETA2\CARPETA3\LIBRO Nº6\2010-11\LIBRO3.xlsm"

Sheets("HOJA1").Select

Range("C34").Select

Application.Run "'LIBRO3.xlsm'! RUTAS_VARIANTES"

End Sub

 Y como esta macro en el mismo modulo 5,6,ect… macros mas con sus nombres, la coincidencias de todas ellas es la ruta.

C:\Users\root\Desktop\ESCRITORIO\CARPETA1\LIBRO1\CARPETA2\CARPETA3\LIBRO Nº6\2010-11\LIBRO3.xlsm

Y desde Libro 1 en una HOJA1 celda G10 , cambiar de la ruta  solo LIBRO Nº6 por LIBRO Nº7

O lo que es lo mismo lo que escriba en  HOJA1 celda G10.

Y si consigo esto pues desde Libro 1 hacia otros Libros,LIBRO2,3 ect….

Un  Saludo.

Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5440
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Enero/2019 a las 15:03

Lo unico que hace es abrir el LIBRO3 nada mas, no modifica ningún dato en los modulos 1 y 2 de este Libro3, claro dentro de lo poco que entiendo en la macro no veo referencia alguna a modulos.

Si, solo abre el libro3, es lo que hace el código que has compartido, yo he modificado para que «LIBRO Nºx» sea variable, no sé lo que hacen (o pretenden hacer) tus módulos. Y sí, si hay una referencia a módulos (la que ya tenías): Application.Run "'LIBRO3.xlsm'! RUTAS_VARIANTES", pero yo no puedo saber lo que ocurre en 'RUTAS_VARIANTES'.


Y si la acoplo sobre el LIBRO1 que es el libro maestro para cambiar dato en el modulo que hace referencia  G10, pues aquí error 1004. El error 1004 es muy genérico y no puedo saber que lo provoca, ni lo que has hecho y donde.


Quizas no me explico bien esta macro como ejemplo en un libro1 y en su modulo

 Sub UNA_2010_11()

De todo lo que la compone, solo quiero cambiar desde G10, en esta parte de macro

Workbooks.Open Filename:="C:\Users\root\Desktop\ESCRITORIO\CARPETA1\LIBRO1\CARPETA2\CARPETA3\LIBRO Nº6\2010-11\LIBRO3.xlsm"

Cambiar LIBRO Nº6 por LIBRO Nº7 o sea lo que escriba en G10. Eso es lo que te he ofrecido (creo).


Y una vez conseguido esto, pues lo mismo pero para otro defirente Libro . Para eso debes modificar el contenido de G10.


Perdon si la culpa es por mi explicación, pero creo que en el titulo del post esta claro, Macro para cambiar parte del contenido de un Modulo. Ese no creo que sea el camino a seguir para resolver (de modo eficiente) el problema, te ofrezco lo que considero que te resuelve. Lo que ocurre es que no nos estamos entendiendo.





Editado por AnSanVal - 25/Enero/2019 a las 15:05
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: ROC, NY
Estado: Sin conexión
Puntos: 3299
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Enero/2019 a las 15:40
A ver si me entero, que este hilo parece que se lia un poco.

Tú tienes en una carpeta, llamémosla "C:\x" varios libros, como libro1.xlsm, libro2.xlsm... libroN.xlsm

Lo que quieres es tener otro libro (miLibro.xls por ejemplo) que tenga una macro que abra uno de los libros que se encuentran el el directorio indicado, se seleccione la hoja "hoja1" y se ejecute una macro, que existe en ese libro que has abierto

¿Estoy en lo correcto hasta aquí?

Bien, lo que yo entiendo que dice AnSanVal, es que si tienes en miLibro.xlsm una lista con el nombre de los libros que quieres abrir, por ejemplo, en la celda A1 "libro1.xlsm", en la celda A2 "libro2.xlsm" y así sucesivamente, se puede hacer que la macro lea esos nombres, abra el libro indicado y ejecute la macro, sin necesidad de que la macro en si misma sea reescrita,

¿Es esto lo que se propone?


Un saludo.

Luis
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5440
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Enero/2019 a las 17:32
«...
se puede hacer que la macro lea esos nombres, abra el libro indicado y ejecute la macro, sin necesidad
 de que la macro en si misma sea reescrita,
... ¿Es esto lo que se propone?...»   

Por mi parte, es lo ue le aconsejo que haga (y lo que he propuesto), pero parece que no quiere desechar la idea inicial.




Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Enero/2019 a las 15:15
A ver que abra un libro y ejecute a otra macro ??' eso lo tengo resuleto

Lo que quiero es una macroque desde un libro maestro Librox cambia unos datos de una o unas macros dentro de un modulo que estan en lIbro2 .

Un Saludo.
Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Enero/2019 a las 19:30
Publicado originalmente por AnSanVal AnSanVal escribió:

Lo unico que hace es abrir el LIBRO3 nada mas, no modifica ningún dato en los modulos 1 y 2 de este Libro3, claro dentro de lo poco que entiendo en la macro no veo referencia alguna a modulos.

Si, solo abre el libro3, es lo que hace el código que has compartido, yo he modificado para que «LIBRO Nºx» sea variable, no sé lo que hacen (o pretenden hacer) tus módulos. Y sí, si hay una referencia a módulos (la que ya tenías): Application.Run "'LIBRO3.xlsm'! RUTAS_VARIANTES", pero yo no puedo saber lo que ocurre en 'RUTAS_VARIANTES'.


Y si la acoplo sobre el LIBRO1 que es el libro maestro para cambiar dato en el modulo que hace referencia  G10, pues aquí error 1004. El error 1004 es muy genérico y no puedo saber que lo provoca, ni lo que has hecho y donde.


Quizas no me explico bien esta macro como ejemplo en un libro1 y en su modulo

 Sub UNA_2010_11()

De todo lo que la compone, solo quiero cambiar desde G10, en esta parte de macro

Workbooks.Open Filename:="C:\Users\root\Desktop\ESCRITORIO\CARPETA1\LIBRO1\CARPETA2\CARPETA3\LIBRO Nº6\2010-11\LIBRO3.xlsm"

Cambiar LIBRO Nº6 por LIBRO Nº7 o sea lo que escriba en G10. Eso es lo que te he ofrecido (creo).


Y una vez conseguido esto, pues lo mismo pero para otro defirente Libro . Para eso debes modificar el contenido de G10.


Perdon si la culpa es por mi explicación, pero creo que en el titulo del post esta claro, Macro para cambiar parte del contenido de un Modulo. Ese no creo que sea el camino a seguir para resolver (de modo eficiente) el problema, te ofrezco lo que considero que te resuelve. Lo que ocurre es que no nos estamos entendiendo.





cuando pongo esta incorporacion a la macro
" & Worksheets("CENTRADAS").Range("G10").Value & "
y ejecuto la macro Sub UNA_2010_11() lo unico que hace es abrir el Libro3 no cambia el dato de la macro que yo pido en G10 LIBRO Nº6 por
LIBRO Nº7

Un Saludo.


Editado por yimycol - 26/Enero/2019 a las 19:31
Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 27/Enero/2019 a las 15:00
Solucionado tema, de esta manera.

En libro maestro o principal creo esta macro que es la que esta en LIBRO2 y de este la elimino.

desde libro maestro cambiare a mano Nº5,Nº6

Sub  PARA_ RUTAS ()

Sheets("HOJA 1").Select

    Cells.Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:= _

        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False       

  Sheets("HOJA 2").Select

    Cells.Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:= _

        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False       

    Sheets("HOJA3").Select

    Cells.Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:= _

        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False       

    Sheets("ORIGINAL").Select      

End Sub


Y desde esta otra macro en libro maestro la ejecuto a los demas libros,

Bueno varias macros como esta con su nombre centrada en una sola macro.


Sub  2010_11()

Application.ScreenUpdating = False

Workbooks.Open Filename:="C: RUTA………"

Sheets("ORIGINAL").Select

Range("C34").Select

Call PARA_ RUTAS

Application.Run "'LIBRO2.xlsm'! Cerrarlibro"

End Sub

Gracias por vuestra ayuda y sobre todo ideas.

Un saludo.


Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5440
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 27/Enero/2019 a las 18:56

Seleccionar (innecesariamente)  hojas y rangos, consume recursos y hace más lento el proceso.


En vez de...


Sheets("HOJA 2").Select

    Cells.Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:= _

        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False


... prueba con...


Worksheets("Hoja2").Cells.Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:=xlByRows, _

        MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False


... y tampoco necesitarás al final  Sheets("ORIGINAL").Select. Tambien sería preferible en vez de todas las celdas de la hoja (Cells) , trabajar sobre el rango específico donde pueda existir Nº5.



>>> El problema que veo es que: cuando tengas que cambiar  Nº6  a  Nº7 (u otro cualquiera), tendrás que modificar previamente el código de nuevo. En mi propuesta solo modificas el código la primera vez y ya vale para cualquier cambio de nombre.



Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 28/Enero/2019 a las 11:35
Publicado originalmente por AnSanVal AnSanVal escribió:

Seleccionar (innecesariamente)  hojas y rangos, consume recursos y hace más lento el proceso.


En vez de...


Sheets("HOJA 2").Select

    Cells.Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:= _

        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False


... prueba con...


Worksheets("Hoja2").Cells.Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:=xlByRows, _

        MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False


... y tampoco necesitarás al final  Sheets("ORIGINAL").Select. Tambien sería preferible en vez de todas las celdas de la hoja (Cells) , trabajar sobre el rango específico donde pueda existir Nº5.



>>> El problema que veo es que: cuando tengas que cambiar  Nº6  a  Nº7 (u otro cualquiera), tendrás que modificar previamente el código de nuevo. En mi propuesta solo modificas el código la primera vez y ya vale para cualquier cambio de nombre.





Como ya comente de macros lo justo o mas que justo, esta macro esta con grabadora, la opcion que me dabas lo que yo realice no me funciono
Bueno de esta forma con dos macros en libro maestro, que son las que estan repartidas en sus carpetas y libros unos 27 libros, solo tengo que modificar (claro a mano buscar>reemplazar) dos macros no 27.

Un Saludo.
Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 28/Enero/2019 a las 12:01
Lo de modificar Cells podria ser esto asi ????

Worksheets("Hoja2").Range("A1:A14").Replace What:="Nº5", Replacement:= _

        "Nº6", LookAt:=xlPart, SearchOrder:=xlByRows, _

        MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 28/Enero/2019 a las 14:11
Bueno el tema anterior de afinar la macro hecho, gano mas menos 0,12 sg. por ejecucuion

De 27 macros se ha quedado en 4 no dos como pensé.

Me quedo el poder hacer las rectificaciones de las macros en los módulos dentro del mismo libro, pero bueno…. Que voy hacer no di con ello pese a la propuesta que se me dio en el foro.

Un Saludo.

Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5440
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 28/Enero/2019 a las 19:46
Desde 'este lado' solo podemos ver lo que tú muestres. Comprendo perfectamente que en muchos casos no se puede mostrar mucho a causa del contenido confidencial, pero... sobre lo mostrado... he intentado ayudarte.



Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 30/Enero/2019 a las 19:40
No se si abrir otro post o seguir en este ya que es el mismo tema.
Me pasaron esta macro que es lo que necesitaba, realiza el cambio de datos en modulos:

Sub Cambiar_1()
Dim VBModulo As CodeModule
Dim LineasCod As Integer, x As Integer
Dim Cadena As String
Set VBModulo = Workbooks("CAMBIAR RUTAS.xlsm").VBProject.VBComponents("Módulo4").CodeModule
Let LineasCod = VBModulo.CountOfLines
For x = 1 To LineasCod
    Let Cadena = VBModulo.Lines(x, 1)
    If InStr(1, Cadena, "Nº6") > 0 Then
        Let Cadena = Application.WorksheetFunction.Substitute(Cadena, "Nº6", "Nº5")
        VBModulo.replaceLine (x), Cadena
    ElseIf InStr(1, Cadena, "Nº7") > 0 Then
        Let Cadena = Application.WorksheetFunction.Substitute(Cadena, "Nº7", "Nº6")
        VBModulo.replaceLine (x), Cadena
    End If
Next x
End Sub

Ahora quiero hacerlo desde la referncia de una celda, bueno tiene que ser dos celdas al ser dos los datoas a cambiar

Un Saludo.


Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: ROC, NY
Estado: Sin conexión
Puntos: 3299
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 31/Enero/2019 a las 00:56
Perdona, pero viendo ese código, ¿solo necesitas que si es 6 pase a 7 y si es 7 pase a 6?
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
yimycol Ver desplegable
Habitual
Habitual


Unido: 23/Enero/2019
Localización: madrid
Estado: Sin conexión
Puntos: 60
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita yimycol Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 31/Enero/2019 a las 11:09
Publicado originalmente por lbauluz lbauluz escribió:

Perdona, pero viendo ese código, ¿solo necesitas que si es 6 pase a 7 y si es 7 pase a 6?


Perdón las prisas no son buenas, al hacer tantas pruebas es lo que pasa.

 Es eta

 

Sub Cambiar_1()
Dim VBModulo As CodeModule
Dim LineasCod As Integer, x As Integer
Dim Cadena As String
Set VBModulo = Workbooks("CAMBIAR RUTAS.xlsm").VBProject.VBComponents("Módulo4").CodeModule
Let LineasCod = VBModulo.CountOfLines
For x = 1 To LineasCod
    Let Cadena = VBModulo.Lines(x, 1)
    If InStr(1, Cadena, "Nº5") > 0 Then
        Let Cadena = Application.WorksheetFunction.Substitute(Cadena, "Nº5", "Nº6")
        VBModulo.replaceLine (x), Cadena
    ElseIf InStr(1, Cadena, "Nº6") > 0 Then
        Let Cadena = Application.WorksheetFunction.Substitute(Cadena, "Nº6", "Nº7")
        VBModulo.replaceLine (x), Cadena
    End If
Next x
End Sub

Cambiar Nº5 por Nº6 y Nº 6 por Nº7

Desde las celdas de una hoja ,seria creo desde 4 celdas ejemplo HOJA1 G10,11,12,13


Un Saludo.



Editado por yimycol - 31/Enero/2019 a las 13:29
Arriba
 Responder Responder Página  <123>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable