• 締切済み

エクセルVBAのカレンダーコントロールの件で

エクセルVBAを使用して リストボックスかコンボボックスかテキストボックスかを クリックするとカレンダーコントロールが呼び出されて カレンダーコントロールの日付をクリックすると カレンダーコントロールは閉じその値が上記2行目いずれかに 入力されるようにすることは可能なのでしょうか いろいろ文献を探してみたのですがよくわからずじまいでした よろしくお願いします

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#02です。 ユーザフォームに二つのテキストボックスと、一つのカレンダーコントロールを配置し、クリックしたテキストボックスに日付を返す方法です。変数を使ってテキストボックス名を引き渡しています Dim tBox As String Private Sub UserForm_Activate() UserForm1.Calendar1.Visible = False End Sub Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) tBox = "TextBox1" UserForm1.Calendar1.Visible = True End Sub Private Sub TextBox2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) tBox = "TextBox2" UserForm1.Calendar1.Visible = True End Sub Private Sub Calendar1_Click() UserForm1.Controls(tBox).Text = Calendar1.Value Calendar1.Visible = False End Sub

回答No.3

#1です。 > テキストボックスが多数あるとき、カレンダーのフォームを1つで > 済ます方法 コントロールツールボックスやフォームのテキストボックスの場合は わかりませんが、一般のテキストボックスを使用するなら、 1.標準モジュールに以下を記述します。  Public TB  Sub ShowCalendar()   TB = ActiveSheet.Shapes.Range(Application.Caller).Name   UserForm1.Show  End Sub  Sub WriteData()   ActiveSheet.Shapes(TB).Select   Selection.Characters.Text = _        UserForm1.Calendar1.Month & "月 " _        & UserForm1.Calendar1.Day & "日"  End Sub 2.カレンダーコントロールを作成したユーザーフォームのコードとし  て以下を記述します。  Private Sub Calendar1_Click()   Application.Run "WriteData"   Unload Me  End Sub 3.それぞれのテキストボックスを右クリックし、"マクロの登録"から  ShowCalendar を指定します。 で、 テキストボックスをシングルクリックするとカレンダーが表示されま すので、日付を選択します。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

ユーザフォームに適すとボックスとカレンダーコントロールを配置します。カレンダーコントロールは「ユーザフォームシートを開く」→「ツール」→「その他のコントロール」→「カレンダーコントロールにチェック」しないと表示されませんが、そこまではできていますか? 後はユーザフォームのモジュールシートに以下のマクロを貼り付けます。UserForm1.Show でフォームを呼び出して、テキストボックスをクリック(正確にはMouseDown)して見てください。 Private Sub UserForm_Activate()  UserForm1.Calendar1.Visible = False End Sub Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  UserForm1.Calendar1.Visible = True End Sub Private Sub Calendar1_Click()  TextBox1.Text = Calendar1.Value  Calendar1.Visible = False End Sub TextBoxを経由すると日付は文字列型になりますので注意してください

noname#64918
質問者

お礼

VBAをはじめて2日目なので変数がちょっと難しいですが 勉強して実践してみたいと思います このやり方も試してみたいと思います どうもありがとうございます

noname#64918
質問者

補足

カレンダーコントロール表示まではできています >後はユーザフォームのモジュールシートに以下のマクロを貼り付けます。 >UserForm1.Show でフォームを呼び出して、テキストボックスをクリック >(正確にはMouseDown)して見てください。 このやり方も試してみたいと思います どうもありがとうございます

回答No.1

適当に操作してみた結果ですが、とりあえず参考まで―― <案1> 1.コントロールツールボックスのテキストボックスをシート上に作成。 2.ユーザーフォーム上にカレンダーコントロールを作成。 3.以下のモジュールを作成。 4.テキストボックスのダブルクリックで表示される画面に以下を記述。  Private Sub TextBox1_DblClick(ByVal Cancel _      As MSForms.ReturnBoolean)   UserForm1.Show  End Sub 5.ユーザーフォームのコードとして以下を記述。  Private Sub Calendar1_Click()   ActiveSheet.TextBox1 = Calendar1.Month & "月 " _      & Calendar1.Day & "日"   Unload Me  End Sub <案2> 1.コントロールツールボックスのテキストボックスとカレンダーコン  トロールをシート上に作成。 2.シートモジュールとして以下を記述。  Private Sub TextBox1_DblClick(ByVal Cancel _ As MSForms.ReturnBoolean)   ActiveSheet.OLEObjects.Add(ClassType:="MSCAL.Calendar.7", _   Left:=200, Top:=20, Width:=200, Height:=150).Select  End Sub  '  Private Sub Calendar1_Click()   TextBox1 = Calendar1.Month & "月 " & Calendar1.Day & "日"   Calendar1.Cut  End Sub いずれも、テキストボックスのダブルクリックでカレンダーコントロ ールが表示されます。 ただし、案2の場合は、コントロールツールボックスを表示させてお き、デザインモードをいったんオンにしてからオフにしないと、カレ ンダーコントロールがクリックできないようです。

noname#64918
質問者

お礼

回答ありがとうございます 案1でやってみたところうまくいきました 案2も試して見たいと思います

noname#64918
質問者

補足

>misatoannaさん 回答ありがとうございます 案1でやってみたところうまくいきました テキストボックスがたくさんあるとき カレンダーのフォームもたくさん作ってみたのですが 1つで済ます方法とかもあるのでしょうか?

関連するQ&A

専門家に質問してみよう