会社用に自動番号付けされたドキュメントを生成する 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 でそれらを手動で除外しましたが、明らかに私のプログラムはこのプロセスを自動化することを意図していたので、これを修正したいと思います。
誰かがもっとコードを見る必要がある場合は、喜んで提供します。前もって感謝します。