【问题标题】:VBA Word.Selection.Copy not working correctlyVBA Word.Selection.Copy 无法正常工作
【发布时间】:2016-01-28 19:44:58
【问题描述】:

我有一个问题,我似乎无法解决问题。我正在尝试使用 Word 文档中的形状(图像)填充用户窗体。我使用此代码来执行此操作:

iShapeCount = wrdDoc.Shapes.Count
i = 0

If iShapeCount > 0 Then

    ReDim oPic(iShapeCount - 1) As IPictureDisp

        For Each wrdShape In wrdDoc.Shapes
            With wrdShape
                wrdDoc.Activate
                .Select
                wrdAppMain.ActiveDocument.ActiveWindow.Selection.Copy
                Set oPic(i) = PastePicture(lPicType)
        End With

        i = i + 1

        Next wrdShape

End If

oPic 是一维图片数组,PastePicture 是子例程,用于将复制的图像从剪贴板中取出并作为图像文件放入数组中。

到目前为止一切顺利。

这完全按照它应该的方式工作,但是一旦 Word 文档中存在两个以上的形状(图像),复制命令就会像魅力一样复制前两个,但所有其他的(尽管选择正确) 将不会被 Copy-Command 复制,字面意思是 NOTHING。

另一件有趣的事情:如果我省略了wrdAppMain.ActiveDocument.ActiveWindow.Selection.Copy-thingy 并手动 Ctrl-C 程序选择的形状,因为它通过循环,无论 Word 文档中有多少形状,它都可以工作。

所以你看:我已经走到了尽头。请帮忙:)

提前谢谢你!

【问题讨论】:

  • 你试过一步步调试吗?如果是,则重做,每次跳转到 if 语句时控制 i 的值(调试时用鼠标移动 i)。你得到了什么结果?
  • 嗨卡塔拉! i 按预期从 0 变为 6(在这种情况下为 7 个图像)。问题是,当它到达三个时,Selection.Copy-Command 不会复制,所以 PastePicture-Subroutine 用空填充数组的其余部分。
  • 为什么不尝试直接复制形状?

标签: vba ms-word


【解决方案1】:

为什么不直接将形状赋予 oPic-Array?

iShapeCount = wrdDoc.Shapes.Count

If iShapeCount > 0 Then

    ReDim oPic(iShapeCount - 1) As IPictureDisp

    For i = 0 to (iShapeCount -1)
        For Each wrdShape In wrdDoc.Shapes
            oPic(i) = wrdShape
        Next wrdShape
    Next i

End If

oPic 将被声明为 Variant。

【讨论】:

  • 是的。它肯定有效。但是由此产生的问题是,在填充用户表单时,我似乎需要一个 ImageFile。因此,如果我直接填写形状而不进行转换,它将给我一个“类型不匹配”-此处的异常:Set allImages(i) = OrderWindow.Controls.Add("Forms.Image.1", "Thumbnail" & i) allImages(i).Picture = **currentImage** with currentImages 是我们填充 oPic 的形状。
  • 好的。您可以尝试“Set oPic(i) = PastePicture(wrdShape)”而不是“oPic(i) = wrdShape”(虽然我必须说,我不确定 PastePicture 是如何工作的>.
  • 哈哈。我也不确切知道。自己从网上复制的,效果不错。 PastePicture 确实从剪贴板收集当前数据,对其进行检查,如果匹配,它会根据该原始数据创建一个 ImageFile。因此,Shapes 本身需要在剪贴板中,以便子例程能够获取它。我会尝试让它直接与形状一起使用。失败后我会立即报告;)
  • 哈哈哈,好的,那我就等一些反馈,有时间再帮忙^.^祝你好运
  • 哈!无法让 PastePicture 工作,但我发现了一个肮脏的方法!我只是将 Word 文档保存为 HTML,因此 Word 会创建一个包含所有图像的文件夹。然后我可以将它们加载到 oPic 并再次删除该文件夹。也许有点乱,但我可以忍受;)
猜你喜欢
  • 1970-01-01
  • 2013-08-09
  • 2015-06-28
  • 2018-07-18
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多