質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1802閲覧

VBA 引用サイトで作成されているユーザフォーム上にあるコンボボックスの値を取得したい。

King_of_Flies

総合スコア382

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/10/17 05:10

お疲れ様です。

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を取得しているようなところがなく、
どのオブジェクト参照で、ユーザフォームのコンボボックスの値が取れるのか不明な状態です。

日付の取得方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

参照すべきオブジェクトの誤りでした。
clsDTPCBox(1).Valueで日付の取得ができました。

投稿2017/10/17 05:17

King_of_Flies

総合スコア382

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問