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

时间:2016-08-22 14:53:05

标签: excel vba excel-vba powerpoint powerpoint-vba

每个月,我运行一个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个成功更改。如何修改代码以解决此问题?

2 个答案:

答案 0 :(得分:0)

尝试仅设置powerpoint单元格的值,而不是复制整个Excel单元格。使用剪贴板通常较慢,并且不如处理字符串/数值那样可靠。特别是在不同的应用程序之间(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单元格的格式,您可能需要进行一些调整

答案 1 :(得分:0)

这对我来说似乎是个时间问题。您能通过设置断点并单步执行所有88个单元格的代码来确认是否所有单元都已填充?我在PowerPoint中经历了大量复制/粘贴循环的类似问题,即使我尝试过以下操作也从未找到解决方案:

  1. .Copy 方法之后添加 DoEvents ,尝试为操作系统填充操作系统时间。
  2. .Paste 方法置于执行循环并检查 Err = 0 ,然后再继续。
  3. 通过简单的WinAPI 睡眠调用来减轻负担。
  4. 在执行 .Paste 方法检查有效内容之前,询问剪贴板数据类型(更复杂的WinAPI调用)。
  5. 上述方法中的一种可能会适用于您的情况。但是,当它在我的代码中随机失败时,我会得到一个错误,就是"数据无法在这里粘贴"因此,除非您已从发布的代码中删除错误处理,否则原因可能完全不同。

    我认为VBA与底层操作系统之间关于这种随机行为的交互存在根本性的错误......