我创建了一个 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 中手动过滤掉了它们,但我想解决这个问题,因为显然我的程序是为了自动化这个过程。
如果有人需要查看更多代码,我将很乐意提供。提前致谢。