将Excel单元格粘贴到Power Point表格单元格时导致随机丢失的原因是什么?

每个月,我运行一个VBA程序,用新的数据(我从一个Excel文件中获取)更新上个月的数据表(Power Point幻灯片)。 我使用下面的VBA函数来粘贴数据。

Function PastePcts(ByVal tbl As PowerPoint.Table, ByVal oldRow As Long, ByVal oldCol As Long, ByVal newRow As Integer, ByVal newCol As Integer) ' ' This function basically pastes data from Cell (oldRow, oldCol) of the current Excel ' spreadsheet to Cell (newRow, newCol) of the input PowerPoint table ' Cells(oldRow, oldCol).Copy With tbl.Cell(newRow, newCol).Shape.TextFrame.TextRange .Paste 'Pastes new percent Call .Replace("%","") 'Removes % sign .Font.Bold = True 'Restores boldface End With End Function 

PowerPoint表格上的大多数单元格按预期发生变化,但其中的一些单元格随机保留它们的值,因为此函数从未被调用过。 如果我再次运行程序,我很可能会遇到同样的问题,但保留旧值的表格单元格的组合会有所不同。

在我的最后一次运行中,该表有88个单元,其价值从上个月改变了,其中78个单元成功改变。 我如何修改代码来解决这个问题?

尝试只设置powerpoint单元格的值,而不是复制整个Excel单元格。 使用剪贴板通常较慢,并不像处理string/数值那么可靠。 特别是在不同的应用程序之间(即使在同一应用程序中,Office也不能在实例之间使用自己的剪贴板)。

 With tbl.Cell(newRow, newCol).Shape.TextFrame.TextRange .Text = Cells(oldRow, oldCol).Value Call .Replace("%","") 'Removes % sign .Font.Bold = True 'probably not necessary any more End With 

根据Excel单元格的格式,你可能需要做一些调整

这看起来像是一个时间问题给我。 你可以通过设置一个断点,并通过所有88个单元的代码来确认是否所有人都填充? 我遇到过在PowerPoint中大量复制/粘贴循环的类似问题,即使尝试了以下方法,也从未find解决scheme:

  1. .Copy方法之后添加DoEvents来尝试给剪贴板填充操作系统时间。
  2. .Paste方法放在Do … While循环中并在继续之前检查Err = 0
  3. 用简单的WinAPI Sleep调用减慢速度。
  4. 在执行.Paste方法以检查有效内容之前,询问剪贴板数据types(更复杂的WinAPI调用)。

也许上述方法之一将在你的情况下工作。 然而,当我在代码中随机失败的时候,我得到了一个错误:“数据不能被粘贴在这里”,所以除非你从你的发布代码中移除了error handling,否则可能原因是完全不同的。

我认为VBA和底层操作系统之间有关这种随机行为的交互有一些根本性的错误…