Excel宏到Word邮件合并正在尝试合并列中的所有行

时间:2013-04-05 16:56:50

标签: excel vba ms-word mailmerge

我创建了一个VBA表单和宏,它将为我的公司生成自动编号的文档。根据所选的成本中心,它将选择Word文档以完成合并。它基本上在标题'FirstName'下的A列中生成一个字母数字序列(FirstName很好地使用Word作为'源'字段)。

在我开始生成具有前导零的序列之前,一切似乎都工作正常。从表单中的“手动”(起始编号)条目后的每个前导零都被自动删除。我做了一些阅读,结果只是检查我的字符串的Len()并重新插入0,如果它小于输入(起始)数字的位数。希望你还在这里跟着我。 :)

以下是我认为发生的事情......我在开始时尝试了其他一些事情,包括让宏用单引号(')写出序列,但它一直在删除那些在那之前领先零。我突出显示整个列并格式化为文本(因此,技术上64,000多行?)但同样问题。我上一段中的解决方法解决了这个问题,但现在合并试图合并列中的所有行。

答案可能很简单,但是当序列停止时我在寻找什么让它停止?我有一个生成数字的例程,它只生成我想要的数量:

For i = 1 To strFormNums
    If Len(strStartVal) < 4 Then
        rngFormNumbers(i).Value = strCampus & "0" & strStartVal 'Appends a single 0 to show before the starting numbers (making 0800 instead of 800). Otherwise Excel will lose the leading zero after the first number.
    Else
        rngFormNumbers(i).Value = strCampus & strStartVal
    End If

    strStartVal = strStartVal + 1
Next i

我测试了这个。它不会产生超过200或500行。 这是邮件合并的一个片段,我正在考虑因为某种原因现在抓住所有行(之前没有):

strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name

wdocSource.MailMerge.MainDocumentType = wdFormLetters

wdocSource.MailMerge.OpenDataSource _
        Name:=strWorkbookName, _
        AddToRecentFiles:=False, _
        Revert:=False, _
        Format:=wdOpenFormatAuto, _
        Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
        SQLStatement:="SELECT * FROM `Numbers$`"

With wdocSource.MailMerge
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
        .FirstRecord = wdDefaultFirstRecord
        .LastRecord = wdDefaultLastRecord
    End With
    .Execute Pause:=False
End With

如果我不得不猜测我会说SQL语句现在“看到”更多行,因为整个列已被格式化?我进行了手动合并,确实在我的200个数字结束后有数千个空白。我在Word中手动过滤掉了它们,但是我想解决这个问题,因为很明显我的程序是为了自动完成这个过程。

如果有人需要查看更多代码,我将很乐意提供。提前谢谢。

1 个答案:

答案 0 :(得分:0)

经过一些实验,我决定使用Clear&gt;删除A列中的所有格式。清除格式(Excel 2010)。邮件合并现在终止于第一个空白行,而不是贯穿整个列。

似乎突出显示列并将格式设置为文本(例如)可以真正破坏邮件合并。如果我弄错了,请随意纠正我,但这似乎解决了我的问题。