- ベストアンサー
ActiveRowをコントロールする方法
- エクセル2007を使用しています。ユーザーフォームのコードに以下のコードを書いてシートのセル情報をユーザーフォームに表示したいと考えています。
- 以下のコードでは「ActiveRow」の指定が固定になってしまうので、ユーザーフォームに「NEXT」ボタンを追加して、NEXTボタンが押されたら「AcviveRow」を一つずつ増やして表示させるという方法を教えていただけないでしょう。
- VBA素人です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
No8996914の質問はInitializeイベントだけの問題点で解決したのか? そうは思わないが、解決したのなら、そちらは締め切っるべきと思う。 ーー ・一旦変数に入れて(Data1など)、TextBox5単価.Text に代入する尾は回りくどい。 ・ActiveRow はありそうな名前であるが(実はシステムにはない)、VBAシステムで、たとえばActiveCellは存在する名前なので、変数名の命名に注意したほうがよい。 ・繰り返しならForNextなどでコード数を少なくしたら。 そのためにはDataXとやると邪魔(やりにくく)になる。 ・標準的なVBAの解説書のコントロールの解説箇所を1度読んで勉強したら。VBAの本はどれくらい読みましたか。 普通のVBAにも慣れて無いのに、いきなりむつかしいこと(フォームやコントロールのこと、イベントのこと、変数のスコープなど)を、やろうとしていることが、コードの記述振りからうかがえる。 ーー 想定シートデータ例 Sheet1のA1:C4に 9999988 石井 一郎 福島本町 3456111 大下 満 郡山市南町 3440000 田中 宗男 仙台市 3233230 木村 義男 山形市 ユーザーフォーム1にコマンドボタン1つとテキストボックス3つ貼り付け。 UserFormのコードの表示へ下記貼り付け。 Dim arow Private Sub CommandButton1_Click() arow = arow + 1 Me.TextBox1 = Worksheets(1).Cells(arow, 1) Me.TextBox2 = Worksheets(1).Cells(arow, 2) Me.TextBox3 = Worksheets(1).Cells(arow, 3) End Sub 標準モジュールに Dim arow ’<-ー最初のモジュールが始まる前の行に置くこと Sub test08() arow = 1 UserForm1.Show End Sub ーー 上記は、もし最初の表示において、シートの第1行目を出すなら Sub test09() arow = 1 With UserForm1 .TextBox1 = Worksheets(1).Cells(arow, 1) .TextBox2 = Worksheets(1).Cells(arow, 2) .TextBox3 = Worksheets(1).Cells(arow, 3) End With UserForm1.Show End Sub test09を実行後,ユーザーフォームが表示され、その上のコマンドボタンをクリックすると 順次、次行のシートのデータが表示されると思う。
お礼
imogasi様 回答ありがとうございました。 ご指摘の通りVBA初心者でインターネットをあさってコードのコピーで書いていました。 「プロシージャーの呼び出し」という言葉も理解していない状態でした。 反省しております。 サンプルコードありがとうございます。 コードの理解を含めて参考書を探して勉強いたします。 mt2008様もありがとうございました。