将Excel单元格复制/粘贴到Word in循环无法正常工作/保存

将Excel单元格复制/粘贴到Word in循环无法正常工作/保存,excel,vba,ms-word,Excel,Vba,Ms Word,诚然,VBA是新手。我有一个excel文件,其中包含所有零件号,这些零件号用“-”符号表示,我编写了代码,将其分解为更具描述性的短语,用于制作标签。我试图在这里编写代码,循环使用不同类型的零件号,获取该零件行中的特定单元格,并将它们复制/粘贴到word文档中,然后将word文档保存为零件名称。按原样,它循环但获取来自不同范围的所有信息,而不仅仅是作为零件的同一行的信息 如果我将范围更改为一个单元格,代码也会起作用(除了保存),但一旦范围中有多个单元格,它就会开始复制范围中的所有内容,而不仅仅是它

诚然,VBA是新手。我有一个excel文件,其中包含所有零件号,这些零件号用“-”符号表示,我编写了代码,将其分解为更具描述性的短语,用于制作标签。我试图在这里编写代码,循环使用不同类型的零件号,获取该零件行中的特定单元格,并将它们复制/粘贴到word文档中,然后将word文档保存为零件名称。按原样,它循环但获取来自不同范围的所有信息,而不仅仅是作为零件的同一行的信息

如果我将范围更改为一个单元格,代码也会起作用(除了保存),但一旦范围中有多个单元格,它就会开始复制范围中的所有内容,而不仅仅是它应该循环的零件行中的内容

Sub exceltoword2()

Dim part As Range
Dim funct As Range
Dim finish As Range
Dim lever As Range
Dim backset As Range
Dim trim As Range

Set part = Range("A2:A5")
Set funct = Range("Q2:Q5")
Set finish = Range("R2:R5")
Set lever = Range("S2:S5")
Set backset = Range("T2:T5")
Set trim = Range("U2:U5")

Dim wdapp As Word.Application
Set wdapp = New Word.Application
Dim SaveName As String

Dim path As String
path = "C:\Users\bpickett\Desktop\Parts\"

For Each part In part 'Long list of part #'s that will be looped through with particular variables commented out as needed as I adjust range on part variable

     With wdapp
    .Visible = True
    .Documents.Add
    .Activate

    part.Copy '********************************Part copied
    .Selection.PasteSpecial
        With .Selection '**********************Function copied
            .Font.Name = "Calibri"
            .Font.Size = 22
            .TypeText "FUNCTION       " '7 spaces
        End With
    funct.Copy
    .Selection.PasteSpecial
    With .Selection '**************************Finish
            .Font.Name = "Calibri"
            .Font.Size = 22
            .TypeText "FINISH              " '14 spaces
        End With
    finish.Copy
    .Selection.PasteSpecial
    With .Selection '***************************Backset
            .Font.Name = "Calibri"
            .Font.Size = 22
            .TypeText "BACKSET          " '10 spaces
        End With
    backset.Copy
    .Selection.PasteSpecial
   ActiveDocument.SaveAs2 path & part & ".docx"
End With
Next
End Sub

运行时的代码有第一部分#正确,只复制每个部分下的全部Backset/Function/Finish,而不只是部分#行中的单个单元格。

听取了上面的意见,做了一天更值得研究的工作,并做了一些更改,解决了所有问题

For i = 1 to 1275
Set part = Range("A" & i)
Set funct = Range("Q" & i)
Set finish = Range("R" & i)
Set lever = Range("S" & i)
Set backset = Range("T" & i)
Set trim = Range("U" & i)
限定范围(或者至少对我来说是这样)并添加i数组,而不是为部分中的每个部分添加i数组,这对于代码循环和只获取必要信息来说是巨大的。但在运行时,它经常出现错误4605。但这里回答的一个7年前的问题围绕着带有标签和错误处理程序的复制/粘贴命令

Pg1CopyAttempt:
DoEvents
part.Copy
On Error GoTo Pg1PasteFail
.selection.pastespecial
On Error goto 0 'disable the error handler

Pg1PasteFail:
If Err.Number = 4605 Then ' clipboard is empty or not valid.
    DoEvents
    Resume Pg1CopyAttempt
 End If

它完美地完成了100或1000个循环(创建的文件)的字符串。只需通过代码将Pg1修改为2到3和ect。

一些快速反馈说明:1)你应该完全限定你的范围,2)
对于部分中的每个部分都没有意义;可能是
部分中的每个c
,其中
c
是您设置为
部分
的范围内的每个单元格,3)您正在尝试添加和
。当您应该将新文档设置为变量并使用所述变量时,激活Word中的每个文档,非常重要的观察:就目前情况而言,这个问题“太宽泛”——你问的问题太多了。您可能希望在中查看站点的指南,但其中一条规则是:每个问题一个问题。你需要把它分解成一个问题。您可以使用该链接将内容更改为显示并提出一个问题(并删除与之无关的信息,以便我们更容易处理)。对于其他问题,请提出一个新问题。在我看来,excel正在做您要求它做的事情。当您说“部分中的每个部分”,excel将在“部分”范围内的每个单元格中循环。在该循环中,您要求excel复制并粘贴其他定义的范围。如果要复制并粘贴零件号的特定行,需要告诉它。如果我假设这是一项一次性任务,效率并不重要,我认为最简单的解决方案是使用“offset”,即使用part.offset(0,N).copy(其中N是与part#的列偏移量)。