Excel 使用循环插入照片:与目标单元格的偏差递增

Excel 使用循环插入照片:与目标单元格的偏差递增,excel,vba,Excel,Vba,我必须定期制作一份报告,根据该报告,需要将使用的每件物品的照片插入特定位置进行打印。例如,如果我使用3个项目,我需要在a列第6+行(I-1)*23中放置每个项目的照片。我尝试过使用循环和picture.insert,但通常情况下,第一张照片被完美放置,而第二张照片则逐渐垂直偏移。我想知道是否有人经历过这种情况,是否有任何可用的解决方案。如果已经有答案,我很抱歉,但我找不到答案。另外,对于我在移动设备上输入的简化代码,我深表歉意 For i=1 to lastRow Set targetC

我必须定期制作一份报告,根据该报告,需要将使用的每件物品的照片插入特定位置进行打印。例如,如果我使用3个项目,我需要在a列第6+行(I-1)*23中放置每个项目的照片。我尝试过使用循环和picture.insert,但通常情况下,第一张照片被完美放置,而第二张照片则逐渐垂直偏移。我想知道是否有人经历过这种情况,是否有任何可用的解决方案。如果已经有答案,我很抱歉,但我找不到答案。另外,对于我在移动设备上输入的简化代码,我深表歉意

For i=1 to lastRow
    Set targetCell = range(some range)
    Set pic = ws.pictures.insert(file name)
    With pic
        .Top = targetCell.Top
        .Left = targetCell.Left
    End With
Next i
意见第1部分:

  • 无论是否使用循环,当我使用单独的工作簿控制照片的放置时,都会出现这种现象

  • 在不使用循环(按下按钮手动执行宏)的情况下,照片在Excel 2010计算机中的位置是完美的,在Excel 2016计算机中是水平(一致)关闭的

  • 上述方法涉及在Excel 2016中编写代码

意见第2部分:

  • 我将首先解决非环路水平位移问题,然后再解决环路问题,以更好地理解该问题

  • 每个工作簿的像素大小似乎不同,这可能是问题的原因(创建工作簿时,不同的计算机可能具有不同的像素大小定义)

  • 例如,一个工作簿显示的列宽为3.55,为46像素,而另一个工作簿显示的列宽为3.50,为49像素

  • 通过从一个工作簿复制整个工作表并粘贴到另一个工作簿中,我能够使两个工作簿的像素大小保持一致,这似乎解决了水平位移(非循环)问题

  • 下一步是尝试使用相同的工作簿来实现循环


    • 我认为以下方法应该有效:

      For i = 1 To lastRow
          Set targetCell = ws.Cells(6 + (i - 1) * 23, 1)
          Set pic = ws.pictures.insert(file name)
          With pic
              .Top = targetCell.Top
              .Left = targetCell.Left
          End With
      Next i
      

      如果仍然存在问题,则可能需要检查图片是否包含任何使图像“看起来”更低的空白/白色像素行?

      我认为以下方法应该有效:

      For i = 1 To lastRow
          Set targetCell = ws.Cells(6 + (i - 1) * 23, 1)
          Set pic = ws.pictures.insert(file name)
          With pic
              .Top = targetCell.Top
              .Left = targetCell.Left
          End With
      Next i
      

      如果仍然存在问题,可能需要检查图片是否包含任何使图像“看起来”更低的空白/白色像素行?

      因此,以您的示例为例,第一张图片位于
      A6
      ,第二张图片位于
      A29
      ,然后是
      A52
      ?是的,这是正确的。我不知道这是否有帮助,但不断增加的偏差发生在向下。例如,第二张照片可能比预期位置低5个像素,第三张照片可能比预期位置低10个像素,依此类推。在将照片放入工作表后,是否会有调整大小或以其他方式改变行?没有改变行的程序,但我根据您提到的内容进行了一些新的观察。我将编辑我的帖子来反映这一点。谢谢你的想法。因此,以你的例子来说,第一张图片在
      A6
      ,第二张在
      A29
      ,然后是
      A52
      ?是的,这是正确的。我不知道这是否有帮助,但不断增加的偏差发生在向下。例如,第二张照片可能比预期位置低5个像素,第三张照片可能比预期位置低10个像素,依此类推。在将照片放入工作表后,是否会有调整大小或以其他方式改变行?没有改变行的程序,但我根据您提到的内容进行了一些新的观察。我将编辑我的帖子来反映这一点。谢谢你的想法,谢谢你的回复。不幸的是,它没有解决我的问题。为了确定,我已经确认我所有的照片中都没有这样的“空白”像素。你能确认你正在使用上面的代码并且它不工作吗?我想知道
      .Top
      .Left
      的测量值是否基于不同的表(其中行的大小可能不同),但在我的代码中使用
      ws
      会阻止这种情况。感谢您的回复。不幸的是,它没有解决我的问题。为了确定,我已经确认我所有的照片中都没有这样的“空白”像素。你能确认你正在使用上面的代码并且它不工作吗?我想知道
      .Top
      .Left
      的度量值是否基于不同的表(其中行的大小可能不同),但在我的代码中使用
      ws
      会阻止这种情况。