|    | 
     ▼VBA初心者 さん: 
おはようございます。 
>次のような処理がしたいのですが、うまく動きません 
いくら初心者でもユーザーフォームの基本的な動作は 
学ばなければ動くものも動きませんよ!! 
 
>2.特定のシートをコピーし、取得した値+日付をシートネームとする 
↑一言で言うと、やりたいことはこれですね!! 
 
これを実現する材料として、ユーザーフォームにコンボボックスを 
貼り付けてある、ということですね!! 
 
>Private Sub UserForm_Initialize() 
このプロシジャーは、ユーザーフォームの初期設定を行う 
プロシジャーです。 
 
コンボボックスの選択メンバを登録するのは、良いですが、 
まだ、ユーザーが何もしていないのに 
シートをコピーするコードが記述されていますが、これいかに? 
(もっとも sheetnameには何も入っていないので何もしませんが) 
 
まず、仕様を明確しましょう。コードなんかその後です。 
 
まず、ユーザーフォーム(UserForm1)に配置するコントロールは、コンボボックスだけですか? 
 
>取得した値+日付をシートネームとする 
取得した値というのは、コンボボックスで選択したデータのことですね!! 
日付を InputBox("作成日を入力して下さい") で取得しているようですが、 
このユーザーフォーム上にテキストボックスを配置して、日付入力をしてもらう方が 
簡単ですよね? 
よって、ユーザーフォーム上にテキストボックスを配置してください 
(TextBox1)。 
 
 
品種の選択を行い、テキストボックスに日付を入力し、 
ユーザーフォーム上にあるコマンドボタンをクリックしたら、 
入力されたデータを基に 
 
>特定のシートをコピーし、取得した値+日付をシートネームとする 
 
これを行えば良いですね 
 
ということで ユーザーフォーム上にコマンドボタンも配置してください 
(CommandButton1) 
 
 
1 品種リストの作成 
  品種と言うデータをコンボボックスで選択させるのですが、 
  この品種データをコードの中に直接 
 
  myData(0, 0) = "25RF 80mA" 
 
  このように設定していますが、これだと 
  品種が増えたり、減ったり、内容に変更があったりする度に 
  プログラムコードを修正しなければなりませんよね? 
  データの増減などでは、プログラムを触らなくても良いような 
  つくりにしなければなりません。 
 
  品種リストを適当なワークシートを作成し、 
  そこに作成するようにします。 
  例 
  シート名 品種リスト 
 
     A 
  1 品種 
  2 25RF 80mA 
  3 23RR 25mA 
   ・ 
   ・ 
  
  一行目は、データではなく、項目名にてください。 
  Excelでは、そのようにしておく方が何かと便利ですから・・・・。 
 
  このように品種のデータをシートに配置しておけば・・・、 
 
Private Sub UserForm_Initialize() 
  Dim rng As Range 
  With Worksheets("品種リスト") 
    Set rng = .Range("a2", .Cells(.Rows.Count, "a").End(xlUp)) 
  End With 
  If rng.Row > 1 Then 
    With ComboBox1 
     .Clear 
     .Style = fmStyleDropDownList 
     .List = rng.Value 
    End With 
  End If 
End Sub 
 
こんなコードでコンボボックスに選択メンバを登録できます。 
 
まずは、コンボボックスに選択できる品種を登録するところまで 
正常に作動するようにしてみください。 
 
 | 
     
    
   |