首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel To PPT VBA编码

Excel To PPT VBA编码
EN

Stack Overflow用户
提问于 2022-11-23 10:02:10
回答 1查看 35关注 0票数 -1

代码在清晰的空白PowerPoint幻灯片上无故障运行,但当我尝试将多幅图像从excel添加到PPT到同一张幻灯片时,它将失去其设置的位置和格式,并在图像2、3等上全面显示,无法识别该过程。

请查找下面用于运行脚本的代码

代码语言:javascript
复制
enter code here
代码语言:javascript
复制
'app
'  pre
'   slide
'    shapes
'     text frame
'      text

Sub ExporttoPPT()

Dim ppt_app作为新的PowerPoint.Application

Dim pre PowerPoint.Presentation

昏暗的泥泞如PowerPoint.Slide

像PowerPoint.Shape一样的昏暗

Dim wb作为工作簿

昏暗范围

Dim vSheet$

Dim vRange

Dim vWidth为双倍

Dim vHeight为双倍

Dim vTop为双倍

Dim vLeft为双倍

Dim vSlide_No等长

Dim expRng为范围

Dim adminSh作为工作表

Dim cofigRng为范围

Dim xlfile$

Dim pptfile$

Application.DisplayAlerts = False

设置adminSh =ThisWorkbook.Sheets(“管理”)

设置cofigRng = adminSh.Range("Rng_sheets")

xlfile = adminSh.excelPth

pptfile = adminSh.pptPth

Application.DisplayAlerts = False

设置wb = Workbooks.Open(xlfile,False,True)

Application.DisplayAlerts = False

设置pre = ppt_app.Presentations.Open(pptfile)

对于cofigRng中的每个rng

用adminSh

代码语言:javascript
复制
  vSheet$ = .Cells(rng.Row, 4).Value
代码语言:javascript
复制
  vRange$ = .Cells(rng.Row, 5).Value
代码语言:javascript
复制
  vWidth = .Cells(rng.Row, 6).Value
代码语言:javascript
复制
  vHeight = .Cells(rng.Row, 7).Value
代码语言:javascript
复制
  vTop = .Cells(rng.Row, 8).Value
代码语言:javascript
复制
  vLeft = .Cells(rng.Row, 9).Value
代码语言:javascript
复制
  vSlide_No = .Cells(rng.Row, 10).Value
代码语言:javascript
复制
  End With

-出口到PPT

代码语言:javascript
复制
        wb.Activate
代码语言:javascript
复制
        Sheets(vSheet$).Activate
代码语言:javascript
复制
        Set expRng = Sheets(vSheet$).Range(vRange$)
代码语言:javascript
复制
        expRng.Copy

“停下来

代码语言:javascript
复制
        pre.Application.Activate
代码语言:javascript
复制
        Set slde = pre.Slides(vSlide_No)
代码语言:javascript
复制
        'Application.ActiveWindow.Panes(vSlide_No).Activate
代码语言:javascript
复制
        slde.Select
代码语言:javascript
复制
        slde.Shapes.PasteSpecial ppPasteBitmap 'ppPasteSecial' ppPasteBitmap
代码语言:javascript
复制
        Set shp = slde.Shapes(1)
代码语言:javascript
复制
        With shp
代码语言:javascript
复制
           .Top = vTop
代码语言:javascript
复制
           .Left = vLeft
代码语言:javascript
复制
           .Width = vWidth
代码语言:javascript
复制
           .Height = vHeight
代码语言:javascript
复制
        End With
代码语言:javascript
复制
        Set shp = Nothing
代码语言:javascript
复制
        Set slde = Nothing
代码语言:javascript
复制
        Set expRng = Nothing

Application.CutCopyMode = False

设置expRng = Nothing

下一轮

'pre.Save

'pre.Close

Set pre = Nothing

设置ppt_app = Nothing

wb.Close假

设置wb = Nothing

Application.DisplayAlerts =真

端子

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2022-11-23 11:00:50

您的问题是,在设置位置属性时,总是使用第一个形状:编写Set shp = slde.Shapes(1)

一种解决方案是使用最后一个形状(将新创建的形状放在集合的末尾):

代码语言:javascript
复制
slde.Shapes.PasteSpecial ppPasteBitmap 
Set shp = slde.Shapes(slde.shapes.count)

或者使用PasteSpecial的返回值。但是,返回值是一个ShapeRange (一组形状)。在您的示例中,组只包含一个形状,您可以使用

代码语言:javascript
复制
Set shp = slde.Shapes.PasteSpecial(ppPasteBitmap)(1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74544950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档