2

イベントの日付に基づいて MySQL データベースから特定のイベントをピックアップする Excel 2010 の VBA スクリプトに取り組んでいます。データベースの日付は "yyyy-mm-dd hh:mm:ss" に保存されます。私のユーザーは、関心のあるイベントをフィルター処理するために、開始日から終了日までの範囲を使用します。簡単にするために、範囲に 2 つのカレンダー コントロール (mscal.ocx) を使用します。カレンダーをクリックするたびに、次のようなクエリ文字列のデータを取得するセルを自動的に更新するように、2 つの単純なサブルーチンを作成しました。

Private Sub Calendar1_Click()

Dim date1, datetime1, time1 As Date

Cells(29, 10) = CDbl(Calendar1.Value)
Cells(29, 10).NumberFormat = "yyyy-mm-dd"
Cells(30, 10).NumberFormat = "hh:mm:ss"
Cells(31, 11).NumberFormat = "yyyy-mm-dd hh:mm:ss"

date1 = Cells(29, 10)
time1 = Cells(30, 10)
datetime1 = date1 & " " & time1
Cells(31, 10) = datetime1


Cells(29, 10).Select

End Sub

Private Sub Calendar2_Click()

Dim date2, datetime2, time2 As Date

Cells(29, 11) = CDbl(Calendar2.Value)
Cells(29, 11).NumberFormat = "yyyy-mm-dd"
Cells(30, 11).NumberFormat = "hh:mm:ss"
Cells(31, 11).NumberFormat = "yyyy-mm-dd hh:mm:ss"

date2 = Cells(29, 11)
time2 = Cells(30, 11)
datetime2 = date2 & " " & time2
Cells(31, 11) = datetime2


Cells(29, 11).Select
End Sub

それは、カレンダー コントロールによって指定された形式 (dd/mm/yyyy) を yyyy-mm-dd に変更するという、私がやりたいことをほぼ実行します。はい、ほぼ、日の値が 1 から 12 の間でのみ機能するため、日時セルは「yyyy-mm-dd hh:mm:ss」として適切に表示されます。13 ~ 31 日の値の場合、datetime セルはフォーマットされず、代わりに「dd/mm/yyyy hh:mm:ss」として表示されます。

ここで、セル 29,10 および 29,11 は日付に関係なく常に適切な形式 (yyyy-mm-dd) を持っていることに注意してください。問題はセル 31,11 および 31,10 にあります。

ここで、セルをダブルクリックし、カーソルを点滅させてEnterキーを押すと、フォーマットが実行され、フォーマットが適切なフォーマットに変更されます(13から31の間の日の値でも)。ただし、これの目的はすべてを可能な限り自動化することであるため、実際には解決策ではありません。必要に応じてファイルを添付できます。なぜなら、特定の値では機能し、他の値では機能しないというのは少しばかげているように聞こえるからです。

助けてください !

編集 ::

わかりました、迅速な回答をありがとうございます。私はあなたの解決策を確認しました。それで、最初に戻りました。使用する

Private Sub CommandButton1_Click()

Dim date1, date2, datetime1, datetime2, time1, time2, time3 As Date

date1 = Cells(29, 10)
time1 = Cells(30, 10)
datetime1 = Format(date1, "dd/mm/yyyy") & " " & Format(time1, "hh:mm:ss")
Cells(31, 10) = datetime1

End Sub

うまく機能しますが、セルの値など、日の値が1から12の場合にのみ機能します

日にち

2012-09-12

時間

15:00:00

答えは私が望む通りです。

日付時刻

2012-09-12 15:00:00

しかし、日の値を 13 から 31 の 12 より上に設定するとすぐに、正常に動作しなくなり (そう、それがいかにばかげているかはわかります)、代わりに得られる結果は次のとおりです。

日付時刻

2012/09/13 15:00:00

どんな提案も大歓迎です...

4

5 に答える 5

3

Format()関数を使用する

Format("17/07/2012", "yyyy-mm-dd")

結果は2012-07-17

于 2012-07-02T16:04:12.710 に答える
3

遅すぎることはわかっていますが、月 (MM) と分 (mm) を区別する必要があると思います...だから、これを試してください...

Format(yourDateObj, "yyyy/MM/dd hh:mm:ss");

お役に立てれば..:)

于 2012-11-27T06:36:19.013 に答える
1

代わりにフォーマット ("mm/dd/yyyy") を試してください。

于 2012-07-06T12:44:01.713 に答える
1
Private Sub testje()

Dim date1, date2, datetime1, datetime2, time1, time2 As Date

date1 = Cells(1, 1)
time1 = Cells(1, 2)
datetime1 = Format(date1, "dd/mm/yyyy") & " " & Format(time1, "hh:mm:ss")

Cells(2, 1) = datetime1

End Sub

うまくいくようです。.. それ以外の場合は、Excel の範囲形式を定義 "dd/mm/yyyy uu:mm:ss" でカスタムに設定します。

于 2012-07-05T11:56:22.620 に答える