Excel VBA質問箱 IV

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

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


4759 / 13644 ツリー ←次へ | 前へ→

【54627】日付でエラーを返す方法 小次郎 08/3/24(月) 23:48 質問[未読]
【54630】Re:日付でエラーを返す方法 じゅんじゅん 08/3/25(火) 7:42 発言[未読]
【54633】Re:日付でエラーを返す方法 小次郎 08/3/25(火) 9:30 質問[未読]
【54637】Re:日付でエラーを返す方法 VBWASURETA 08/3/25(火) 10:41 発言[未読]
【54636】Re:日付でエラーを返す方法 VBWASURETA 08/3/25(火) 10:38 回答[未読]
【54641】Re:日付でエラーを返す方法 Jaka 08/3/25(火) 11:09 発言[未読]

【54627】日付でエラーを返す方法
質問  小次郎  - 08/3/24(月) 23:48 -

引用なし
パスワード
   ただいま契約書の台帳を作成しております。
そこでユーザーフォームにテキスト等で入力してもらい、
登録ボタンを押すとシートに反映するようにしております。
しかし、日付の"Format,(Date, "yy/mm/dd")"の所で
プロジェクトまたはライブラリが見あたらないと言われます。
何故ですか?

Private Sub UserForm_Initialize()

   'フォームが最初に表示された時の初期設定の状態を設定
   テキスト契約番号 = ""
   テキスト契約先名 = ""
   テキスト担当者名 = ""
   テキスト作成者名 = ""
   テキスト採番日.Text = Format(Date, "yy/mm/dd")
   テキスト契約先名.SetFocus
   
End Sub

あともう1つ。
テキスト採番日のところに決してありえない日付を入れても、
その通り反映されてしまいます。
テキストだから仕方ありませんが、
これに対して日付ではない場合反映させない等の何かありませんか?

Private Sub コマンド登録_Click()
 'A列の最終行をチェックし、そこにDを入力します。
  Range("a65536").End(xlUp).Offset(1).Select
  Selection = "D"
 
 'B列(番号)の最終行をチェックし、そこに通し番号を入力します。
  Range("b65536").End(xlUp).Offset(1).Select
  Selection = 108000# + Selection.Row - 2

 'C列(契約先名)にテキストボックスの契約先名を入力します。
  Selection.Offset(, 1) = テキスト契約先名
  
 'D列(採番日)にテキストボックスの採番日を入力します。
  Selection.Offset(, 2) = Format(テキスト採番日, "mm/dd/yy")

 'E列(担当者名)にテキストボックスの担当者名を入力します。
  Selection.Offset(, 3) = テキスト担当者名

 'F列(作成者名)にテキストボックスの作成者名を入力します。
  Selection.Offset(, 4) = テキスト作成者名

 'G列(備考)にテキストボックスの備考を入力します。
  Selection.Offset(, 5) = テキスト備考
  
 '入力したコントロールの値を初期化します。(元に戻します。)
  テキスト契約先名 = ""
  テキスト担当者名 = ""
  テキスト作成者名 = ""
  テキスト備考 = ""
  テキスト採番日.Value = Format(Date, "yy/mm/dd")
  テキスト契約先名.SetFocus

End Sub

【54630】Re:日付でエラーを返す方法
発言  じゅんじゅん  - 08/3/25(火) 7:42 -

引用なし
パスワード
   >日付の"Format,(Date, "yy/mm/dd")"
Format(Date, "yy/mm/dd")

書き込み時のミスなのかな?

【54633】Re:日付でエラーを返す方法
質問  小次郎  - 08/3/25(火) 9:30 -

引用なし
パスワード
   >じゅんじゅんさん

あ。書き込み時のミスです。
もしかしてFormat(Date, "yy/mm/dd")ってXPとか2000とかによって
何か制限的なものが変わったりするのですか?
XPだとDateでエラーになるのですが、
2000だと問題なく動いたのですが。

【54636】Re:日付でエラーを返す方法
回答  VBWASURETA  - 08/3/25(火) 10:38 -

引用なし
パスワード
   おはようございます。

データ入力のシステムを構築する場合、
当然なのですが登録前に妥当性チェックを入れます。

必須項目、正確なデータかをチェックして
OKであれば登録に進むようにします。

たとえば

Private Sub コマンド登録_Click()
  'チェックが通らない場合は登録しない
  if CheckData() = False Then
   Msgbox "正しくありません"
   Exit Sub
  End if

'*** 以下が登録処理とします(省略) ***

End Sub

'項目チェック関数
Function CheckData() As Boolean
  Dim bcheck As Boolean
  bcheck = True

  '項目1
  if Textbox1.text = "" then
   bcheck = False
  End if

  '項目2
  if Textbox2.text = "" then
   bcheck = False
  End if

  '項目3
  if Not IsDate(Textbox2.text) then
   bcheck = False
  End if

  ChackData = bcheck
End Function

こんな感じに事前にチェックを入れるようにします。

【54637】Re:日付でエラーを返す方法
発言  VBWASURETA  - 08/3/25(火) 10:41 -

引用なし
パスワード
   >XPだとDateでエラーになるのですが、
>2000だと問題なく動いたのですが。

横から失礼します。
いいえ、自分もxpの2000ですが普通にそれで使えます。
それはただサービスパックやWindows Updateの問題だけでは?
バージョン一致してますか?

【54641】Re:日付でエラーを返す方法
発言  Jaka  - 08/3/25(火) 11:09 -

引用なし
パスワード
   ▼小次郎 さん:
>しかし、日付の"Format,(Date, "yy/mm/dd")"の所で
>プロジェクトまたはライブラリが見あたらないと言われます。
>何故ですか?
ライブラリが見当たらないのエラーメッセージの原因は解りませんが、
何となく思い当たる節。
コントロールパネル、地域での表示設定状態で想定外のことが起きるから、
もっぱら、私は Now() を使ってます。

追伸、
どうやって使っているのか解りませんが、2桁年号は止めておいた方が良いです。
私だったら、場合によっては却下ですね。

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