• ベストアンサー

ユーザーフォームの使い方、データ取得で困ってます。

'作業用シート Private Sub CommandButton1_Click() Dim shinaName As String Dim shinaNo As String Dim sName As String Dim cName As String shinaName = InputBox("商品名を入力") shinaNo = InputBox("商品Noを入力") shinaDiv = InputBox("分類") sName = shinaName cName = shinaNo dName = shinaDiv 'ひな形シートをコピーし、シート名を商品名に Sheets("sheetnew").Select Sheets("sheetnew").Copy Before:=Sheets(1) Sheets("sheetnew (2)").Name = sName '各セルに商品名と商品コードを Worksheets(sName).Activate With ActiveSheet .Range("A2") = sName .Range("A3") = cName .Range("A4") = dName End With End Sub 構文が正しいのかわかりませんが、ビギナーなりに作ってみました(^^;; 作業用シートのボタンをクリックし、入力情報をもとに シートを新規追加していくのですが、この作業をInputBoxではなく、 ユーザーフォームを呼び出して、入力作業を1回で終わらせたいのです。 ユーザーフォーム1()内に下記5項目を作りました テキストボックス1() '商品名 テキストボックス2() '商品No リストボックス1() '分類1~3 登録ボタン() キャンセル() コマンドボタン1をクリックし、ユーザーフォーム呼び出しはOKです。 フォーム内のキャンセルボタンも機能します。 登録ボタンをクリックすると、どうもテキスト、リストボックス内容が 読み込めないみたいでエラーします。 sName = shinaName cName = shinaNo dName = shinaDiv このインプットボックスのように、変数にすると構文的(宣言の仕方?)に 駄目なのでしょうか? ユーザーフォームを見真似で作ってみたのですが、 どこに、どうセットして、どう呼び出して? また、入力されたデータをどう取得して、構文に組み込むのか? 、、、なんかこの辺りがゴチャゴチャしてわかりません。 追って説明して頂けると助かります、構文の作り方教えてください。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

>、、、なんかこの辺りがゴチャゴチャしてわかりません。 私は質問がゴチャゴチャしていてわかりにくい 質問の時は、初期の名前を変更しない方がいいよ 変更したらちゃんと書いておかなきゃ、こっちは分からない >'入力データを入れ替え >sName = newsyouhin.TextBox.Text >cName = newcode.TextBox.Text >dName = bunbui.ListBox.Value は TextBox1をnewsyouhin TextBox2をnewcode ListBox1をbunbui と言うことかな、ならば '入力データを入れ替え sName = newsyouhin.Value cName = newcode.Value dName = bunbui.Value で、いけると思うけど

zaikoman3
質問者

お礼

hige_082さん、ありがとうございます。動きました! 誠勝手な質問に応えて頂きほんとに感謝します。 回答していただける側に立って、質問の仕方も考えなくてはと反省です。 また、お世話になると思いますが、お願いします。

その他の回答 (1)

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

ながながと我流のやり方を書いていると思う。 VBAのコントロールの解説例でも見ましたか。 ーー フォームにテキストボックスを3つつくり ("商品名を入力") ("商品Noを入力") ("分類") の入力用とし、シート追加用コマンドボタンを1つ用意する。 ーー コマンドボタンをクリックしたら シートを追加し、追加したシートの TextBoa1.Text-->A2 TextBoa1.Text-->A3 TextBoa1.Text-->A4 へセットする。 こういう考えで考え直しては? また 入力終了は、終了用ボタンを1つ追加とか、商品名に特別な文字列を入れて追加用コマンドボタンをクリックすると終了するような方法が考えられる。 シートを増やすのはSheets.Addが普通では。

zaikoman3
質問者

補足

>シートを増やすのはSheets.Addが普通では > 商品シートに共通する数式、レイアウトや単価等があり、 商品名とコードのみを変えれば使えるので、テンプレートとしてコピさせました。 Addを使っての他の方法があり、同様シートが作れればそれはそれでいいのですが、、、 もう一度、構文まとめてみました 作業用シート内でユーザーフォーム呼び出し Private Sub CommandButton2_Click() UserForm1.Show End Sub --------------------------------- ////////////////////////////////////// 'ユーザーフォーム内 Private Sub CommandButton1_Click() '登録ボタン Dim sName As String Dim cName As String Dim dName As String 'ひな形シートコピー Sheets("sheetnew").Select Sheets("sheetnew").Copy Before:=Sheets(1) '入力データを入れ替え sName = newsyouhin.TextBox.Text cName = newcode.TextBox.Text dName = bunbui.ListBox.Value 'シート名変更 Sheets("sheetnew (2)").Name = sName Sheets(sName).Select 'シート内入力データセット Worksheets(sName).Activate With ActiveSheet .Range("c2") = sName .Range("c3") = cName .Range("d4") = dName End With End Sub ------------------------------- Private Sub CommandButton2_Click() Unload Me 'キャンセル End Sub ------------------------------- Private Sub newsyouhin_Change() '商品名 End Sub ------------------------------- Private Sub newcode_Change() '商品コード End Sub ------------------------------- Private Sub bunrui_Change() '分類選択 Dim dName As String dName = bunrui.value End Sub ------------------------------- Private Sub UserForm_Initialize() With bunrui .AddItem "分類1" .AddItem "分類2" .AddItem "分類3" End With End Sub ////////////////////////////////////// ------------------------------ 入力データ入れ替えでエラします 構文の具体的に何処がいけないのかご指摘して頂けると 勉強になりますm(_ _)m