Macro para cambiar parte del contenido en un modulo ?

Necesitaría una macro dentro del mismo libro, que me cambie en una macros que están en Modulo 1 y 2

Parte del contenido.

Dentro de una ruta ejemplo: Libro Nº6 por Libro Nº7 o simplemente Nº6 por Nº7

1 respuesta

Respuesta
1

[Hola

Sí se puede cambiar líneas de macros con otras macros pero, no es tan simple como por ejemplo usar "reemplazar" en una celda y por eso mismo yo sugiero que comentes un poco más sobre lo que necesitas y/o en que momentos, ya que igual si reemplazas una vez ¿qué pasaría y/o de dónde sacarías los datos para hacer una y otra vez (de ser necesario)?

Comentas.

Abraham Valencia

Seria cambiar un dato determinado desde una celda de una hoja.

La celda donde estaría el dato a cambiar en los módulos  ejemplo: G10 nombre de hoja CENTRADAS LIBRO Nº6 por LIBRO Nº7 o Nº6 por Nº7

Esta sería una de las varias macros que están en el modulo 1 y mas de lo mismo en modulo 2 solo cambia el nombre de las macros el contenido es lo mismo salvo el dato del libro3, el dato a cambiar seria  LIBRO Nº6 por LIBRO Nº7 o Nº6 por Nº7, que irá cambiando en G10 hoja CENTRADAS.

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 desde un libro maestro que sería el mismo donde reflejo la explicación de arriba, hacer lo mismo pero de otros libros en otras carpetas.

Espero explicarme bien.

Un Saludo.

[Hola

Cambiar el código me parece poco práctico, mejor tener en la celda que mencionas siempre el nombre del libro que necesitas. Cambia esta línea así:

Workbooks.Open Filename:= _
    "C:\Users\root\Desktop\ESCRITORIO\CARPETA1\LIBRO1\CARPETA2\CARPETA3\" & Worksheets("Centradas").Range("G10").Value & _
        "\2010-11\LIBRO3.xlsm"

Y en la celda G10 de la hoja "Centradas" siempre ten el nombre del libro que deseas. Comentas

Abraham Valencia

Perdona no entiendo de tener en g10 el libro que necesito ???

lo unico que entiendo es la incorporacion dentro de la macro

" & Worksheets("Centradas").Range("G10").Value & _  "

Que hace referencia a lo que escriba en la celda G10, pero esto como cambia los datos de la macro en un modulo que quiero Nº6 por Nº7 ???

Un Saludo.

[Hola nuevamente

Lo que he hecho aquí, al igual que en el otro foro en el que han intentado ayudarte, es usar la forma que suena más lógica y fácil para reemplazar valores dentro de una cadena, siendo en este caso la cadena una parte de tu ruta.

Si reemplazas la línea tal cual te he sugerido, basta que en la celda respectiva de la hoja correspondiente pongas el nombre exacto de la (sub) carpeta desde la que necesitas abrir el archivo, es decir, solo tendrías que cambiar el valor de la celda por el adecuado cada vez antes de correr la macro.

Si quieres usar el "LIBRO Nº7" basta poner eso en la celda, lo mismo para "LIBRO Nº6" o lo que necesites (obvio sin las comillas dentro de la celda)..

De ese modo no tendrás que estar cambiando una macro con otra macro, sino solo el valor de la celda.

¿Se entiende?

Abraham Valencia

PD: Si insistes en cambiar una macro con otra macro, es aún más complicado que esto (sobre todo de entender) por si acaso.

Bueno voy abandonar  la idea de cambiar la primera macro desde el libro maestro, desde este lo are desde buscar reemplazar desde módulos.

En lo anterior con

" & Worksheets("Centradas").Range("G10").Value & _  "

Lo que monte no cambiaba nada en modulo, que es mi intención.

Pero ahora sobre la misma idea desde LIBRO1 (maestro) cambiar en LIBRO2 en modulo 1 el dato "Nº4” por "Nº5” o el que fuese 6, 7, 8,9 de esta macro ( esto es para varias carpetas con libros y es un coñazo cambiar modulo a modulo el dato "Nº4” ) :

Sub RUTAS_VARIANTES()

Sheets("HOJA 1").Select

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

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

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

  Sheets("HOJA 2").Select

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

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

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

    Sheets("HOJA 3").Select

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

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

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

        Sheets("HOJA 4").Select

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

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

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

        Sheets("HOJA 5").Select

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

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

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

     Sheets("HOJA6").Select

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

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

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

     Sheets("HOJA7").Select

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

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

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

     Sheets("HOJA 8").Select

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

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

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

     Sheets("HOJA 9").Select

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

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

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

     Sheets("HOJA 10").Select

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

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

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

    Sheets("HOJA ORIGINAL").Select

    ThisWorkbook.Close SaveChanges:=True

End Sub

Un saludo.

[Hola

Ya vi lo que escribiste en el otro foro por lo que, para que no te quedes con la intriga, igual te dejo un ejemplo de cómo cambiar macros con macros. Primero que nada debes activar las referencias a "Microsoft Visual Basic for Applications Extensibility 5.3". Luego, por ejemplo para cambiar datos del "Módulo5" como por ejemplo la palabra "LIBRO Nº6" y cambiarla por "LIBRO Nº7", se usa esto:

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

Donde dice "Workbooks(1)" para mayor especificación puede ir el nombre del libro con las macros a cambiarse. Segundo, en este caso se cambia de un módulo puntual pero también se puede hacer un bucle que recorra todos los módulos del libro correspondiente pero, obvio hay que programar más.

Saludos]

Abraham Valencia

Me imagino que sera lo que ves de mi solución es del mismo foro.

Y como veras solo me queeda un tema y es el cambio en módulos pero desde el mismo libro maestro, voy a ver si soy capaz de acoplar esta macro.

¿En herramientas>Referencias no tengo la librería Microsoft Visual Basic for Applications Extensibility 5.3?

Pues a menos que uses Excel 97 o inferior (y no creo que sea el caso), ahí debería de estar. Las referencias están en orden alfabético, debería ser fácil de encontrar:

Verifica.

Abraham Valencia

Lo encontre.

En el libro maestro CAMBIAR RUTAS.xlsm,trato de acoplar tu macro para cambiar valores del Nº6 al Nº7 en modulo 4 (realmente serian cambiar dos valores a la vez ) que estoy haciendo mal ???

Sub CambiarSub()

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º7")

        VBModulo.replaceLine (x), Cadena

    End If

Next x

End Sub

me da error en esta linea

Set VBModulo = Workbooks(CAMBIAR RUTAS.xlsm).VBProject.VBComponents("Módulo4").CodeModule

Un Saludo.

Los nombres de archivos/libros van entre comillas ya que son cadenas de texto:

Set VBModulo = Workbooks("CAMBIAR RUTAS.xlsm").VBProject.VBComponents("Módulo4").CodeModule

Saludos]

Abraham Valencia

 esta macro va ok.

Para libros externos tambien me funciona ok.

Sub Cambiar_Libro_2_2010_11()

Dim VBModulo As CodeModule

Dim LineasCod As Integer, x As Integer

Dim Cadena As String

Set VBModulo = Workbooks.Open("RUTA……..").VBProject.VBComponents("Módulo3").CodeModule

Let LineasCod = VBModulo.CountOfLines

For x = 1 To LineasCod

    Let Cadena = VBModulo.Lines(x, 1)

    If InStr(1, Cadena, "LIBRO SOLO 12 EUR  Nº4") > 0 Then

        Let Cadena = Application.WorksheetFunction.Substitute(Cadena, "LIBRO SOLO 12 EUR  Nº4", "LIBRO 12 EUR Nº7")

        VBModulo.replaceLine (x), Cadena

    End If

Next x

Application.Run "'Libro 2.xlsm'! Cerrarlibro"

End Sub

Pero para cambiar dos datos ???? cambiar a la vez ejemplo Nº4 por Nº5 y Nº5 por Nº6 pero cada uno en la posision donde se encuentran en la macro.

Y ya sin querer abusar más de tu tiempo, estos cambios que se realizan en la macro Nº4 por Nº5 ect… desde una referencia en una celda del libro ¿??

Estas macros me ahorran un montón de trabajo, pero para ya finalizar de acabar el rizo desde una celda no tengo que entrar en los módulos y hacer los cambios  manual

 Un Saludo.

[Hola

En realidad una forma es agregar más "If" o quizás mejor "ElseIf," y en cada uno la cadena a ser reemplazada y el reemplazo. Ah, ojo, escribiste "Nº4 por Nº5 y Nº5 por Nº6", asumo que sería algo más bien parecido a " Nº4 por Nº5 y Nº6 por Nº7", ya que reemplazar para reemplazar no tiene sentido.

Sobre usar referencias desde celdas del libro, pues es algo parecido a lo que te mencioné antes:

 Let Cadena = Application.WorksheetFunction.Substitute(Cadena, Worksheets("nombrehoja").Range("A3"), Worksheets("nombrehoja").Range("B3"))

Algo así.

Abraham Valencia

los dos datos que hay en la macro del libro que cambian datos de otro libro externo

Sub RUTAS_2010_11_()

Worksheets("HOJA 1").Select

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

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

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

  Worksheets("HOJA 2").Select

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

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

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

Como puedes ver en un momento dado tengo que cambiar en Nº5 por el Nº6  y el Nº6 por Nº7

De tu macro hice 2 macros con distintos nombres( para poder cambiar dos datos a la vez de la macro)  y después la unifique en una macro y cambios manuales de datos y pufff al menor despiste me veo con dos Nº5 o dos Nº6 en la macro.

Un Saludo.

La programación es mucho de lógica, copiar/pegar y/o unificar procesos, no necesariamente y/o siempre dará el resultado esperado.

El dilema es que estamos en un momento en que solo tú, que conoces tus archivos al detalle y que con exactitud tienes una idea de lo que quieres hacer, puedes resolver y/o programar lo que necesitas.

Igual, de haber otras preguntas puntuales, ya sabes que en los foros siempre hay gente dispuesta a ayudar, aunque no siempre crean (creamos) que la respuesta ideal sea la que un usuario cree/espera je je je.

Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas