お疲れ様です。
http://www.asahi-net.or.jp/~ef2o-inue/download/sub09_020_020.html
上記、表題の引用サイトになります。
このサイトではVBAでカレンダーをコンボボックスにはめ込むということをしています。
私はこれを少しいじってユーザフォーム上で選択されたコンボボックスの値を、
ユーザフォーム上にもう一つボタンを作成して、
そのボタンを押下した際にセルへ転記するよう変更を加えたいと考えいろいろ試してみました。
ほぼほぼモジュールには変更を加えておりません。
変えたことといえば、ユーザフォームのコンボボックスの数を3つから一つにしたことと、オブジェクト名を変更したことくらいです。
vba
1Option Explicit 2 3Private Sub Insert1_Click() 4' Range("B3").Value = CalendarBox1.Value 5End Sub 6 7Sub UserForm_Initialize() 8 Dim colCmbBox As New Collection 9 Dim IX As Integer 10 11 ' DTPickerが載るTextBoxのコレクションを作成 12 With colCmbBox 13 .Add Item:=CalendarBox1 14 End With 15 16 For IX = 1 To g_lngComboBox_Max 17 ' クラスインスタンス生成 18 Set clsDTPCBox(IX) = New clsDTPickerOnComboBox 19 With clsDTPCBox(IX) 20 .Cmd = colCmbBox(IX) 21 .UserForm = Me 22 .Create ' DTPickerを生成 23 End With 24 Next IX 25End Sub 26 27Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 28 ' クラスインシタンス廃棄 29 Call GP_DestroyClass_ALL(Me) 30End Sub 31
VBA
1Option Explicit 2Option Base 1 ' ←注 3 4' DateTimePickerが載るTextBoxオブジェクトの配列要素数最大値 5Public Const g_lngComboBox_Max = 1 6' クラスの宣言 7Public clsDTPCBox(1 To g_lngComboBox_Max) As New clsDTPickerOnComboBox 8 9' クラスの廃棄 10Public Sub GP_DestroyClass_ALL(objForm As UserForm) 11 Dim IX As Integer 12 13 For IX = 1 To g_lngComboBox_Max 14 clsDTPCBox(IX).Destroy 15 Set clsDTPCBox(IX) = Nothing 16 Next IX 17End Sub 18
上記変更を加えたことによる動作不備はなく、
コンボボックス押下でサイトで記述されているようなカレンダーが表示され、
カレンダーの選択日付に応じて、コンボボックスのテキスト欄にその日付が挿入されるようになっています。
ここで不明な点なのですが、
このコンボボックスのテキスト欄に値が入っているので、
テキストボックス(オブジェクト名:CalendarBox1)の値を取得して、
セルに書き込みたいというとても単純なことなのですが、
これで取れるだろうと、Range("A1").Value = CalendarBox1.Valueのような記述をしてみましたが、セル内に値が入ることはなく、
Debugで確認すると、CalendarBox1.Valueは””でした。
もちろん、CalendarBox1というオブジェクトは、ユーザ補助機能による入力をしたので、存在しているはずです。
ほかにも
.Textや.List、.NameなどのCalendarBox1のオブジェクトをいろいろ出力してみたのですが、肝心の日付は見つかりませんでした。
もしかして参照しているオブジェクトそのものが誤っているのかと思いましたが、サイト内のコードを見てValueを取得しているようなところがなく、
どのオブジェクト参照で、ユーザフォームのコンボボックスの値が取れるのか不明な状態です。
日付の取得方法を教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。