Макрос Excel для слияния почты Word пытается объединить ВСЕ строки в столбце

Я создал форму 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, но хотел бы исправить это, потому что, очевидно, моя программа предназначалась для автоматизации этого процесса.

Если кому-то нужно увидеть больше кода, я буду рад предоставить его. Заранее спасибо.


person armadadrive    schedule 05.04.2013    source источник
comment
Перечитывая то, что я только что написал, не будет ли SuppressBlankLines = True ИМЕННО тем, что мне нужно? Форматирование их всех как текст испортило это? У меня есть макрос сброса значений, который просто выбирает A2: A60000 и выполняет очистку этого диапазона.   -  person armadadrive    schedule 05.04.2013


Ответы (1)


После некоторых экспериментов я решил удалить все форматирование из столбца A, используя «Очистить»> «Очистить форматы» (Excel 2010). Слияние почты теперь завершается на первой пустой строке, а не проходит через весь столбец.

Кажется, что выделение столбца и форматирование как текст (например) может действительно испортить слияние почты. Если я ошибаюсь, пожалуйста, поправьте меня, но это, похоже, решило мою проблему.

person armadadrive    schedule 08.04.2013