Excel 如何不复制最后一项?

Excel 如何不复制最后一项?,excel,vba,ms-word,Excel,Vba,Ms Word,我正在使用Excel VBA创建Word文档和添加图像 因为我希望图像能适应页面宽度的一半,所以我创建了一个具有两列布局的临时文档,首先将图像粘贴到那里,然后将其剪切并粘贴到我真正需要的文档中 临时文档在使用后关闭。当程序关闭主文档并创建另一个主文档时,会出现一个弹出窗口,询问是否要复制最后一个项目。如何从VBA关闭此窗口或对其说“不” 也就是说,程序一直在运行,并忽略弹出窗口,但当我明确表示要关闭程序时,程序没有关闭是很烦人的 创建所有文档后,Microsoft Word的许多窗口都保持打开状

我正在使用Excel VBA创建Word文档和添加图像

因为我希望图像能适应页面宽度的一半,所以我创建了一个具有两列布局的临时文档,首先将图像粘贴到那里,然后将其剪切并粘贴到我真正需要的文档中

临时文档在使用后关闭。当程序关闭主文档并创建另一个主文档时,会出现一个弹出窗口,询问是否要复制最后一个项目。如何从VBA关闭此窗口或对其说“不”

也就是说,程序一直在运行,并忽略弹出窗口,但当我明确表示要关闭程序时,程序没有关闭是很烦人的

创建所有文档后,Microsoft Word的许多窗口都保持打开状态,每个窗口中都会出现此弹出窗口。我猜它也会在内存中保存图像,所以这也不好

Sub Newdoc_withImages()

    Dim wdapp As Word.Application
    Dim doct As Documents
    Dim imag As Variant
    .
    .
    *more variables*
    
    Set wdapp = New Word.Application
    With wdapp
        .Visible = True
        .Activate
        .Documents.Add "C:\Users\USER\Desktop\Template.dot"
        .Selection.GoTo (*I position the cursor and write some things in preparation to add image*)
        If condition (*are there any images available? If yes create Temporal Document and give two columns layout for it*)
            .Documents.Add
            .Documents(1).PageSetup.TextColumns.Add Width:=InchesToPoints(2.85), EvenlySpaced:=True
            For Each imag In imgcollection 
                If condition (*If True, take the image and paste it in the Temporal Doc, then cut it to paste it in the document created at the beginning*)
                    .Documents(1).Select
                    .Documents(1).InlineShapes.AddPicture Filename:=imag, LinkToFile:=False, SaveWithDocument:=True
                    .Documents(1).InlineShapes(1).Select
                    .Selection.Cut
                    .Documents(2).Select
                    .Selection.GoTo (*Position to paste the img*)
                    .Selection.Paste
                    imgcollection.Remove (imag) (*here I remove the image from my collection, not relevant*)
                End If
            Next imag
            (*The Temporal Document actually closes*)
            .Documents(1).Close 0
            (*I return to the Document I actually care, ready for the next batch of images if I need to add more for given condition*)
            .ActiveDocument.Select
        End If
        .DisplayAlerts = 0 (*I tried these to close any pop up maybe I'm wrong, because It doesn't seem to work either*)
        .ActiveDocument.SaveAs2 (objSubFolder.Path & "\" & StrConv(NamesxCrear.Items(i), vbProperCase))
        .ActiveDocument.Close (*HERE is where the pop up window comes up asking me if I want to keep the last item copied, I don't know how to close it from here*)
        .Application.Quit (*doesn't actually quit, program reamins open because of the pop up*)
    
    End With

End Sub
这就是弹出窗口的外观:

道格·罗宾斯在微软网站上回答:

如果在Normal.dotm模板或加载项中创建以下宏,则该消息将不再显示

Sub FileClose()
Dim MyData   As DataObject
Set MyData = New DataObject
MyData.SetText ""
MyData.PutInClipboard
ActiveDocument.Close
End Sub
它用空字符串替换剪贴板的内容,然后在使用“文件”>“关闭”时关闭文档


Doug Robbins在微软网站上的回答:

如果在Normal.dotm模板或加载项中创建以下宏,则该消息将不再显示

Sub FileClose()
Dim MyData   As DataObject
Set MyData = New DataObject
MyData.SetText ""
MyData.PutInClipboard
ActiveDocument.Close
End Sub
它用空字符串替换剪贴板的内容,然后在使用“文件”>“关闭”时关闭文档


无论何时完成复制到剪贴板的内容,都应发出以下命令:

Application.CutCopyMode = False

这在处理大型对象(如图片)时尤为重要。将其放在
.Paste
命令的后面。

无论何时完成复制到剪贴板的内容,都应发出以下命令:

Application.CutCopyMode = False

这在处理大型对象(如图片)时尤为重要。将它放在
.Paste
命令的后面。

将一些小东西复制到剪贴板对我来说很有用,例如:

Selection.Collapse
Selection.SetRange(0, 1)
Selection.Copy

将一些小东西复制到剪贴板对我很有用,例如:

Selection.Collapse
Selection.SetRange(0, 1)
Selection.Copy

Word不是Excel的问题吗?想知道这是否真的有效,因为
应用程序.CutCopyMode
来自Excel对象模型。@在这种情况下,BigBen Word是从Excel VBA自动生成的,因此CutCopyMode将可用。它将可用,但这是否意味着它解决了问题?我不确定,不知道是否可以测试/确认。不幸的是,我尝试了但没有成功。无论如何,谢谢你。我所做的只是在代码中更改.Visible=False并消除.Activate。这样我就什么也看不见了,一切都会在后台运行。它不能解决后台的问题,但它已经足够好了,所以我不必关闭每个弹出窗口。我有.Visible=True,因为我想确保它运行正常,但有一个问题。听起来剪贴板中仍然有大对象占用内存。当应用程序关闭时,这些将不会被清除。你应该按照@Peyter的建议去做,并用一个零大小的项目填充剪贴板。这样可以保持你的记忆力。或者完全停止使用剪贴板。这是针对用户的,不是针对程序的。Word不是Excel的问题吗?想知道这是否真的有效,因为
应用程序.CutCopyMode
来自Excel对象模型。@在这种情况下,BigBen Word是从Excel VBA自动生成的,因此CutCopyMode将可用。它将可用,但这是否意味着它解决了问题?我不确定,不知道是否可以测试/确认。不幸的是,我尝试了但没有成功。无论如何,谢谢你。我所做的只是在代码中更改.Visible=False并消除.Activate。这样我就什么也看不见了,一切都会在后台运行。它不能解决后台的问题,但它已经足够好了,所以我不必关闭每个弹出窗口。我有.Visible=True,因为我想确保它运行正常,但有一个问题。听起来剪贴板中仍然有大对象占用内存。当应用程序关闭时,这些将不会被清除。你应该按照@Peyter的建议去做,并用一个零大小的项目填充剪贴板。这样可以保持你的记忆力。或者完全停止使用剪贴板。这是给用户的,不是给程序的。谢谢你的回答。我想我不太擅长实现它。我所做的只是在代码中更改.Visible=False并消除.Activate。这样我就什么也看不见了,一切都会在后台运行。它不能解决后台的问题,但它已经足够好了,所以我不必关闭每个弹出窗口。我有.Visible=True,因为我想确保它运行正常,但存在这个问题。谢谢你的回答。我想我不太擅长实现它。我所做的只是在代码中更改.Visible=False并消除.Activate。这样我就什么也看不见了,一切都会在后台运行。它不能解决后台的问题,但它已经足够好了,所以我不必关闭每个弹出窗口。我有.Visible=True,因为我想确保它运行正常,但有一个问题。