Excel2007, WindowsXP SP3です。
ワークシート上にActiveXコントロールのテキストボックスを複数おいています。そこに別の名簿のシートのデータを表示させて、一人ずつ印刷しようと思っています。
例えば「名簿」というシートの5列目に生年月日が「1985/12/15」のように入っているとします。「個人票」というシートに「年」「月」「日」という3つのテキストボックスをワークシート上においています。
マクロは以下のようなものです(実際はもっと項目は多いです)。マクロを実行させても、テキストボックスの値表示は変わらず、1人目の個人票ばかり印刷されて出てきます。
マクロが終了するとテキストボックスは名簿の最後(下のマクロの場合は10人目)のデータにはなっているので、テキストボックスの中の値は変更されているようです。
個人票を1枚ずつ印刷したいのですが、どうしたらいいでしょうか?
Sub Kojinhyo_PrintOut()
For i = 1 to 10
With sheets(“名簿”)
生年月日 = .Cells(i, 5)
年 = Year(生年月日)
月 = Month(生年月日)
日 = Day(生年月日)
Sheets(“個人票”).年.Value = 年
Sheets(“個人票”).月.Value = 月
Sheets(“個人票”).日.Value = 日
End with
Sheets(“個人票”). PrintOut
Next
End Sub
とりあえず動いたコード。ご参考まで。
シートモジュールに記述してありますが、深い意味はありません。
DoEventsは一個入れるだけではダメでした。
Sub test()
Dim i As Long
For i = 1 To 3
With Me
.YearTextBox.Value = i
DoEvents
.MonthTextBox.Value = i * 2
DoEvents
.DateTextBox.Value = i * 3
DoEvents
.PrintOut
End With
Next i
End Sub
なお、結構長いsleepを入れてみるとか、YearTextBoxのChangeイベントでMonthTextBoxを書き換え、MonthTextBoxのChangeイベントでDateTextBoxの値を書き換え...てなこともやって見ましたが書き換わってはくれませんでした。
こんな感じでは?
Sub Kojinhyo_PrintOut()
For i = 1 To 10
With Sheets("名簿")
生年月日 = .Cells(i, 5)
年 = Year(生年月日)
月 = Month(生年月日)
日 = Day(生年月日)
Sheets("個人票").OLEObjects("年").Object.Value = 年
DoEvents
Sheets("個人票").OLEObjects("月").Object.Value = 月
DoEvents
Sheets("個人票").OLEObjects("日").Object.Value = 日
DoEvents
End With
Sheets("個人票").PrintOut
Next
End Sub
お礼
忙しい中、回答ありがとうございました。 DoEventsを入れたらいいのですね。項目が多いのですべてにDoEventsを入れるのは大変ですが、しかたないですね。