Я создал форму VBA и макрос, который будет генерировать документы с автоматической нумерацией для моей компании. В зависимости от выбранного центра затрат он выберет документ Word для завершения слияния. По сути, он генерирует буквенно-цифровую последовательность в столбце A под заголовком «Имя» (имя прекрасно работает с 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, но хотел бы исправить это, потому что, очевидно, моя программа предназначалась для автоматизации этого процесса.
Если кому-то нужно увидеть больше кода, я буду рад предоставить его. Заранее спасибо.