Excel范围到PowerPoint-粘贴问题

Excel范围到PowerPoint-粘贴问题,excel,vba,format,powerpoint,paste,Excel,Vba,Format,Powerpoint,Paste,我在粘贴从Excel到PowerPoint的范围时遇到一些问题。我想将其保留为Keepsource格式: Function copyToPPT() 'Create an instance of PowerPoint. Set pptApp = CreateObject("PowerPoint.Application") ' Create a PowerPoint presentation. nomeppt = ThisWorkbook.Path + "\" + "SR-1871_R1 - ID

我在粘贴从Excel到PowerPoint的范围时遇到一些问题。我想将其保留为Keepsource格式:

Function copyToPPT()

'Create an instance of PowerPoint.
Set pptApp = CreateObject("PowerPoint.Application")
' Create a PowerPoint presentation.
nomeppt = ThisWorkbook.Path + "\" + "SR-1871_R1 - ID-033 - Bi-Weekly LATAM QC Communication Meeting - data_Blank.pptx"

With pptApp
    Let .Visible = True
    Let .WindowState = 3
    Set Pres1 = pptApp.Presentations.Open(nomeppt)
End With


i = 8
While i <= 14
    slide = "Slide " & i & " Final"
    Workbooks("Results.xlsx").Activate
    Worksheets(slide).Activate
    Worksheets(slide).Range("A1").Select
    Worksheets(slide).Range(Selection, Selection.End(xlDown)).Select
    Worksheets(slide).Range(Selection, Selection.End(xlToRight)).Select 'Selecionando os registros - Simulando ctrl + shift baixo/direta
    Selection.Copy
    pptApp.ActiveWindow.View.GotoSlide Index:=i
    'pptApp.ActivePresentation.Slides(i).Shapes.PasteSpecial DataType:=7 - NOT THE FORMAT I WANT
    i = i + 1
    pptApp.CommandBars.ExecuteMso ("PasteSourceFormatting") 'freeze the powerpoint when pasting...
    pptApp.CommandBars.ReleaseFocus

Wend

End Function
函数copyToPPT()
'创建PowerPoint的实例。
设置pptap=CreateObject(“PowerPoint.Application”)
'创建PowerPoint演示文稿。
nomeppt=ThisWorkbook.Path+“\”+“SR-1871\U R1-ID-033-每两周一次的LATAM质控沟通会议-数据\u Blank.pptx”
用pptApp
Let.Visible=True
设.WindowState=3
Set Pres1=ppt.Presentations.Open(nomeppt)
以
i=8
而我试试这个

pptApp.ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault
Sub copyToPPT()
    Dim lRow As Long, lCol As Long
    Dim LastCol As String
    Dim rng As Range

    'Create an instance of PowerPoint.
    Set pptApp = CreateObject("PowerPoint.Application")
    ' Create a PowerPoint presentation.
    nomeppt = ThisWorkbook.Path & "\" & _
    "SR-1871_R1 - ID-033 - Bi-Weekly LATAM QC Communication Meeting - data_Blank.pptx"

    With pptApp
        .Visible = True
        .WindowState = 3
        Set Pres1 = pptApp.Presentations.Open(nomeppt)
    End With

    i = 8

    While i <= 14
        slide = "Slide " & i & " Final"
        With Workbooks("Results.xlsx").Worksheets(slide)
            lRow = .Range("A" & .Rows.Count).End(xlUp).Row
            lCol = .Cells(1, Columns.Count).End(xlToLeft).Column

            LastCol = Split(.Cells(, lCol).Address, "$")(1)

            Set rng = .Range("A1:" & LastCol & lRow)
        End With

        pptApp.ActiveWindow.View.GotoSlide Index:=i

        rng.Copy

        DoEvents

        pptApp.ActiveWindow.Panes(2).Activate

        pptApp.CommandBars.ExecuteMso ("PasteSourceFormatting")

        Wait 3

        Application.CutCopyMode = False

        i = i + 1
    Wend
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub
这将给出与相同的结果

pptApp.CommandBars.ExecuteMso ("PasteSourceFormatting")
ppPasteDefault
的值为
0
,因此您可以

Const ppPasteDefault as Integer = 0
在您的代码顶部或使用

pptApp.ActiveWindow.View.PasteSpecial DataType:=0
编辑(从评论中跟进)

我已经更改了你的密码。用这个,如果你有任何错误,告诉我。这不使用
.Activate/。选择

试试这个

pptApp.ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault
Sub copyToPPT()
    Dim lRow As Long, lCol As Long
    Dim LastCol As String
    Dim rng As Range

    'Create an instance of PowerPoint.
    Set pptApp = CreateObject("PowerPoint.Application")
    ' Create a PowerPoint presentation.
    nomeppt = ThisWorkbook.Path & "\" & _
    "SR-1871_R1 - ID-033 - Bi-Weekly LATAM QC Communication Meeting - data_Blank.pptx"

    With pptApp
        .Visible = True
        .WindowState = 3
        Set Pres1 = pptApp.Presentations.Open(nomeppt)
    End With

    i = 8

    While i <= 14
        slide = "Slide " & i & " Final"
        With Workbooks("Results.xlsx").Worksheets(slide)
            lRow = .Range("A" & .Rows.Count).End(xlUp).Row
            lCol = .Cells(1, Columns.Count).End(xlToLeft).Column

            LastCol = Split(.Cells(, lCol).Address, "$")(1)

            Set rng = .Range("A1:" & LastCol & lRow)
        End With

        pptApp.ActiveWindow.View.GotoSlide Index:=i

        rng.Copy

        DoEvents

        pptApp.ActiveWindow.Panes(2).Activate

        pptApp.CommandBars.ExecuteMso ("PasteSourceFormatting")

        Wait 3

        Application.CutCopyMode = False

        i = i + 1
    Wend
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub
子copyToPPT()
变暗lRow尽可能长,lCol尽可能长
将LastCol设置为字符串
变暗rng As范围
'创建PowerPoint的实例。
设置pptap=CreateObject(“PowerPoint.Application”)
'创建PowerPoint演示文稿。
nomeppt=thispoolk.Path&“\”和_
“SR-1871_R1-ID-033-每两周一次的LATAM质控沟通会议-数据_Blank.pptx”
用pptApp
.Visible=True
.WindowsState=3
Set Pres1=ppt.Presentations.Open(nomeppt)
以
i=8
当我打开计时器时
多芬特
温德
端接头

我已经测试并尝试了该代码,它可以正常工作。。。在复制和粘贴之间,您还做过其他事情吗?这可能正在清除剪贴板。或者在复制命令后添加
DoEvents
,以便Excel有足够的时间将图像放入剪贴板。将
DoEvents
放在
选择之后。复制
片刻,我正在重新编写您的整个函数。。给我10分钟一个简单的问题。Excel工作表中的行1是否有标题?已更新。请帮我测试一下。OP还需要2张投票才能聊天。如果有人能帮忙,请:)试试www.pptxbuilder.com。它会自动将excel数据转换为powerpoint图表。