我创建了一个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中手动过滤掉了它们,但是我想解决这个问题,因为很明显我的程序是为了自动完成这个过程。
如果有人需要查看更多代码,我将很乐意提供。提前谢谢。
答案 0 :(得分:0)
经过一些实验,我决定使用Clear&gt;删除A列中的所有格式。清除格式(Excel 2010)。邮件合并现在终止于第一个空白行,而不是贯穿整个列。
似乎突出显示列并将格式设置为文本(例如)可以真正破坏邮件合并。如果我弄错了,请随意纠正我,但这似乎解决了我的问题。