電子書籍の厳選無料作品が豊富!

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

A 回答 (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
    • good
    • 0

#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 を指定します。

で、
テキストボックスをシングルクリックするとカレンダーが表示されま
すので、日付を選択します。
    • good
    • 0

ユーザフォームに適すとボックスとカレンダーコントロールを配置します。

カレンダーコントロールは「ユーザフォームシートを開く」→「ツール」→「その他のコントロール」→「カレンダーコントロールにチェック」しないと表示されませんが、そこまではできていますか?

後はユーザフォームのモジュールシートに以下のマクロを貼り付けます。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を経由すると日付は文字列型になりますので注意してください

この回答への補足

カレンダーコントロール表示まではできています

>後はユーザフォームのモジュールシートに以下のマクロを貼り付けます。
>UserForm1.Show でフォームを呼び出して、テキストボックスをクリック
>(正確にはMouseDown)して見てください。

このやり方も試してみたいと思います
どうもありがとうございます

補足日時:2007/07/26 16:20
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/26 16:27

適当に操作してみた結果ですが、とりあえず参考まで――


<案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の場合は、コントロールツールボックスを表示させてお
き、デザインモードをいったんオンにしてからオフにしないと、カレ
ンダーコントロールがクリックできないようです。

この回答への補足

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

補足日時:2007/07/26 15:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/26 16:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!