将格式化表格从excel粘贴到ppt演示文稿中的宏不规则崩溃

将格式化表格从excel粘贴到ppt演示文稿中的宏不规则崩溃,excel,vba,powerpoint,Excel,Vba,Powerpoint,我在excel中创建了一个宏,它使用excel报表将大量表格复制并粘贴到power point演示文稿中。使用“保留源格式”方法粘贴表格,粘贴后,如果字体较小,宏会将字体大小更改为7,并将表格放置在幻灯片上的正确位置。问题是,宏在两个应用程序之间跳过,每次粘贴都很耗时,因此有时宏会崩溃/冻结-例如,当为同一个报告运行宏时,我收到不同结果的次数不同-有时会成功生成演示文稿,几分钟后,宏在幻灯片15上崩溃,在另一次运行中,它在幻灯片41上崩溃,原因完全相同。是否有一种方法可以将宏作为后台进程运行,以

我在excel中创建了一个宏,它使用excel报表将大量表格复制并粘贴到power point演示文稿中。使用“保留源格式”方法粘贴表格,粘贴后,如果字体较小,宏会将字体大小更改为7,并将表格放置在幻灯片上的正确位置。问题是,宏在两个应用程序之间跳过,每次粘贴都很耗时,因此有时宏会崩溃/冻结-例如,当为同一个报告运行宏时,我收到不同结果的次数不同-有时会成功生成演示文稿,几分钟后,宏在幻灯片15上崩溃,在另一次运行中,它在幻灯片41上崩溃,原因完全相同。是否有一种方法可以将宏作为后台进程运行,以确保excel性能无误,或避免excel不时被压碎……我将非常感谢您的建议

下面是我用来粘贴表格并在复制所需表格范围时更改字体大小的支持宏代码:

Sub PastewithSourceFormatting_table(iSlide As Integer, table_name As Object)
Dim shapes_number As Integer
Dim shapes_number_new As Integer
Dim v_size As Byte
Dim row_num As Integer
Dim col_num As Integer
shapes_number_new = 0
shapes_number = 0
v_size = 0
row_num = 0
col_num = 0

  Set PPSlide = PPPres.Slides(iSlide)
  PPSlide.Select


shapes_number = PPSlide.Shapes.Count

Do Until shapes_number_new = shapes_number + 1
With PPSlide
    PPApp.CommandBars.ExecuteMso ("PasteSourceFormatting")
    Application.Wait (Now + TimeValue("0:00:01"))
    PPApp.CommandBars.ReleaseFocus
    shapes_number_new = .Shapes.Count
End With
Loop

 Application.Wait (Now + TimeValue("0:00:01"))


    Application.CutCopyMode = False

  Set table_name = PPSlide.Shapes.Item(shapes_number_new)


 '---------check font size

v_size = table_name.Table.Cell(1, 1).Shape.TextFrame.TextRange.Font.Size
row_num = table_name.Table.Rows.Count
col_num = table_name.Table.Columns.Count

If v_size < 7 Then

Dim i, j As Integer

For i = 1 To row_num
For j = 1 To col_num
If table_name.Table.Cell(i, j).Shape.TextFrame.HasText = msoTrue Then
table_name.Table.Cell(i, j).Shape.TextFrame.TextRange.Font.Size = 7
End If
Next j
Next i

Else
End If

 Application.Wait (Now + TimeValue("0:00:01"))


End Sub
Sub-pastewithsourceformating_表(iSlide为整数,table_名称为对象)
将U数设置为整数
尺寸形状\u编号\u新为整数
尺寸v_大小为字节
Dim row_num为整数
Dim col_num作为整数
形状\u编号\u新建=0
形状数量=0
v_大小=0
行数=0
col_num=0
设置PPSlide=PPPres.幻灯片(iSlide)
PPSlide.选择
shapes\u number=PPSlide.shapes.Count
直到形状\u编号\u新建=形状\u编号+1
用PPSlide
PPApp.commandbar.ExecuteMso(“粘贴源格式”)
Application.Wait(现在+时间值(“0:00:01”))
PPApp.commandbar.ReleaseFocus
shapes\u number\u new=.shapes.Count
以
环
Application.Wait(现在+时间值(“0:00:01”))
Application.CutCopyMode=False
设置表\u name=PPSlide.Shapes.Item(形状\u编号\u新)
'-----------检查字体大小
v_size=表格名称.表格.单元格(1,1).Shape.TextFrame.TextRange.Font.size
row\u num=表\u name.table.Rows.Count
col\u num=表名称.table.Columns.Count
如果v_尺寸小于7,则
作为整数的Dim i,j
对于i=1的行数
对于j=1到col_num
如果table_name.table.Cell(i,j).Shape.TextFrame.HasText=msoTrue,则
table_name.table.Cell(i,j).Shape.TextFrame.TextRange.Font.Size=7
如果结束
下一个j
接下来我
其他的
如果结束
Application.Wait(现在+时间值(“0:00:01”))
端接头