0

会社用に自動番号付けされたドキュメントを生成する VBA フォームとマクロを作成しました。選択したコスト センターに応じて、Word ドキュメントを選択してマージを完了します。基本的に、列 A のヘッダー 'FirstName' の下に英数字シーケンスを生成します (FirstName は Word を 'ソース' フィールドとしてうまく処理します)。

先行ゼロを持つシーケンスを生成するまで、すべてが正常に機能しているように見えました。フォームからの「手動」(開始番号)エントリの後の先行ゼロはすべて自動削除されました。私はいくつかの読み取りを行い、文字列の Len() をチェックするだけになり、入力 (開始) 番号の桁数よりも少ない場合は 0 を再挿入しました。ここでまだ私をフォローしてくれることを願っています。:)

ここに何が起こったと思います...最初に、マクロに一重引用符(')でシーケンスを書き出すなど、他のことをいくつか試しましたが、その前に先行ゼロを削除し続けました。列全体を強調表示し、テキストとしてフォーマットしました (技術的には 64,000 行以上?) が、同じ問題が発生しました。最後の段落の回避策で問題は解決しましたが、現在、マージは列内のすべての行をマージしようとしています。

答えは簡単かもしれませんが、シーケンスが停止したときにそれを停止させるために何を探していますか? 数値を生成するルーチンが 1 つありますが、必要な数だけ生成します。

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 でそれらを手動で除外しましたが、明らかに私のプログラムはこのプロセスを自動化することを意図していたので、これを修正したいと思います。

誰かがもっとコードを見る必要がある場合は、喜んで提供します。前もって感謝します。

4

1 に答える 1

0

いくつか実験した後、Clear > Clear Formats (Excel 2010) を使用して、列 A からすべての書式設定を削除することにしました。差し込み印刷は、列全体ではなく、最初の空白行で終了するようになりました。

列を強調表示してテキストとして書式設定すると (たとえば)、差し込み印刷がうまくいかないようです。私が間違っている場合は、お気軽に訂正してください。これで問題が解決したようです。

于 2013-04-08T14:07:41.843 に答える