使用VBA将图片插入Excel并保持宽高比不超过尺寸

2023-12-01

我正在将Access数据库中的数据导出到Excel报告中,报告中需要包含的部分内容是与数据对应的图片。图片存储在共享文件中并插入到 Excel 文件中,如下所示:

Dim P As Object
Dim xlApp As Excel.Application
Dim WB As Workbook

Set xlApp = New Excel.Application

With xlApp
     .Visible = False
     .DisplayAlerts = False
End With

Set WB = xlApp.Workbooks.Open(FilePath, , True)

Set P = xlApp.Sheets(1).Pictures.Insert(PicPath) 'Insert picture
With P
     With .ShapeRange
          .LockAspectRatio = msoFalse
          .Width = 375
          .Height = 260
     End With
     .Left = xlApp.Sheets(1).cells(y, x).Left
     .Top = xlApp.Sheets(1).cells(y, x).Top
     .Placement = 1
     .PrintObject = True
End With

WB.SaveAs FileName:= NewName, CreateBackup:=False 
WB.Close SaveChanges:=True

xlApp.DisplayAlerts = True
xlApp.Application.Quit

我遇到的问题是,我似乎无法保持图片的纵横比,同时确保它们不会超出 Excel 表单中应容纳的空间范围。这些图片也都是屏幕截图,因此它们的形状和大小存在很大的差异。

基本上我想做的是抓住图片的一角并将其扩展,直到它触及它应该放置的范围的左边缘或下边缘。

这将最大化空间图像的尺寸而不扭曲它。


基本上我想做的是抓住图片的一角并将其扩展,直到它触及它应该放置的范围的左边缘或下边缘。

那么首先要找到范围的大小(宽度和高度),然后找到图片的宽度和高度,展开后,哪个先接触到这些边界,然后设置LockAspectRatio = True并设置宽度或高度,或设置两者但根据纵横比拉伸。

以下将图片缩放到可用空间(根据您的代码改编):

Sub PicTest()

    Dim P As Object
    Dim WB As Workbook
    Dim l, r, t, b
    Dim w, h        ' width and height of range into which to fit the picture
    Dim aspect      ' aspect ratio of inserted picture

    l = 2: r = 4    ' co-ordinates of top-left cell
    t = 2: b = 8    ' co-ordinates of bottom-right cell

    Set WB = ActiveWorkbook

    Set P = ActiveWorkbook.Sheets(1).Pictures.Insert(PicPath) 'Insert picture
    With P
         With .ShapeRange
              .LockAspectRatio = msoTrue    ' lock the aspect ratio (do not distort picture)
              aspect = .Width / .Height     ' calculate aspect ratio of picture
              .Left = Cells(t, l).Left      ' left placement of picture
              .Top = Cells(t, l).Top        ' top left placement of picture
         End With
         w = Cells(b, r).Left + Cells(b, r).Width - Cells(t, l).Left    ' width of cell range
         h = Cells(b, r).Top + Cells(b, r).Height - Cells(t, l).Top     ' height of cell range
         If (w / h < aspect) Then
            .ShapeRange.Width = w           ' scale picture to available width
         Else
            .ShapeRange.Height = h          ' scale picture to available height
         End If
         .Placement = 1
    End With

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

使用VBA将图片插入Excel并保持宽高比不超过尺寸 的相关文章

  • Excel VBA 组合框识别

    我的用户表单上有 4 个以上的组合框 当他们触发时 他们触发相同的事件 我想做的是找出哪个 ComboBox 触发了该事件 组合框的创建取决于组件的数量 生成组合框的代码如下所示 For j 0 To UBound ComponentLis
  • COM 错误?打开工作簿两次会导致引用损坏

    归功于fuglede https stackoverflow com users 5085211 fuglede为了引起我的注意 这是 COM 错误吗 我打开 Excel 工作簿 A 然后打开工作簿 B 这两个工作簿在单元格 A1 中都有一
  • 如何同时在多个 Wksheet 中搜索某个字符串?

    我有大约 30 张工作表 我希望这些代码同时运行 我想找到 ABC 并删除所有工作表中它旁边的单元格的值 我的错误来自 Set rSearch range A1 range A rows count end x1up 当我在 With 语句
  • 如何从有条件的列中获取最新值

    我在 Excel 中有一个表 其中包含以下列 Date 人名 金额 英镑 该表用于记录人们何时付钱给我 通常 我可以让不止一个人在同一天向我付款 而且 随着时间的推移 同一个人会在很多天向我付款 记录添加到表格底部 以便按日期排序 但不再按
  • 如何在vba中查找命名形状的索引号

    我运行了以下代码 for i 1 to activedocument Shapes count debug Print activedocument shapes i name next 并获得了形状列表 但是缺少一个形状 我选择了一个未包
  • 用于替换格式但保留单元格值的 VBA:部分解决

    我正在尝试组合 VBA 来搜索特定的单元格格式 然后更改该单元格格式 我从这篇文章中得到了灵感 Excel VBA 值替换后仍保持字符串格式 https stackoverflow com questions 25825136 excel
  • C# 如何判断单元格中的公式是否有错误

    在 Excel 公式中 您可以使用 ISERR A1 or ISERROR A1 在 VBA 宏中 您可以使用IsError sheet Cells 1 1 但是使用 VSTO Excel Addin 项目我没有在 Microsoft Of
  • 从 Rest API 响应内容处置输出中下载 javascript 中的 excel 文件 [对象,对象]

    我想从我的 angularJs 代码下载一个 excel 文件 我向 Java Rest API 发出 http post 请求并返回带有标头的文件 Content Disposition 附件 文件名 new excel file xls
  • MS Access:将组合框中选定的条目插入表中

    这是我使用 MS Access 所做的一个示例 我有一个包含人名的表格和两个用于添加电话号码的文本字段 我创建了一个包含名称的列表框 我设法将列表框中选定的姓名和文本字段 Tel1 和 Tel2 中的电话号码插入表 ContactTable
  • 是否可以编写自定义 Power Query 连接器?

    在 来自其他来源 下的 Power Query 中 我们看到许多专业提供商 Facebook SAP SalesForce 等 我有兴趣编写一个自定义提供程序来访问无法通过任何内置连接器使用的本地专有数据存储 我知道 访问没有支持连接器的数
  • 在 VBA 中调用批处理文件无法正常工作

    我正在尝试创建一个可供其他人使用的程序 目前 我的文件位于目录中C Documents and Settings jpmccros Desktop test 该目录包含我的macro xlsm names bat 还有另一个子目录名为Dat
  • 访问查询——一个字段是否包含另一字段的值

    我正在尝试使用查询将表范围缩小到仅字段 全名 包含字段 名字 中的值的行 例如 如果某行的 全名 中包含 Blake Johnson 名字 中包含 John 则该行将被包含在内 但如果 全名 有 Garry Sways 并且 名字 有 Sw
  • 在 VBA 中声明字典

    我收到错误Run time error 424 Object required当我尝试在 VBA 中创建字典时 我的代码如下所示 Private Sub data Dim dicti As Object Set dicti CreateOb
  • 在c#中使用OleDB读取excel文件?

    我正在构建一个程序来将 excel 文件读取到 dataGridView 中 using System using System Collections Generic using System ComponentModel using S
  • 如何使用 Office.js 获取单元格的格式

    我正在开发一个 Excel 加载项 它提取单元格 A1 的文本 包括其格式 并在其自己的区域中显示文本 所以添加包含这个 见下面的截图 显示格式化文本的区域 开始提取的按钮请点击查看图片 https i stack imgur com oy
  • 条件格式化VBA多个条件

    我对 VBA 世界非常陌生 需要一些关于条件格式的 VBA 方面的帮助 1 我需要将条件格式应用于列 M 7岁以下绿色 黄色从7 20 红色大于20 最重要的条件是 如果列 N 声明 NOPO 则我不希望应用条件格式 我已经制定了一个公式来
  • 自动创建 Outlook 约会

    我有一个跟踪到期日期的电子表格 excel 2003 我想知道是否有办法让这些到期日期在 Outlook 中创建约会 提醒 到期日期位于电子表格的一个字段中 实体名称位于另一列中 理想情况下 我希望 Outlook 2003 能够获取日期
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • 修剪工作簿中的所有单元格(VBA)

    我尝试向一直在开发的 Excel 加载项添加功能 该功能会修剪已用单元格末尾的前导空格 甚至可能解析文本 我需要这样做的原因只是为了将其变成超链接我已经在工作了 但是那部分很好 这是我到目前为止所尝试的 我已经修剪了active works
  • Excel VBA 自动过滤子字符串

    我的 Excel 中有多行 其中 D 列为 TDM 02 Bundle Rehoming 5 NE TDM 02 Bundle Rehoming 23 NE IP 02 Bundle Rehoming 7 NE 等 请注意 大多数情况下 N

随机推荐

  • 如何禁用Seaborn中hue的嵌套?

    使用时hueSeaborn 中条形图上的参数会更改条形的颜色和位置 就像下面的例子 没有色调的绘图 import seaborn as sns df x 1 2 3 4 y 5 6 7 8 hue a b b a sns barplot d
  • H2 控制台访问 h2 以外的数据库

    H2 控制台 http localhost 8082 login jsp 可以选择查看任何数据库的详细信息 如果我们要与 mysql 或其他数据库服务器通信 我们应该将 jdbc 驱动程序复制到哪里 将 jdbc 驱动程序文件 mysql
  • 在 SharePoint 2010 中编辑 SQL 扩展属性

    如何在 SharePoint 2010 中编辑表的扩展属性 到目前为止 我认为没有任何 开箱即用 的东西可以做到这一点 因此 我假设这意味着我必须创建一个自定义 Web 部件来提取表的扩展属性 然后允许我对其进行编辑 然后在编辑完成后 We
  • 设备实例 ID 的驱动器盘符

    如何从驱动器号获取设备实例 ID 我的流程从设备到达消息开始 我已成功从到达消息中获取驱动器盘符并打开 DVD 托盘 我搜索了各种Setup API项 但我还没有找到任何可以让我从驱动器号到设备实例 ID 的信息 C 或 VB NET 中的
  • 如何将查询结果分解为单独的列?

    接续我之前的问题 要作为列插入表中的栅格记录的像素值 想象一下我的查询结果有 5300 行 结果如下 value 15624 15899 56267 85955 我希望它们位于表格中 前 53 行位于val1列 第二 53 行val2专栏等
  • BigQuery - 对数组进行分组

    我想对数组进行分组 示例查询 standardSQL WITH project dataset table AS SELECT compute description key application value scaled server
  • Firebase runloop (3.0.0) 中未捕获的异常。请向 [email protected] 举报 [已关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我的离线功能有问题 我使用 firebase 在我的项目中打开离线功能 一切都很好 直到我完全关闭应用程序并重新打开它 它造成了崩溃 这是日志 05 23 07 44 58 407 7
  • JUCE 和 React Native - 链接器错误“ld:未找到 -lReact 的库”

    我在使用 CocoaPods 和 React Native 时遇到此链接器错误 ld library not found for lReact 我已按照指南进行操作https facebook github io react native
  • 在flaskext.mysql中寻找dictcursor的等价物

    我编写了一个Python Flask应用程序 最初使用MySQLdb来访问MySQL 后来我出于同样的目的切换到flaskext mysql 但现在当我使用这个模块时 我看不到如何获取字典结构的游标 当我使用 MySQLdb 模块时 我使用
  • WTForms-JSON 不适用于 FormFields

    当我使用 WTForms JSON 时 嵌套表单 FormFields 不会填充数据 我无法发现我的错误 请参阅下面的示例 from flask import Flask request jsonify from flask wtf imp
  • 管理两个 UI 的最佳方法是什么?

    我创建了两个用户界面 如何关闭第一个并激活下一个 Google Apps 脚本下是否可以有两个 UI 我尝试过类似的事情 var app UiApp getActiveApplication app add app loadComponen
  • Matlab:字符串数组中的数字数组索引(无循环)

    我正在做 MIT OCW MATLAB 入门课程中的一系列问题 你可以看到here 这是问题 9 第 g iii 部分 我有一个矩阵 其中包含一门课程的最终成绩 所有成绩的范围都从 1 到 5 我还有另一个数组 其中仅包含字母 F to A
  • 在构造的字符串上使用 execvp 的问题

    我正在尝试编写一个 shell 其构造的一部分是从用户输入的字符串 缓冲区 执行代码 然而 当我尝试使用附加输入 ae echo a 执行 execvp 字符串时 它总是会搞砸并返回 1 我不知道为什么 这是相关的部分 char buffe
  • 万事达卡的正则表达式

    我找到了信用卡类型 MasterCard 的以下正则表达式 public static readonly string CreditMasterCard 5 1 5 0 9 14 然后我写了下面的代码 Regex regexMasterCa
  • 如何获取多维数组的交集?

    我有一个多维数组的数组 每个数组代表一个搜索结果集 我正在尝试找出如何过滤这组数据以仅包含每个数组中存在的数组 注意 下面显示的索引各自代表多维数组 每个数组都有一个深度嵌套的Id可用于比较的键 The Id位于 reference var
  • PlaceAutocompleteFragment 无法解析

    在我的应用程序中 我添加了谷歌地图 它们工作正常 我想添加一个 PlaceAutocompleteFragment 我正在使用已经为地图生成的密钥 并且我已启用来自 google console 的 Places Api 选项 我已将这些添
  • 处理 AdWhirl 失败

    您好 我正在开发一个 Android 应用程序并使用 AdWhirl 来显示我的广告 我希望能够处理 AdWhirl 不返回广告的情况 当它失败时 我想显示一个装饰栏 谁能给我举个例子吗 提前致谢 好吧 我现在已经弄清楚了 有两种可能的方法
  • 如何读取单个Excel单元格值

    我有一个带有sheet1的Excel文件 其中有一个我需要在第2行和第10列读取的值 这是我的代码 Excel Workbook excelWorkbook excelApp Workbooks Open workbookPath 0 fa
  • 是否有 GCC 关键字允许结构重新排序?

    我知道为什么 GCC 默认情况下不重新排序结构的成员 但我很少编写依赖于结构顺序的代码 那么有什么方法可以将我的结构标记为自动重新排序吗 以前的 GCC 版本有 fipa struct reorg option允许结构重新排序 fwhole
  • 使用VBA将图片插入Excel并保持宽高比不超过尺寸

    我正在将Access数据库中的数据导出到Excel报告中 报告中需要包含的部分内容是与数据对应的图片 图片存储在共享文件中并插入到 Excel 文件中 如下所示 Dim P As Object Dim xlApp As Excel Appl