Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3639 / 13646 ツリー ←次へ | 前へ→

【60996】UserFormのCalenderを使った質問 Porta 09/4/1(水) 21:28 質問[未読]
【61003】Re:UserFormのCalenderを使った質問 neptune 09/4/2(木) 10:42 発言[未読]
【61004】Re:UserFormのCalenderを使った質問 Jaka 09/4/2(木) 10:42 発言[未読]
【61005】Re:UserFormのCalenderを使った質問 neptune 09/4/2(木) 10:57 発言[未読]
【61006】Re:UserFormのCalenderを使った質問 Jaka 09/4/2(木) 11:38 発言[未読]
【61007】Re:UserFormのCalenderを使った質問 neptune 09/4/2(木) 15:38 発言[未読]
【61014】Re:UserFormのCalenderを使った質問 Jaka 09/4/3(金) 12:51 発言[未読]

【60996】UserFormのCalenderを使った質問
質問  Porta  - 09/4/1(水) 21:28 -

引用なし
パスワード
   また質問させていただきます。よろしくお願いします。
余り良い質問ではないかも知れません・・・どうもProfesionalで
ないと出来ないようですが・・・

「ユーザフォームのツールボックスのコントロール」に
その他のコントロールの中の
Calender(Microsoftの綴りが間違っています、正しくは
Calendarですが)を追加しております。

このカレンダーを使い
・・・・2009年3月1日未満の時はMsgBoxでデータの無い旨表示
また2019年3月31日を越える時にMsgBoxでデータの無い旨の表示し
尚且つ、カレンダーもそれ以上動作できないようにしたいのですが、
どのようなコードが適切なのか判断できません。
どなたかアドバイスお願いします。

また当コードを実行すると、
「このアプリケーションは、安全でない可能性があるActiveXコントロールを
初期化しています。・・・・・」が
表示されます。この表示を出さない方法はあるのでしょうか?

Option Explicit

Private Sub Calender1_SelectDateChanged(ByVal year As Integer, ByVal
month As Integer, ByVal day As Integer)
 Dim r As Range
 Dim c As Range, c2 As Range
 Dim n As Integer
 Dim m

  '    [A6]セルに先頭日付
 Set r = Range("A6", Cells(Rows.Count, "A").End(xlUp))
 m = Application.Match(CLng(DateSerial(year, month, day)), r, 1)
 
 On Error Resume Next
 Set c = r.Item(m, 1)
 
 If c.Value < CLng(DateSerial(2003, 4, 1 - 1)) Then
   MsgBox "対象外の日にちです"
   Cells(6, 1).Activate
  ' カレンダーが最小値より小さくならずに止まる方法?
   Calender1.c.Value = False
   Exit Sub
 End If
 
' If c.Value < CLng(DateSerial(2009, 3, 1)) Then
'   MsgBox "対象外の日にちです"
'   Exit Sub
' End If
 
 Set c2 = r.Item(m + 15, 1) ’シートの中央にできるだけ表示
 c.Activate
  Application.Goto Reference:=Range(c2), _
    Scroll:=True
 On Error GoTo 0

End Sub

【61003】Re:UserFormのCalenderを使った...
発言  neptune  - 09/4/2(木) 10:42 -

引用なし
パスワード
   ▼Porta さん:
こんにちは

Calenderコントロールはもう長〜い間使ってないので気が付いた点だけ
>   Calender1.c.Value = False
cは
Dim c As Range
と宣言されているはず。

Calenderコントロールのプロパティ、メソッドにはRangeオブジェクトは
ないはずです。勘でコードを書いてはいけません。調べましょう。
一通り、メソッド、プロパティをご覧になっては如何ですか?

>・・・・2009年3月1日未満の時はMsgBoxでデータの無い旨表示
>また2019年3月31日を越える時にMsgBoxでデータの無い旨の表示し
>尚且つ、カレンダーもそれ以上動作できないようにしたいのですが、
>どのようなコードが適切なのか判断できません。
との事ですが、コードの中にCalender1の現在の日付を取得している
箇所が見当たらないようです。先ずは取得する必要があります。

>「このアプリケーションは、安全でない可能性があるActiveXコントロールを
初期化しています。・・・・・」が
に付いては以下のページで「カレンダー」を検索してみて下さい。
ht tp://office.microsoft.com/ja-jp/access/HA011225981041.aspx

Profesional以外の環境で使う可能性があるなら、カレンダーを
自作することをお勧めします。探せばサンプルは沢山あるような
気がします。(ややこしくて面倒なだけでそんなには難しくはないです。)

【61004】Re:UserFormのCalenderを使った...
発言  Jaka  - 09/4/2(木) 10:42 -

引用なし
パスワード
   ▼Porta さん:
>また質問させていただきます。よろしくお願いします。
>余り良い質問ではないかも知れません・・・どうもProfesionalで
>ないと出来ないようですが・・・
Profesionalというよりアクセスが入っているかどうかだと思いますが...。
とりあえず私の環境では動きはしました。
シートのレイアウト等が良く解ってませんけど。
By 2002のProfesional(たぶん)アクセスあり。

> m = Application.Match(CLng(DateSerial(year, month, day)), r, 1)
    エラートラップしない方が良いと思う。
   ↓ そのままズルズルとエラースキップを引きずるので。
    素直にmの結果を判定した方が良いと思うけど。 
> On Error Resume Next
> Set c = r.Item(m, 1)

【61005】Re:UserFormのCalenderを使った...
発言  neptune  - 09/4/2(木) 10:57 -

引用なし
パスワード
   ▼Jaka さん:
こんにちは

>Profesionalというよりアクセスが入っているかどうかだと思いますが...。
>とりあえず私の環境では動きはしました。
との事ですが、カレンダーコントロールってrangeオブジェクトを配下に
持ってるんですか?

ちょっと確認できないんで。すみません。

【61006】Re:UserFormのCalenderを使った...
発言  Jaka  - 09/4/2(木) 11:38 -

引用なし
パスワード
   ▼neptune さん:
>>Profesionalというよりアクセスが入っているかどうかだと思いますが...。
>>とりあえず私の環境では動きはしました。
>との事ですが、カレンダーコントロールってrangeオブジェクトを配下に
>持ってるんですか?
>
>ちょっと確認できないんで。すみません。
え〜と、意味が良く解りません。
もしかしてイベントとして捕らえているのでしょうか?
私は、単に
Call Calender1_SelectDateChanged(2009, 3, 30)
で、動かしてみただけです。

【61007】Re:UserFormのCalenderを使った...
発言  neptune  - 09/4/2(木) 15:38 -

引用なし
パスワード
   ▼Jaka さん:
こんにちは
ご返答ありがとうございます。

>え〜と、意味が良く解りません。
失礼しました。

>もしかしてイベントとして捕らえているのでしょうか?
イベントかと思ってました。^ ^;;
よく見ると、引数で日付も取得してますね。

>私は、単に
>Call Calender1_SelectDateChanged(2009, 3, 30)
>で、動かしてみただけです。
了解しました。

以下の ←※ ここの部分です。
カレンダーコントロール貼り付けて、見てみましたけどメンバにはないようです。

dim c as range と宣言されています。

 If c.Value < CLng(DateSerial(2003, 4, 1 - 1)) Then
   MsgBox "対象外の日にちです"
   Cells(6, 1).Activate
  ' カレンダーが最小値より小さくならずに止まる方法?
   Calendar1.c.Value = False ←※ここ
   Exit Sub
 End If

【61014】Re:UserFormのCalenderを使った...
発言  Jaka  - 09/4/3(金) 12:51 -

引用なし
パスワード
   ようやくPCが復旧しました。

>dim c as range と宣言されています。
>
> If c.Value < CLng(DateSerial(2003, 4, 1 - 1)) Then
>   MsgBox "対象外の日にちです"
>   Cells(6, 1).Activate
>  ' カレンダーが最小値より小さくならずに止まる方法?
>   Calendar1.c.Value = False ←※ここ
>   Exit Sub
> End If
すみません。
あまりというかほとんどコードを読んでません。
エラーが出るか、でないかの問題なのかな?
と思って、A列に適当な日付を書き込んで、まんまのコードをコピペして、
実行しただけです。

少しまじめにテストしてみると、他にも修正する個所がたくさんありそうですね。
On Error Resume Next
で、エラースキップしているから、他の不具合が見えないのかもしれません。

データの状態がどうなっているのかわからないので、あまり細かくは言えませんけど。

3639 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free