每个月,我运行一个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个成功更改。如何修改代码以解决此问题?
答案 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中经历了大量复制/粘贴循环的类似问题,即使我尝试过以下操作也从未找到解决方案:
上述方法中的一种可能会适用于您的情况。但是,当它在我的代码中随机失败时,我会得到一个错误,就是"数据无法在这里粘贴"因此,除非您已从发布的代码中删除错误处理,否则原因可能完全不同。
我认为VBA与底层操作系统之间关于这种随机行为的交互存在根本性的错误......