ワークシート上のテキストボックスの値表示させるには

このQ&Aのポイント
  • Excel2007とWindowsXP SP3を使用して、ワークシート上に表示されるテキストボックスの値を取得する方法について教えてください。
  • ワークシート上のActiveXコントロールのテキストボックスに名簿データを表示し、個人ごとに印刷する方法について教えてください。
  • マクロを実行してもテキストボックスの値が変わらず、1人目の個人票が印刷されるため、個人ごとに印刷する方法を教えてください。
回答を見る
  • ベストアンサー

ワークシート上のテキストボックスの値表示させるには

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

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

とりあえず動いたコード。ご参考まで。 シートモジュールに記述してありますが、深い意味はありません。 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の値を書き換え...てなこともやって見ましたが書き換わってはくれませんでした。

CaveatEmptor
質問者

お礼

忙しい中、回答ありがとうございました。 DoEventsを入れたらいいのですね。項目が多いのですべてにDoEventsを入れるのは大変ですが、しかたないですね。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

こんな感じでは? 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

CaveatEmptor
質問者

お礼

忙しい中、回答ありがとうございました。 やはりDoEventsを個々に入れていくしかないようですね。

関連するQ&A

  • 印刷枚数を指定して印刷(印刷しないシートを含む場合)

    マクロ(VBA)の超超初心者です。 エクセルのブックの全シート(13sheet)の印刷を1つのシートで管理するマクロを作りたいと思っています。 下記のマクロでチェックしたシートのみ印刷することは可能になりました。 Sub チェックしたシートの印刷() Dim rng, shChk, PrtSh For Each rng In Range("IDX") If rng.Offset(0, -1) = 1 Then shChk = shChk & rng.Value & "," End If Next shChk = Left(shChk, Len(shChk) - 1) PrtSh = Split(shChk, ",") Sheets(PrtSh).Select ActiveWindow.SelectedSheets.PrintOut End Sub そこにさらに印刷枚数を指定して印刷したいのですが、下記のマクロだと、0枚(印刷しないときの)の設定ができません、、、 0枚でもマクロを実行できるよにするにはどうしたらよいのでしょうか、、、 さらに、このマクロを簡単に書きたいのです。(ほぼ同じことの繰り返しなので、、、、) Sheets("sheet1").PrintOut Copies:=Range("A1").Value Sheets("sheet2").PrintOut Copies:=Range("A2").Value ・     ・ ・ Sheets("Sheet13").PrintOut Copies:=Range("A13").Value End Sub 超超初心者があつかましい質問ですが、ご教授のほうよろしくおねがいいたします。

  • エクセル マクロ 印刷指定

    マクロが解りません。色々調べてマクロの記録を使って、下記のマクロを作りました。 1枚目の印刷を2枚目、3枚目印刷として書き足してみました。 しかしエラーが出て2番目のシートからの印刷ができません。 Sub 連絡票印刷() ' ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+p ' Sheets("連絡票").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("連絡票").Range("p1").Value, To:=Sheets("連絡票").Range("q1").Value, Collate:=True, IgnorePrintAreas:=False Sheets("予定表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("予定表").Range("y1").Value, To:=Sheets("予定表").Range("z2").Value, Collate:=True, IgnorePrintAreas:=False Sheets("配車表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("配車表").Range("s1").Value, To:=Sheets("配車表").Range("t2").Value, Collate:=True, IgnorePrintAreas:=False Dim str As String str = Worksheets("連絡票").Range("r1") Worksheets(str).Select End Sub いろいろ解らないなりに書き換えをしてみましたが、やっぱり2番目のシートから印刷ができません。 教えていただけませんでしょうか。

  • エクセルマクロ_テキストボックスをシートに反映(その2)

    エクセルマクロ初心者です。(2003使用_ユーザーフォーム) 先ほどは大変お世話になりました。 複数行に応用させようとしたのですが、管理番号が余計に記載(テキストボックス(出荷日など)が空欄であっても、管理番号だけはとられてしまいます)されてしまいます。すみませんが、ご教授よろしくお願いいたします。 リストボックス1のデータは、Sheet1を表示しています。→管理番号はSheet2のA最終行に記載されます。 テキストボックス1(回答日)は、上記の管理番号記載のとなりに、 テキストボックス2(出荷日)は、テキストボックス1記載のとなりに、 ・・・とテキストボックス4(コメント)(これはK列)に1行で記載されます。 ↑ここまでは、教えていただいたので、完璧なのですが、 テキストボックス2~4までの内容を、あと複数行(4件)追加できるように試してみたのですが、空欄であっても管理番号だけは常に記載されてしまいます。 テキストボックス2と5に記載されている場合は、Sheet2に値を反映させるが、空欄の場合は、値を反映させないようにしたいのです。 (Sheet1=データベース) C5   D5 管理番号 品名 アカ12 りんご アオ56 みかん クロ34 なし クロ89 すいか アオ12 もも (Sheet2=入力シート) A(管理番号)    B(回答日)    C(出荷日)   D(数量)     K(コメント) アオ56        8月9日        8月10日      75     送り先の確認 アオ56                    8月11日      80 クロ34        9月4日        9月5日      80 (今回は、2行で作成した場合のマクロを記載しました) Private Sub UserForm_Initialize() With ListBox1 .ColumnWidths = "0;0;50;50" .ColumnCount = 4 .RowSource = "Sheet1!A5:D" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row End With End Sub Private Sub CommandButton1_Click() If TextBox2.Value Then Dim lRow As Long With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) If IsDate(TextBox1.Value) Then .Range("B" & lRow + 1).Value = TextBox1.Value End If If IsDate(TextBox2.Value) Then .Range("C" & lRow + 1).Value = TextBox2.Value End If If IsNumeric(TextBox3.Value) Then .Range("D" & lRow + 1).Value = TextBox3.Value End If .Range("K" & lRow + 1).Value = TextBox4.Value End With End If If TextBox5.Value Then Dim llRow As Long With Worksheets("Sheet2") llRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & llRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) If IsDate(TextBox5.Value) Then .Range("C" & llRow + 1).Value = TextBox5.Value End If If IsNumeric(TextBox6.Value) Then .Range("D" & llRow + 1).Value = TextBox6.Value End If .Range("K" & llRow + 1).Value = TextBox7.Value End With End If Dim myCtrl As Control For Each myCtrl In Controls If TypeName(myCtrl) = "TextBox" Then myCtrl.Value = vbNullString End If Next End Sub (ユーザーフォーム) リストボックス1=Sheet1のデータを反映 テキストボックス1(回答日) テキストボックス2(出荷日),テキストボックス3(数量),テキストボックス4(コメント)←1件目 テキストボックス5(出荷日),テキストボックス6(数量),テキストボックス7(コメント)←2件目 ↑1件目のみでコマンドボタンを押した場合は、1件目のみの管理番号取得をしたいのです。が今は、2件目が空欄でも管理番号はとられてしまいます。 長くなってしまいすみません。 どなたかご回答いただければ幸いです。よろしくお願いいたします。

  • エクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセル

    エクセルVBAで、ユーザーボックスを開いたときにテキストボックスにセルの値を自動で表示させたいのですが、うまくいきません。テキストボックスをクリックすると表示されるのですが・・・    Private Sub txt1_Change() Sheets("Sheet1").Range("a1").Value=txt1.Value End Sub としたのですが、やはり間違いなのでしょうか?

  • エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい

    現在顧客名簿シートがあり、修正フォームから顧客情報を修正できるようにマクロを組んでいる最中です。  例えば、textbox1→氏名、textbox2→生年月日、textbox3→住所、としていて、住所のみ変更情報を入力し修正ボタンをクリックすると氏名、生年月日が未入力のため顧客名簿の氏名、生年月日が消えてしまいます。  このような場合、入力がないtextboxのシート転記プログラムを飛ばす、若しくは入力があるtextboxのみシート転記を実施する方法を教えてください。

  • テキストボックスに入力したシートへ移動する

    テキストボックスに入力したのと同じ名前のシートに移動することは出来ますか? 出来るならテキストボックスのオブジェクト名をsheetnameとして、 マクロコードを教えて下さい。

  • エクセルVBAでテキストボックスの値の取得と変更について

    エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。 環境:WindowsXPでオフィス2002 状況: エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C) エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい 試した事: コントロールを配置したシートに次のマクロ TEXTBOX_C.Text = "これはコントロールのテキストボックス" を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。 また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

  • マクロ初心者です。エクセルのあるシートにテキストボックスが2個張り付い

    マクロ初心者です。エクセルのあるシートにテキストボックスが2個張り付いてます。 テキストボックスの番号はわからず任意に変化します。この2つのテキストボックスの番号を取得するマクロを教えて下さい。(テキストボックスの番号とは、テキストボックスを選択した時に名前ボックスに表示される番号のことです。)

  • エクセルVBAで、テキストボックスにセルの値を入れる

    宜しくお願いします。 エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・ 各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか? 進め方としては、データシートからテキストボックスに各項目のデータが表示されたら、シート上でテキストボックスのフォントや位置の微調整が出来るようにしておいて、印刷ボタンをクリックすると印刷され、次へのボタンをクリックすると、次の行のデータがテキストボックスに表示されるようにしたい。 ※印刷する場合は、テキストボックス内の文字のみ印刷(シートには印刷したくない文字書きたいので・・・) また、そのフォームには、パターンが5つあって、データには1行ごとにパターン番号が入力されているとして、それぞれのパターンにあわせたテキストボックスの配置してあるシートへ行くようにもしたい。 データの入れ替わりが多いので、別のワークブックと繋がるような仕組みにしておいて、テキストボックスの配置してあるブック側から、データのあるブックを呼びに行ってデータを取りに行くようにしておきたい。 以上、条件が多くてすみませんが、VBAは初心者で、ほんの部分的にしかまだ分かりません。どなたか詳しい方宜しくお願いします。

  • テキストボックスの番号のことで

    エクセルでテキストボックスを使用するマクロのスクリプトを調べてみると、ActiveSheet.Shapes("Text Box 1").Select等の文からテキストボックスの番号が分かりますが、マクロを調べることなくシート上からテキストボックスの番号を知ることはできるのでしょうか?

専門家に質問してみよう