Cambio de columnas para insertar mes

Columnas para el mes; en Tabla1 Columna G en Tabla2 Columna H Tabla3 Columna F

Pero tampoco me manda aviso el cerrar el libro si existe copia o no, para que yo decida eliminar las copias o no

Saludos

2 Respuestas

Respuesta
3

En la apertura del libro te quedaron estos códigos. Allí debes modificar la letra de la col que de la Tabla3 (en lugar de E quedaría entonces F según me comentas.)

Private Sub Workbook_Open()     'se trabajará sobre 3 hojas
Dim UltFila As Integer
MESact = Format(Date, "mmmm-yyyy")
'Para Tabla1
filaUlt = Sheets("Tabla1").Range("G" & Rows.Count).End(xlUp).Row
If Sheets("Tabla1").Range("G" & filaUlt) <> MESact Then
    Sheets("Tabla1").Range("G" & filaUlt + 1) = MESact
    Call actualiza("Tabla1")
End If
'Para Tabla2
UltFila = Sheets("Tabla2").Range("H" & Rows.Count).End(xlUp).Row
If Sheets("Tabla2").Range("H" & UltFila) <> MESact Then
    Sheets("Tabla2").Range("H" & UltFila + 1) = MESact
    Call actualiza("Tabla2")
End If
'Para Tabla3
UltFila = Sheets("Tabla3").Range("E" & Rows.Count).End(xlUp).Row
If Sheets("Tabla3").Range("E" & UltFila) <> MESact Then
    Sheets("Tabla3").Range("E" & UltFila + 1) = MESact
    Call actualiza("Tabla3")
End If
End Sub

Y en el módulo 'Actualiza_texto' , tenías estas instrucciones que te comenté hacen lo mismo en todas las hojas. 

'quitar meses de col I y H ''de las copias
If HOJA = "Tabla1" Then
    Columns("H:H").Clear                    'Elimina el(los) mes(es) en la columna de la copia
Else
    Columns("H:H").Clear                    'Elimina el(los) mes(es) en la columna de la copia
End If
'zzzzzzzzzzzzzz

Borralas y colocá estas otras, según tus letras, porque además no estabas limpiando las copias sino las originales. Cuando agregues la 4ta hoja, agregá otro ElseIf .

'quitar meses de col de las copias, que son las hojas activas
If HOJA = "Tabla1" Then
    ActiveSheet.Columns("G:G").Clear                    'Elimina el(los) mes(es) en la columna de la copia
ElseIf HOJA = "Tabla2" Then
    ActiveSheet.Columns("H:H").Clear                    'Elimina el(los) mes(es) en la columna de la copia
ElseIf HOJA = "Tabla3" Then
    ActiveSheet.Columns("F:F").Clear
End If

Y más abajo, actualiza las 3 col de la copia de la Tabla3. Porque la hoja activa sigue siendo la copia:

ElseIf HOJA = "Tabla3" Then
    'se incrementa en la hoja Tabla 3
     x = Range("A" & Rows.Count).End(xlUp).Row       'se establece el fin del rango
     For I = 3 To x                                  'recorre la tabla hasta última fila ocupada
         Cells(I, 2).Value = Cells(I, 2) * 1.05  'AGREGADO   'en columna B incrementa el 0.5%
         Cells(I, 3).Value = Cells(I, 3) * 1.05  'AGREGADO   'en columna C incrementa el 0.5%
         Cells(I, 4).Value = Cells(I, 4) * 1.05  'AGREGADO   'en columna D incrementa el 0.5%
     Next I
End If

Sdos. Ya seguiré con la otra consulta.

Respuesta
1

Un ejemplo para cambiar las columnas en las tablas y también para mostrar un mensaje de aviso si existe una copia del libro:

Sub CambiarColumnas()
    Dim libroOriginal As Workbook
    Dim libroCopia As Workbook
    Dim rutaCopia As String
    Dim mes As String
    ' Establecer el mes para las nuevas columnas
    mes = "Junio" ' Cambia esto al mes deseado
    ' Abrir el libro original
    Set libroOriginal = ThisWorkbook
    ' Verificar si ya existe una copia del libro
    rutaCopia = ThisWorkbook.Path & "\" & "Copia_del_libro.xlsx" ' Cambia el nombre de la copia según tus necesidades
    If Dir(rutaCopia) <> "" Then
        ' Si existe la copia, mostrar un mensaje de aviso
        If MsgBox("Ya existe una copia del libro. ¿Deseas eliminarla y crear una nueva?", vbQuestion + vbYesNo) = vbYes Then
            ' Eliminar la copia existente
            Kill rutaCopia
        Else
            Exit Sub ' Salir del código si no se desea crear una nueva copia
        End If
    End If
    ' Crear una copia del libro original
    libroOriginal.SaveCopyAs rutaCopia
    Set libroCopia = Workbooks.Open(rutaCopia)
    ' Cambiar las columnas en las tablas de los libros
    With libroOriginal.Sheets("Tabla1")
        .Columns("G").Cut
        libroCopia.Sheets("Tabla1").Columns("H").Insert Shift:=xlToRight
    End With
    With libroOriginal.Sheets("Tabla2")
        .Columns("H").Cut
        libroCopia.Sheets("Tabla2").Columns("H").Insert Shift:=xlToRight
    End With
    With libroOriginal.Sheets("Tabla3")
        .Columns("F").Cut
        libroCopia.Sheets("Tabla3").Columns("H").Insert Shift:=xlToRight
    End With
    ' Guardar y cerrar los libros
    LibroCopia. Save
    LibroCopia. Close
    LibroOriginal. Close
    ' Mostrar un mensaje de finalización
    MsgBox "Las columnas se han cambiado correctamente y se ha creado una copia del libro.", vbInformation
End Sub

Asegúrate de ajustar el nombre de la copia del libro y el mes según tus necesidades. Además, este código asume que las tablas se encuentran en hojas con los nombres "Tabla1", "Tabla2" y "Tabla3" en ambos libros. Asegúrate de ajustar los nombres de las hojas según tus nombres de hojas reales.

Pregunto Elsa; las copias no pueden quedar en el mismo libro? como estaban? como Copia Tabla1, o Copia Tabla2 o Copia Tabla3? esto es por si quiero comparar la Copia cuanto a la original después de actualizadas con el %.

Sub CambiarColumnas()
    Dim libroOriginal As Workbook
    Dim hojaOriginal As Worksheet
    Dim hojaCopia As Worksheet
    Dim mes As String
    Dim copiaExistente As Boolean
    ' Establecer el mes para las nuevas columnas
    mes = "Junio" ' Cambia esto al mes deseado
    ' Referenciar el libro original y las hojas de la tabla
    Set libroOriginal = ThisWorkbook
    Set hojaOriginal = libroOriginal.Sheets("Tabla1")
    ' Verificar si ya existe una copia de la hoja
    copiaExistente = False
    On Error Resume Next
    Set hojaCopia = libroOriginal.Sheets("Copia " & hojaOriginal.Name)
    On Error GoTo 0
    If Not hojaCopia Is Nothing Then
        ' Si existe la copia, mostrar un mensaje de aviso
        If MsgBox("Ya existe una copia de la hoja " & hojaOriginal.Name & ". ¿Deseas eliminarla y crear una nueva?", vbQuestion + vbYesNo) = vbYes Then
            ' Eliminar la copia existente
            Application.DisplayAlerts = False
            hojaCopia.Delete
            Application.DisplayAlerts = True
        Else
            Exit Sub ' Salir del código si no se desea crear una nueva copia
        End If
    End If
    ' Crear una copia de la hoja original
    hojaOriginal.Copy After:=hojaOriginal
    Set hojaCopia = libroOriginal.ActiveSheet
    hojaCopia.Name = "Copia " & hojaOriginal.Name
    ' Cambiar las columnas en la hoja copia
    With hojaCopia
        .Columns("G").Cut
        .Columns("H").Insert Shift:=xlToRight
    End With
    ' Actualizar el título de la columna
    hojaCopia.Cells(1, "H").Value = "Mes " & mes
    ' Guardar y cerrar el libro
    libroOriginal.Save
    ' Mostrar un mensaje de finalización
    MsgBox "La columna se ha cambiado correctamente y se ha creado una copia de la hoja.", vbInformation
End Sub

Este código creará una copia de la hoja "Tabla1" con el nombre "Copia Tabla1" en el mismo libro. El proceso es similar para las otras tablas. Además, se actualiza el título de la columna copiada con el mes correspondiente.

De esta manera, puedes comparar la copia con la hoja original y realizar cualquier análisis necesario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas