【发布时间】:2020-07-21 11:00:10
【问题描述】:
我有一个 excel 文件,它遍历不同的 excel 文件以更新它们并从中创建一个 PDF 文件。
宏遍历行并打开文件。此代码打开文件:
Private Sub openFile(row As Integer)
Dim filePath As String
Dim wb As Workbook
filePath = Application.ActiveWorkbook.Path + "\" + allRows(row).filename
Set wb = Workbooks.Open(filePath)
Application.Run "RefreshEntireWorksheet"
Application.OnTime Now + (TimeSerial(0, 1, 59)), "'ThisWorkbook.updateCharts """ & row & "'"
Application.OnTime Now + (TimeSerial(0, 2, 59)), "'ThisWorkbook.createEmail'"
End Sub
现在如果有多个文件,只有 1 个文件正确更新了图表(文件在前面)。 updateCharts 代码似乎根本不起作用:
Sub updateCharts(row As Integer)
Dim SheetName As String
Dim wb As Workbook
SheetName = "Sheet1"
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
Set wb = Workbooks(allRows(row).filename)
wb.Activate
wb.Sheets(SheetName).Activate
For Each cht In wb.Sheets(SheetName).ChartObjects
cht.Chart.Refresh
DoEvents
Next cht
End Sub
我检查了以下链接以获取答案,但没有任何帮助:
- Can't refresh a chart in Excel VBA (Excel 2016)
- Refresh all charts without blinking
- excel chart not updating when data changed by vba
- Excel 2013 vba refresh chart content after each iteration of For Loop
他们都建议添加DoEvent,但这不起作用。 所以问题是,如何通过 VBA 更新不同工作簿中的图表?
【问题讨论】:
-
当您说:updateCharts 代码似乎根本不起作用时,它会抛出错误吗?它运行时没有错误但什么也没发生?请提供更多细节。另外,
allRows是什么?即它是什么数据类型?你不应该使用像Activate这样的东西。如果您使您的工作簿/工作表符合条件,则无需激活它们(除非您这样做只是为了看看会发生什么?) -
@Zac 代码运行良好,没有错误,但什么也没有发生。
Activate部分已被删除,因为它们弄乱了生成的 PDF。allRows是一个简单地引用所有行的组合属性。不同的列是不同的属性。那部分工作得很好,只是图表没有正确更新。从我目前收集到的信息来看,触发CellChanged事件应该足够了,因为它们不会在后台文件上触发
标签: excel vba excel-2016