Macro Traer información con un Botón y Procesarla con Otro
publicado
Hola Grupo buenas tardes,
Agradecería su colaboración con el siguiente caso:
Tengo un archivo de Excel así:
Hoja = Procesar: que contiene los botones con las macros
Hoja = Data
Tabla = Table1 en la hoja Data y contiene los registros o datos que proceso con las macros
Botón = btnCargueInfo en la hoja Procesar
Botón = btnFacturacion en la hoja Procesar
Macro Botón btnFacturacion :
Primero construí esta macro que amablemente un miembro de esta comunidad me ayudó a corregir en un par de errores que tenía. La macro hace lo siguiente
Copia de la columna K a la AC, separa en columnas el contenido de AC en AC y AD y luego en la Columna AE Concatena los datos contenidos en AC y J y funciona correctamente.
Macro Botón btnCargueInfo:
Esta macro lo que busca es lo siguiente:
1-. Borrar los datos de la tabla Table1 de la hoja Data
2-. De una ubicación específica en SharePoint abrir el archivo 01WMInforme.xlsx que contiene el informe de la última semana, copiar los datos de la hoja Data, Table1 al archivo de la macro 02WMControlRadicados.xlsm en la hoja Data, en la misma Table1
3-. Luego correr la macro del botón btnFacturacion (que adiciona las 3 columnas) y así sucesivamente. Se vuelve el proceso cíclico.
Pero tengo dos problemas:
4-. Cuando ejecuto el código de btnCargueInfo, no me elimina las 3 columnas creadas con el otro botón AC AD y AE a pesar que en el código coloco Columns("AC:AE").Delete
5-. Me llena la columna AC con los registros, ejemplo
2e5843a6-c230-4519-b7e2-ac9a489e09aa
4a73371e-ba7d-49a9-8263-6048f833260c
dd530301-dc9e-4257-a6fe-ac87327861eb
Y no me borra la columna AC a pesar que en el código coloco Columns("AC:AC").Delete, esto lo hago debido al numeral anterior, si no generara esos datos en la columna no habría necesidad
6-. Y claro al ejecutar la macro del botón btnFacturacion pues no funciona bien porque se corre todo
De antemano mil gracias por la colaboración
A continuación, el código de ambas macros.
Macro Botón btnCargueInfo:
Private Sub btnCargueInfo_Click()
' Declarar variables
Dim informeWB As Workbook
Dim informeWS As Worksheet
Dim controlWB As Workbook
Dim controlWS As Worksheet
' Desactivar actualizaciones y eventos de Excel para mejorar el rendimiento
Application.ScreenUpdating = False
Application.EnableEvents = False
' Abrir el archivo de informe
Set informeWB = Workbooks.Open("https://termotecnicaco.sharepoint.com/sites/CAD/Documentos%20compartidos/Archivos/01WMInforme.xlsx")
Set informeWS = informeWB.Worksheets("Data")
' Borrar los registros existentes en la tabla del archivo de control
Columns("AC:AE").Delete
Set controlWB = ThisWorkbook
Set controlWS = controlWB.Worksheets("Data")
controlWS.ListObjects("Table1").DataBodyRange.ClearContents ' Borrar solo el contenido
' Copiar los datos desde el archivo de informe a la tabla del archivo de control
Hola Grupo buenas tardes,
Agradecería su colaboración con el siguiente caso:
Tengo un archivo de Excel así:
Hoja = Procesar: que contiene los botones con las macros
Hoja = Data
Tabla = Table1 en la hoja Data y contiene los registros o datos que proceso con las macros
Botón = btnCargueInfo en la hoja Procesar
Botón = btnFacturacion en la hoja Procesar
Macro Botón btnFacturacion :
Primero construí esta macro que amablemente un miembro de esta comunidad me ayudó a corregir en un par de errores que tenía. La macro hace lo siguiente
Copia de la columna K a la AC, separa en columnas el contenido de AC en AC y AD y luego en la Columna AE Concatena los datos contenidos en AC y J y funciona correctamente.
Macro Botón btnCargueInfo:
Esta macro lo que busca es lo siguiente:
1-. Borrar los datos de la tabla Table1 de la hoja Data
2-. De una ubicación específica en SharePoint abrir el archivo 01WMInforme.xlsx que contiene el informe de la última semana, copiar los datos de la hoja Data, Table1 al archivo de la macro 02WMControlRadicados.xlsm en la hoja Data, en la misma Table1
3-. Luego correr la macro del botón btnFacturacion (que adiciona las 3 columnas) y así sucesivamente. Se vuelve el proceso cíclico.
Pero tengo dos problemas:
4-. Cuando ejecuto el código de btnCargueInfo, no me elimina las 3 columnas creadas con el otro botón AC AD y AE a pesar que en el código coloco Columns("AC:AE").Delete
5-. Me llena la columna AC con los registros, ejemplo
2e5843a6-c230-4519-b7e2-ac9a489e09aa
4a73371e-ba7d-49a9-8263-6048f833260c
dd530301-dc9e-4257-a6fe-ac87327861eb
Y no me borra la columna AC a pesar que en el código coloco Columns("AC:AC").Delete, esto lo hago debido al numeral anterior, si no generara esos datos en la columna no habría necesidad
6-. Y claro al ejecutar la macro del botón btnFacturacion pues no funciona bien porque se corre todo
De antemano mil gracias por la colaboración
A continuación, el código de ambas macros.
Macro Botón btnCargueInfo:
Private Sub btnCargueInfo_Click()
' Declarar variables
Dim informeWB As Workbook
Dim informeWS As Worksheet
Dim controlWB As Workbook
Dim controlWS As Worksheet
' Desactivar actualizaciones y eventos de Excel para mejorar el rendimiento
Application.ScreenUpdating = False
Application.EnableEvents = False
' Abrir el archivo de informe
Set informeWB = Workbooks.Open("https://termotecnicaco.sharepoint.com/sites/CAD/Documentos%20compartidos/Archivos/01WMInforme.xlsx")
Set informeWS = informeWB.Worksheets("Data")
' Borrar los registros existentes en la tabla del archivo de control
Columns("AC:AE").Delete
Set controlWB = ThisWorkbook
Set controlWS = controlWB.Worksheets("Data")
controlWS.ListObjects("Table1").DataBodyRange.ClearContents ' Borrar solo el contenido
' Copiar los datos desde el archivo de informe a la tabla del archivo de control
informeWS.ListObjects("Table1").DataBodyRange.Copy controlWS.Range("Table1").Cells(1)
' Cerrar el archivo de informe sin guardar cambios
informeWB.Close False
Columns("AC:AC").Delete
' Activar actualizaciones y eventos de Excel nuevamente
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Macro Botón btnFacturacion :
Private Sub btnFacturacion_Click()
Dim wsData As Worksheet
Dim wsProcesar As Worksheet
Dim MiTabla As ListObject
Dim NuevaColumnaAC As ListColumn
Dim NuevaColumnaAE As ListColumn
Dim UltimaFila As Long
Dim Celda As Range
Dim Valor As String
Dim partes As Variant
' Definir las hojas de trabajo
Set wsData = ThisWorkbook.Worksheets("Data")
Set wsProcesar = ThisWorkbook.Worksheets("Procesar")
' Definir la tabla
Set MiTabla = wsData.ListObjects("Table1")
' Añadir columna AC y copiar los datos de la columna K
Set NuevaColumnaAC = MiTabla.ListColumns.Add
NuevaColumnaAC.Name = "NitProveedor"
MiTabla.ListColumns(11).DataBodyRange.Copy Destination:=NuevaColumnaAC.DataBodyRange
' Separar las columnas AC y AE
For Each Celda In NuevaColumnaAC.DataBodyRange
Valor = Trim(Celda.Value)
' Separar AC en columnas AC y AE
partes = Split(Valor, "|")
Celda.Value = Trim(partes(0))
Celda.Offset(0, 1).Value = Trim(partes(1))
Next Celda
' Renombrar columna AE
Set NuevaColumnaAE = MiTabla.ListColumns.Add
NuevaColumnaAE.Name = "NitConFactura"
' Obtener la última fila de la tabla
UltimaFila = MiTabla.ListRows.Count
' Formatear columnas AC y AE como texto
NuevaColumnaAC.Range.NumberFormat = "@"
NuevaColumnaAE.Range.NumberFormat = "@"
'' Llenar la columna AE con la concatenación de AC y J
' Llenar la columna AE con la concatenación de AC y J
For Each Celda In NuevaColumnaAE.DataBodyRange
Celda.Value = Celda.Offset(0, -2).Value & Celda.Offset(0, -21).Value
Next Celda
' Ajustar el ancho de las nuevas columnas
NuevaColumnaAC.Range.EntireColumn.AutoFit
NuevaColumnaAE.Range.EntireColumn.AutoFit
' Activar la hoja "Procesar"
wsProcesar.Activate
End Sub