尝试将 Excel 图表复制到 Power Point 演示文稿时出现下标超出范围错误

2023-11-30

我正在尝试使用函数将图表从 excel 复制到 PPT 宏中的 PPT。不过,当我尝试运行该函数时,它在下面指示的行上显示“下标超出范围”,我真的很困惑为什么。

Public dlgOpen As FileDialog
Public folder As String
Public excelApp As Object
Public xlWorkBook As Object
Public xlWorkBook2 As Object
Public PPT As Presentation
Public Name1 As String
Public Name2 As String
Public rng1 As Range
Public rng2 As Range
Dim NamedRange As Range


Public Sub GenerateVisual()
    Set PPT = ActivePresentation
    Set excelApp = CreateObject("Excel.Application")
    excelApp.Visible = True

    Set xlWorkBook = excelApp.workbooks.Open("C:\Users\wzawisa\Downloads\MarketSegmentTotals.xls")
    xlWorkBook.Sheets("MarketSegmentTotals").Activate
    xlWorkBook.ActiveSheet.Shapes.AddChart.Select
    xlWorkBook.ActiveChart.ChartType = xlColumnClustered
    xlWorkBook.ActiveChart.SetSourceData Source:=xlWorkBook.ActiveSheet.Range("MarketSegmentTotals!$A$1:$F$2")
    xlWorkBook.ActiveChart.Legend.Delete
    xlWorkBook.ActiveChart.SetElement (msoElementChartTitleAboveChart)
    xlWorkBook.ActiveChart.SetElement (msoElementDataLabelCenter)
    xlWorkBook.ActiveChart.ChartTitle.Text = "DD Ready by Market Segment"
    xlWorkBook.ActiveSheet.ListObjects.Add

    With xlWorkBook.ActiveChart.Parent
        .Top = 100    ' reposition
        .Left = 100   ' reposition
    End With

    Set xlWorkBook2 = excelApp.workbooks.Open("C:\Users\wzawisa\Downloads\GeneralTotals.xls")
    xlWorkBook2.Sheets("Totals").Activate
    xlWorkBook2.ActiveSheet.Shapes.AddChart.Select
    xlWorkBook2.ActiveChart.ChartType = xlColumnClustered
    xlWorkBook2.ActiveChart.SetSourceData Source:=xlWorkBook2.ActiveSheet.Range("Totals!$A$1:$C$2")
    xlWorkBook2.ActiveChart.Legend.Delete
    xlWorkBook2.ActiveChart.SetElement (msoElementChartTitleAboveChart)
    xlWorkBook2.ActiveChart.SetElement (msoElementDataLabelCenter)
    xlWorkBook2.ActiveChart.ChartTitle.Text = "Total DD Ready"
    xlWorkBook2.ActiveSheet.ListObjects.Add

    With xlWorkBook2.ActiveChart.Parent
        .Top = 100    ' reposition
        .Left = 100   ' reposition
    End With

    Set rng1 = xlWorkBook.Sheets("MarketSegmentTotals").Range("B8:F25")
    Set rng2 = xlWorkBook2.Sheets("Totals").Range("A8:C25")

    Call RangeToPresentation("MarketSegmentTotals", rng1)
    Call RangeToPresentation("Totals", rng2)

    'Set dlgOpen = Application.FileDialog(Type:=msoFileDialogFolderPicker)
    '
    'dlgOpen.Show
    'dlgOpen.Title = "Select Report Location"
    '
    'folder = dlgOpen.SelectedItems(1)

End Sub


Public Function RangeToPresentation(sheetName, NamedRange)
    Dim ppApp As Object
    Dim ppPres As Object
    Dim PPSlide As Object

    Set ppApp = GetObject(, "Powerpoint.Application")

    Set ppPres = ppApp.ActivePresentation
    ppApp.ActiveWindow.ViewType = ppViewNormal

    ' Select the last (blank slide)
    longSlideCount = ppPres.Slides.Count
    ppPres.Slides(1).Select

    Set PPSlide = ppPres.Slides(ppApp.ActiveWindow.Selection.SlideRange.SlideIndex)

    xlWorkBook.Sheets(sheetName).Range(NamedRange.Address).CopyPicture Appearance:=xlScreen, _
        Format:=xlBitmap

    ' Paste the range
    PPSlide.Shapes.Paste.Select

    'Set the image to lock the aspect ratio
    ppApp.ActiveWindow.Selection.ShapeRange.LockAspectRatio = msoTrue

    'Set the image size slightly smaller than width of the PowerPoint Slide
    ppApp.ActiveWindow.Selection.ShapeRange.Width = ppApp.ActivePresentation.PageSetup.SlideWidth - 10
    ppApp.ActiveWindow.Selection.ShapeRange.Height = ppApp.ActivePresentation.PageSetup.SlideHeight - 10

    'Shrink image if outside of slide borders
    If ppApp.ActiveWindow.Selection.ShapeRange.Width > 700 Then
        ppApp.ActiveWindow.Selection.ShapeRange.Width = 700
    End If

    If ppApp.ActiveWindow.Selection.ShapeRange.Height > 600 Then
        ppApp.ActiveWindow.Selection.ShapeRange.Height = 600
    End If

    ' Align the pasted range
    ppApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
    ppApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True    

    ' Clean up
    Set PPSlide = Nothing
    Set ppPres = Nothing
    Set ppApp = Nothing

End Function

我认为你正在混合Ranges。请尝试下面发布的代码,其中包含对原始代码的相当多的修改。我在下面详细介绍了主要内容。您必须设置对Microsoft Excel vvv 对象库。在VBE中,使用Tools -> 参考.

主要变化:

  1. 声明你的参数类型Function.

  2. 改变了Function to Sub(您只执行操作,不返回值)。

  3. Used NamedRange直接地。不需要您使用它的复杂方式。第一个参数现在是多余的(您可以将其删除)。

  4. 使用变量来引用对象。这使得编码和调试变得更加容易。

  5. 删除了一些Select and Activate。除非严格需要,否则不应使用它们(显然情况并非如此)。

您仍然有很多地方可以改进您的代码,特别是沿着上面设置的路线。 请先尝试一下。如果不起作用,请使用调试器、监视和立即窗口进行更深入的探索,并提供反馈。

Option Explicit

Public dlgOpen As FileDialog
Public folder As String
Public excelApp As Object
Public xlWorkBook As Excel.Workbook
Public xlWorkBook2 As Excel.Workbook
Public PPT As Presentation
Public Name1 As String
Public Name2 As String
Public rng1 As Excel.Range
Public rng2 As Excel.Range
Dim NamedRange As Excel.Range
Dim xlws As Excel.Worksheet
Dim xlsh As Excel.Shape
Dim xlch As Excel.Chart
Dim xlws2 As Excel.Worksheet
Dim xlsh2 As Excel.Shape
Dim xlch2 As Excel.Chart

Public Sub GenerateVisual()
    Set PPT = ActivePresentation
    Set excelApp = CreateObject("Excel.Application")
    excelApp.Visible = True

    Set xlWorkBook = excelApp.workbooks.Open("C:\Users\wzawisa\Downloads\MarketSegmentTotals.xls")
    Set xlws = xlWorkBook.Sheets("MarketSegmentTotals")
    Set xlsh = xlws.Shapes.AddChart
    Set xlch = xlsh.Chart
    With xlch
        .ChartType = xlColumnClustered
        .SetSourceData Source:=xlws.Range("$A$1:$F$2")
        .Legend.Delete
        .SetElement (msoElementChartTitleAboveChart)
        .SetElement (msoElementDataLabelCenter)
        .ChartTitle.Text = "DD Ready by Market Segment"
    End With
    xlws.ListObjects.Add

    With xlch.Parent
        .Top = 100    ' reposition
        .Left = 100   ' reposition
    End With

    Set xlWorkBook2 = excelApp.workbooks.Open("C:\Users\wzawisa\Downloads\GeneralTotals.xls")
    Set xlws2 = xlWorkBook.Sheets("Totals")
    'xlWorkBook2.Sheets("Totals").Activate
    Set xlsh2 = xlws2.Shapes.AddChart
    Set xlch2 = xlsh2.Chart
    With xlch2
        .ChartType = xlColumnClustered
        .SetSourceData Source:=xlws2.Range("$A$1:$C$2")
        .Legend.Delete
        .SetElement (msoElementChartTitleAboveChart)
        .SetElement (msoElementDataLabelCenter)
        .ChartTitle.Text = "Total DD Ready"
    End With
    xlWorkBook2.ActiveSheet.ListObjects.Add

    With xlws2.Parent
        .Top = 100    ' reposition
        .Left = 100   ' reposition
    End With

    Set rng1 = xlws.Range("B8:F25")
    Set rng2 = xlws2.Range("A8:C25")

    Call RangeToPresentation("MarketSegmentTotals", rng1)
    Call RangeToPresentation("Totals", rng2)

    'Set dlgOpen = Application.FileDialog(Type:=msoFileDialogFolderPicker)
    '
    'dlgOpen.Show
    'dlgOpen.Title = "Select Report Location"
    '
    'folder = dlgOpen.SelectedItems(1)

End Sub


Public Sub RangeToPresentation(ByVal sheetName As String, NamedRange As Excel.Range)
    Dim ppApp As Object
    Dim ppPres As Object
    Dim PPSlide As Object
    Set ppApp = GetObject(, "Powerpoint.Application")
    Set ppPres = ppApp.ActivePresentation
    ppApp.ActiveWindow.ViewType = ppViewNormal

    ' Select the last (blank slide)
    Dim longSlideCount As Integer
    longSlideCount = ppPres.Slides.Count
    ppPres.Slides(1).Select    
    Set PPSlide = ppPres.Slides(ppApp.ActiveWindow.Selection.SlideRange.SlideIndex)

    NamedRange.CopyPicture Appearance:=xlScreen, Format:=xlBitmap

    ' Paste the range
    PPSlide.Shapes.Paste.Select

    'Set the image to lock the aspect ratio
    ppApp.ActiveWindow.Selection.ShapeRange.LockAspectRatio = msoTrue

    'Set the image size slightly smaller than width of the PowerPoint Slide
    ppApp.ActiveWindow.Selection.ShapeRange.Width = ppApp.ActivePresentation.PageSetup.SlideWidth - 10
    ppApp.ActiveWindow.Selection.ShapeRange.Height = ppApp.ActivePresentation.PageSetup.SlideHeight - 10

    'Shrink image if outside of slide borders
    If ppApp.ActiveWindow.Selection.ShapeRange.Width > 700 Then
        ppApp.ActiveWindow.Selection.ShapeRange.Width = 700
    End If
    If ppApp.ActiveWindow.Selection.ShapeRange.Height > 600 Then
        ppApp.ActiveWindow.Selection.ShapeRange.Height = 600
    End If

    ' Align the pasted range
    ppApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
    ppApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

    ' Clean up
    Set PPSlide = Nothing
    Set ppPres = Nothing
    Set ppApp = Nothing

End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试将 Excel 图表复制到 Power Point 演示文稿时出现下标超出范围错误 的相关文章

  • 如何将 JavaScript 图表导出到 Excel 文件 (HighCharts)

    我必须将 Javascript 图表 HighCharts 导出到 Excel 文件中 图表在div中呈现 但excel不呈现javascript生成的html css内容 仅呈现没有样式的文本 一个解决方案是将图表渲染为图像 jpeg 但
  • VBA 激活 Internet Explorer 窗口

    我正在制作一个宏 用于打开 Internet Explorer 导航并登录网站 一切正常 但我需要将 IE 窗口放在前面并激活它 这样我就可以使用SendKeys在上面 我发现网站和视频在名为的命令上有不同的方法AppActivate我已经
  • 如何让 Plotly.js 监听刻度标签的点击事件?

    因此 在这个动态图表中 我想在单击任何 Y 轴的刻度标签时更改 Y 轴的最小值和最大值 您可以向所有 y 刻度添加 d3 事件侦听器 并确保 SVG 组获取所有events https stackoverflow com a 1692356
  • phpexcel xlsx 的千位分隔符

    我在用着 PHPExcel Shared String setThousandsSeparator 为 Excel 文件定义千位分隔符 多亏了它 单元格显示为55 452代替55452 不过 单元格值是整数 55452 因此可以对其进行计算
  • 文本到行 VBA Excel

    我有一个电子表格 其中包含大约 4000 行数据 其中一列数据具有唯一的订单号 我希望使用 作为分隔符将其分隔 所以本质上我想要 Name Order Date Jane 123 001 111 08 15 2013 Gary 333 12
  • 无法在我的抓取工具中设置超时选项以防止无限循环

    我已经使用 IE 在 vba 中编写了一个脚本 在其搜索框中的网页中启动搜索 通过点击搜索按钮根据搜索填充结果 网页加载它是searchbox几秒钟后它就会打开 但是 我的下面的脚本可以处理这个障碍并以正确的方式执行搜索 现在 我有一个稍微
  • 当时间为 00:00 时,Pandas 读取 excel 返回类型对象

    在更新版本的 Pandas 中 我使用的是 1 2 3 当从 Excel 文件读取时间时 时间为 00 00 00 时会出现问题 下面的脚本 其中 filepath 是我的 Excel 文件的路径 其中包含一个标题名为 Time 的列 im
  • 滚动 X 轴绘图区域 - Silverlight 柱系列

    我有一个工作正常的柱形系列图表 我有一个需要添加的功能 我希望水平滚动能够启用到 x 轴的绘图区域 这是屏幕截图 如果您看到屏幕截图 我有 6 个项目 并且由于项目数量较多 条形图非常细 所以假设如果我有 20 个项目 那么条形图将根本不可
  • Excel 工作簿 - 从 C# 读取速度非常慢?

    正在尝试读取 Excel 工作簿 发现读取 3560 行 7 列的工作表需要很长时间 大约需要 1 分 17 秒 我所做的就是循环遍历整个工作表并将值存储在列表中 这是正常现象 还是我做错了什么 static void Main strin
  • 如何让VLOOKUP在VBA中选择到最低行?

    希望自动在单元格中插入 VLOOKUP 公式 录制宏时 我指示它使用相同的公式填充下面的列 效果很好 但是 当 VLOOKUP 搜索的表发生变化 更多或更少的行 时 就会出现问题 在记录时 VLOOKUP 下降到表中的最后一行 273 但是
  • VBA 中的多线程

    这里有人知道如何让VBA运行多线程吗 我正在使用 Excel 无法用 VBA 本地完成 VBA 构建在单线程单元中 获得多个线程的唯一方法是使用 VBA 之外的其他具有 COM 接口的东西构建 DLL 并从 VBA 调用它 信息 OLE 线
  • 导出到excel时如何显示前导零?

    我正在通过更改内容类型来创建 Excel 报告 Response ContentType application vnd ms excel 我有包含前导零的值 问题是导出到 Excel 时缺少前导零 e g 000123 gt 123 我知
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • VBA 中的匈牙利语好吗?

    我在 Net 中不使用匈牙利语 str int 前缀 但我仍然发现它在 VBA 中很有用 因为在 VBA 中很难看到类型 这很糟糕吗 不必要 也许我错过了一些东西 我真的很感激任何反馈 我想知道有一段时间了 谢谢大家 我想说 这种匈牙利符号
  • Excel 数字缩写格式

    这是我想要完成的任务 Value Display 1 1 11 11 111 111 1111 1 11k 11111 11 11k 111111 111 11k 1111111 1 11M 11111111 11 11M 11111111
  • 如何在Power Query中对N列求和

    我的数据每月都会更新 因此我尝试创建一个强大的查询表 该表将显示我创建的枢转 N 列的总和 但我似乎不知道如何在强大的查询中执行此操作 我目前有这个代码 旋转后 创建要求和的列的列表 添加索引列以限制每行 添加一列 该列对该行的列进行求和
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA
  • 在VBA中初始化全局变量

    在 Excel 2003 中 如何声明全局变量并仅在打开工作簿时初始化它们一次 我有一些由几个宏使用的参数 基本上是输入文件的路径 目前 我的代码如下所示 global path1 path2 as string sub initPaths
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • 使用 GSON 加载非常重的流

    我正在尝试读取非常重的 JSON 超过 6000 个对象 并将它们存储在哈希映射上 以便稍后将其插入到我的数据库中 但问题是我面临 OOM 这是我沉重的 JSON 造成的 但是 GSON 库应该让我摆脱这种情况 但事实并非如此 有任何想法吗
  • 获取默认选择颜色?

    I can change theCSS选择颜色 但我怎样才能get浏览器 操作系统默认选择以便我可以在其他地方使用它 例如在 Ubuntu Chrome 上 文本以橙色突出显示 我想将同样的风格应用到 li 当我用鼠标悬停在它上面时 CSS
  • 全局检测触摸

    我试图弄清楚如何解决这个 相当 简单的问题 但我失败得很惨 所以我真的需要你的建议 我的应用程序由一个带有多个选项卡的 uitabbar 组成 在其中一个中 我有一堆 UIImageView 每个视图代表图片的缩略图 类似地 当您通过按住应
  • 在C++中,为什么指针转换时地址会改变?

    以下是代码 include
  • 使用现有基类对象创建派生类对象?

    是否有可能 或快速解决方法 创建定义为派生类的对象 而无需在内存中创建基类对象 相反 派生对象应该引用基类实际存在的对象 接管 其内存驻留 出于速度原因 这是需要的 创建新的派生对象 将数据从基类对象复制到它 然后销毁基对象需要太多时间 在
  • Java ArrayList.add() 方法对于纯并行添加线程安全吗? [复制]

    这个问题在这里已经有答案了 考虑一个函数的 for 循环 该函数接受 ArrayList 引用并向该 ArrayList 添加一个对象 我现在想并行执行每个函数调用 如果我不关心对象添加的顺序并且没有函数读取或操作任何 ArrayList
  • Google App Engine - 将 Blobstore API 与 Google Cloud Storage 结合使用

    我必须存储大小超过 1MB 的文件 谷歌应用程序引擎建议我应该将它们存储在谷歌云存储中 应用程序引擎 BlobProperty 不适合 这部分将 Blobstore API 与 Google Cloud Storage 结合使用建议使用 c
  • Microsoft 语音识别 setInputToDefaultAudioDevice 引发异常

    大家好 我在 MS 语音识别方面遇到了麻烦 我的代码很简单 static void init string enUsEngine string Empty foreach RecognizerInfo ri in SpeechRecogni
  • Office Starter 是否包含 Microsoft.Office.Interop 的 DLL?

    我想使用 Microsoft Office Interop Excel 从 XLS 文件中提取一些数据 我安装了 Visual Studio 2010 和 Office 开发人员工具 但是 我在以下位置收到 COMException 错误v
  • Jekyll 链接集合中的文档?

    在 Jekyll 的 Front Matter 中 有没有办法引用另一个文档 我有一个自定义集合 并且想在每个文档中添加元数据 例如 父主题 指向父主题的链接 和 子主题 文档数组 或 相关主题 通过这样的引用 我可以访问链接文档的元数据
  • 修改组件的状态然后调用“setState(this.state)”是一个好习惯吗?

    我正在使用 ReactJS 我有一个有状态组件 秒表容器 和多个无状态子组件 秒表 在外部组件中 我正在做这样的事情 the outer component is a container for multiple stopwatches t
  • 使用 window.onload 使用 Javascript 进行表单验证

    你好 我真的很困惑 因为我是一个 javascript 初学者 这让我很困惑 有人知道如何编写以下 javascript 表单验证吗 我确信这很简单 但我想不出这个来救我的命 感谢您分享您的知识 我需要在没有 jquery 的情况下编写以下
  • 是否可以在没有实体的情况下使用 JpaRepository ?

    是否可以使用JpaRepository没有实体 在这种情况下 将其替换为 DTO 如下示例 Repository public interface BffRepository extends JpaRepository
  • 从另一个 Stencil JS 库导入 Stencil JS 库

    我有两个 Stencil JS Web 组件库 library a 和library b 这些不是应用程序 只是单独的 npm 组件包 我想使用library a 和library b 中的一些组件 如何将组件从 A 导入到 B 中 Ste
  • 在Python中交换列表中的元素

    我有一个列表 我需要将列表中的第一个元素与列表中的最大元素交换 但为什么代码 1 可以工作 而代码 2 却不能 code 1 a list index max list list 0 list a list a list 0 code 2
  • 让用户使用 VBA 单击单元格作为 Excel 输入框的输入

    我有一个将用户输入存储到变量中的输入框 用户输入的输入是手机号码 例如 弹出输入框询问用户 您想从哪里开始 然后 用户可以输入 A4 或他们想要启动的任何单元格 我的问题是 有没有办法允许用户物理单击单元格 A4 而不是键入它 预先感谢您的
  • 浏览器 cookie 中的 ASP.NET MVC TempData

    我正在尝试使用自定义ITemp数据提供者提供者到存储TempData在浏览器的 cookie 而不是会话状态中 但是 一切工作正常 只是我无法在读取 cookie 后将其从响应流中删除 有任何想法吗 谢谢 public class Cook
  • “多重不等式约束” - 使用 R nloptr 包进行最小化

    有没有办法定义多个 不平等约束 nloptrR 中的包 不等式函数需要有五个不等式约束 矩阵的 colsum 从整数向量堆叠 这就是我实现它的方法 constraint func lt function my data var column
  • 具有不同背景和突出显示颜色的凸起和平按钮

    我正在使用创建应用程序com android support appcompat v7 23 0 1图书馆 我在中定义应用程序主题values styles xml
  • 尝试将 Excel 图表复制到 Power Point 演示文稿时出现下标超出范围错误

    我正在尝试使用函数将图表从 excel 复制到 PPT 宏中的 PPT 不过 当我尝试运行该函数时 它在下面指示的行上显示 下标超出范围 我真的很困惑为什么 Public dlgOpen As FileDialog Public folde