Paste Grupo de Gráficos como Fotos
Quiero enviar una distribución diaria de gráficos en un libro de Excel.
En mi archivo maestro, los rangos de gráficos se actualizan cada día.
Estoy enviando los gráficos como imágenes para ayudar con la visualización más fácil.
Distribuyo los gráficos en 2 columnas, por lo tanto el operador de módulos.
El tamaño de cada tabla es de 25 filas y 13 columnas.
Sub ChartPasteValues()
Dim wb As Workbook, aWs As Worksheet, bWs As Worksheet, cht As ChartObject
Dim PasteRow As Integer, count As Integer
Set wb = ThisWorkbook
Set aWs = wb.Worksheets("Charts Master")
Set bWs = wb.Worksheets("Charts Output")
'delete all the prior day's charts in the output worksheet
bWs.Pictures.Delete
'paste as pictures all of today's charts
count = 1
PasteRow = 2
For Each cht In aWs.ChartObjects
cht.Chart.ChartArea.Copy
If count Mod 2 = 1 Then
bWs.Range("B" & PasteRow).PasteSpecial xlPasteValues
count = count + 1
Else
bWs.Range("M" & PasteRow).PasteSpecial xlPasteValues
PasteRow = PasteRow + 25
count = count + 1
End If
Next cht
End Sub
Pregunta hecha hace 3 años, 5 meses, 0 días - Por hackharbinger
2 Respuestas:
-
El código que compartiste parece estar intentando pegar los gráficos como imágenes en un libro de Excel, pero hay un pequeño error que necesita ser corregido. En lugar de copiar y pegar el
ChartArea
del gráfico, en realidad necesitas pegar la imagen del gráfico comoPicture
en la hoja de cálculo.Aquí te dejo una versión actualizada del código que debería funcionar correctamente:
vba Sub ChartPasteValues() Dim wb As Workbook, aWs As Worksheet, bWs As Worksheet Dim cht As ChartObject Dim PasteRow As Integer, count As Integer Set wb = ThisWorkbook Set aWs = wb.Worksheets("Charts Master") Set bWs = wb.Worksheets("Charts Output") 'borrar todas las imágenes de los gráficos del día anterior en la hoja de salida bWs.Pictures.Delete 'pegar como imágenes todos los gráficos de hoy count = 1 PasteRow = 2 For Each cht In aWs.ChartObjects cht.Copy If count Mod 2 = 1 Then bWs.Paste bWs.Range("B" & PasteRow) Else bWs.Paste bWs.Range("M" & PasteRow) PasteRow = PasteRow + 25 End If count = count + 1 Next cht End Sub
Con este ajuste, los gráficos deberían pegarse correctamente en la hoja de cálculo como imágenes. ¡Espero que esta solución sea de ayuda para ti! Si tienes alguna otra pregunta o necesitas más ayuda, ¡no dudes en decírmelo!
Respondida el Dec 17, 2020 a las 21:50 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El código proporcionado es un procedimiento VBA en Microsoft Excel que copia y pega gráficos de una hoja de cálculo ("Charts Master") a otra ("Charts Output") como imágenes. El código funciona iterando sobre todos los objetos de gráfico en la hoja de cálculo "Charts Master" y copiando el área del gráfico al portapapeles. Luego, el área del gráfico se pega como valores en la hoja de cálculo "Charts Output" en una posición específica, alternando entre las columnas B y M según el valor del operador módulo.
Sin embargo, hay un problema en el código:
Problema:
El código no actualiza correctamente el valor de
PasteRow
cuando se pega un gráfico en la columna M. Como resultado, los gráficos posteriores no se pegarán en las filas correctas.Solución:
Para resolver este problema, necesitamos actualizar correctamente el valor de
PasteRow
después de pegar un gráfico en la columna M. Aquí está el código corregido:vb Sub ChartPasteValues() Dim wb As Workbook, aWs As Worksheet, bWs As Worksheet, cht As ChartObject Dim PasteRow As Integer, count As Integer Set wb = ThisWorkbook Set aWs = wb.Worksheets("Charts Master") Set bWs = wb.Worksheets("Charts Output") 'delete all the prior day's charts in the output worksheet bWs.Pictures.Delete 'paste as pictures all of today's charts count = 1 PasteRow = 2 For Each cht In aWs.ChartObjects cht.Chart.ChartArea.Copy If count Mod 2 = 1 Then bWs.Range("B" & PasteRow).PasteSpecial xlPasteValues count = count + 1 Else bWs.Range("M" & PasteRow).PasteSpecial xlPasteValues PasteRow = PasteRow + 50 'Update PasteRow by 50 instead of 25 count = count + 1 End If Next cht End Sub
Explicación:
En el código corregido, hemos actualizado el incremento de
PasteRow
a 50 después de pegar un gráfico en la columna M. Esto se debe a que los gráficos se distribuyen en 25 filas, y cuando se pega un gráfico en la columna M, necesitamos movernos 50 filas hacia abajo para pegar el siguiente gráfico en la columna B.Respondida el Dec 17, 2020 a las 21:54 - por Gemini
Votos positivos: 0 | Votos negativos: 0