• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザーフォームからワークシートへの転記について)

ユーザーフォームからワークシートへの転記について

このQ&Aのポイント
  • エクセルVBAの初心者がユーザーフォームからデータベースへの転記のコードを記述しましたが、CelDataのところでコンパイルエラーが発生しています。
  • 質問文章の主な内容は、CelDataのコンパイルエラーの修正方法とユーザーフォームからワークシートへの転記ができるかどうかです。
  • 質問に関するオブジェクト名は、「入力No.」=TextBox3、「入力日」=txtdate、「データベース入力」=CommandButton3

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1です。 ーー 私が言っているのわかってないようだ。 例えば ユーザーフォームに テキストボックス1つ コマンドボタン1つ(クリックイベントでも良いがこちらにする) (これら部品2つはコントロールといわれる。) を設ける。 ーー Private Sub CommandButton1_Click() rowpos = rowpos + 1 MsgBox rowpos Worksheets("Sheet1").Cells(rowpos, "A") = TextBox1.Value End Sub をつくり実行すると テキストボックスにaと入れてボタンクリックーー>A1がaになる。 テキストボックスにbと入れてボタンクリックーー>A1がbになる。 こン名ことの繰り返しで良いのか・ ーー 私が rowpos = Worksheets("Sheet1").Range("A10000").End(xlUp).Row と入れた意味を無視している。 rowpos という変数の有効性の場面を考える必要がある。

dradra33
質問者

お礼

たびたびのご回答ありがとうございます。 imogasiがANo.1のコードの通り、改めてユーザーフォーム及び コードを作成するとデータベース形式で入力ができ、 常に最下行にテキストが入力できるようになりました。 rowpos = Worksheets("Sheet1").Range("A10000").End(xlUp).Row というコードの意味が良く分かりました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

質問文は長いが (1)「フォームのコントロールの構成  が不明 txtdate はテキストボックスなのか、外のものか。 (2)フォームにはデータ入力後表示するのか >ユーザーフォームからデータベースへの転記の・・ とあるが、フォーム入力ーー>シート転記なら、 クリックごとにシートに書き出す行が1行下をさす(か最終行の次の行)を指さないとならないが それらしいコードが無い。 根本的に欠陥は無いか?クリック1回するごとにRowPosなどは前回の値とは無関係になるが。 この間の変数地の受け渡しは、初心者には難しい。 本件VBAの学習として、背伸びしすぎだと思う。 (3)フォームにデータを入力後、シートにそれらデータを転記するのか 根本的なことが文章で説明されて無い。 そうでないなら毎回繰返して、CelDataという1つの変数に何回も値を代入して、セルにセットはしないのか。 フォームに表示だけか? ーー 一例 フォーム テキストボックス1  番号入力用 テキストボックス2  日付用 テキストボックス3  その他データ用 入力用のボタンを1つ設けボタンのクリックにしたほうが良いのでは? ーー Private Sub UserForm_Click() 'Private Sub データベース入力_Click() rowpos = Worksheets("Sheet1").Range("a10000").End(xlUp).Row 'データ最終行の取得 ColPos = 1 'A,B,C・・で指定したほうがわかりやすいのでは rowpos = rowpos + 1 With Worksheets("Sheet1") .Cells(rowpos, ColPos) = TextBox1.Value 'A列 .Cells(rowpos, ColPos + 1) = TextBox2.Value 'B列 .Cells(rowpos, ColPos + 2) = TextBox3.Value 'C列 End With End Sub

dradra33
質問者

お礼

ご回答ありがとうございます。 補足質問についてもご確認いただければ幸いです。 よろしくお願い申し上げます。

dradra33
質問者

補足

いつもご指摘ありがとうございます。 また拙い説明ながらお付き合いいただきありがとうございます。 imogasi様のご確認について以下の通りお答え申し上げます。 >(1)「フォームのコントロールの構成  が不明 >txtdateはテキストボックスなのか、外のものか。 txtdateはユーザーフォームの一部を構成する テキストボックスで、オブジェクト名をtxtdateにしています。 >(2)フォームにはデータ入力後表示するのか 原則は開発タブ→マクロ→マクロ実行後に ユーザーフォームを表示させリストボックス、テキストボックス等に 入力してていきます。 ただし「入力No.」と「入力日」は初期値を 表示させておいて、他の項目の入力が完了したときに同時に転記します >(3)フォームにデータを入力後、シートにそれらデータを転記するのか ご推察の通り、フォームにデータを入力後、シートにそれらデータを転記します。 転記の完了後は新しい番号で、「入力No.」と「入力日」以外は空白のユーザーフォームを 表示させて、再度、入力→転記の作業の繰り返しを行うつもりです。 初心者には難しいことなのは、重々承知ですが、 ひとつひとつ問題をクリアしていこうと思っています。 それで今回はフォームからワークシートへの転記作業の コードを記述しようと思い、質問しました。 imogasi様から頂いた例に基づきコードを 以下の通り、書き換えをしてみました。 エラーやデバックはなかったものの、 「入力No.」と「入力日」のワークシートへの 転記ができませんでした。 先のご回答でヒントが含まれているのかも知れませんが、 何分初心者でimogasi様の意図が読み切れていないと 思います。たびたびの質問で恐縮ですが、 再度ご教示いただければ幸いです。 以上よろしくお願い申し上げます。 Private Sub UserForm_Initialize() TextBox3.Value = 1 txtdate = Date End Sub Private Sub データベース入力_Click() rowpos = Worksheets("柴田8月分").Range("a10000").End(xlUp).Row ColPos = 1 rowpos = rowpos + 1 With Worksheets("柴田8月分") .Cells(rowpos, ColPos) = TextBox3.Value .Cells(rowpos, ColPos + 1) = txtdate.Value End With End Sub

関連するQ&A