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

Excel宏到Word邮件合并正在尝试合并列中的所有行,excel,vba,ms-word,mailmerge,Excel,Vba,Ms Word,Mailmerge,我创建了一个VBA表单和宏,它将为我的公司生成自动编号的文档。根据选择的成本中心,它将选择Word文档来完成合并。它基本上在标题“FirstName”(FirstName很好地将Word用作“source”字段)下的A列中生成字母数字序列 在我去产生一个前导零的序列之前,一切似乎都很顺利。表格中“手动”(起始编号)输入后的每个前导零都被自动删除。我进行了一些阅读,结果只是检查了字符串的Len(),如果0小于输入(起始)数字的位数,则重新插入0。希望你还在跟踪我。:) 以下是我认为发生的事情。。。

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

在我去产生一个前导零的序列之前,一切似乎都很顺利。表格中“手动”(起始编号)输入后的每个前导零都被自动删除。我进行了一些阅读,结果只是检查了字符串的Len(),如果0小于输入(起始)数字的位数,则重新插入0。希望你还在跟踪我。:)

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

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

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
如果我不得不大胆猜测的话,我会说SQL语句现在“看到”了更多的行,因为整个列已经格式化了?我做了一次手动合并,果然在我的200个数字结束后有数千个空格。我在Word中手动过滤了它们,但我想解决这个问题,因为我的程序显然是为了自动化这个过程


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

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


例如,突出显示一个列并将其格式化为文本似乎真的会破坏邮件合并。如果我错了,请随时纠正我,但这似乎解决了我的问题。

重读我刚才写的内容,我不正需要SuppressBlankLines=True吗?把它们全部格式化为文本会把事情搞砸吗?我有一个重置值宏,它只选择A2:A60000并在该范围内执行清除。
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