2

8月中旬に作成したスプレッドシートがあり、それ以降、毎日1列のテーブルがあります。列ヘッダーはその日の日付です。日付はどのように表示したいかが表示されます: "dd / mm / yyyy"

ただし、作業を実行するためにこれらの日付を読み取る必要があるマクロがあります。テーブルを使用しているため、日付は5桁の数字ではなくテキストとして保持されているようです(ヘッダーセルの形式を「一般」に設定すると、「dd / mm /yyyy」形式のままになります) 5桁の数字に変更します。これは、9月1日まで問題ではありませんでした。その後、CDate(マクロ内)はこれらの日付を「mm / dd/yyyy」として読み取り始めました。

CDateにアメリカではなくオーストラリアの日付形式を認識させる方法はありますか?または、それができない場合は、テーブルヘッダーをテキストではなく日付のままにしますか?マクロはテーブル属性、ListColumnsなどを使用するように設計されているため、テーブルを範囲に戻す必要はありません。

アップデート:

問題を絞り込みました。日付ではなく、ListColumn.Nameプロパティです。どういうわけかそれは私の日付を再変換しています。私はFormat()次のように日付形式を設定するために使用しています:

CreateHistoryColumn.Name = Format(headerDate, "dd/mm/yyyy")

MsgBox Day(headerDate) & "/" & Month(headerDate) & "/" & Year(headerDate)
MsgBox Format(headerDate, "dd/mm/yyyy")
MsgBox CreateHistoryColumn.Name

CreateHistoryColクラスのオブジェクトはどこにありますかListColumn。3つのMsgBox呼び出しは、次を表示します。

2012年6月9日2012年6月9日2012年9月6日

したがって、Format()呼び出しは日付を正しくフォーマットしますが、への呼び出しListColumn.Nameはフォーマットを「mm / dd/yyyy」に変更するのに役立ちます。

4

2 に答える 2

3

ヘルプ ファイルから:

CDateは、システムのロケール設定に従って日付形式を認識します。認識されている日付設定以外の形式で提供された場合、日、月、年の正しい順序が決定されない場合があります。

ロケールに依存するのは嫌いです。ほとんどの場合、私が意図したこととは反対のことをしているように見えるだけでなく、コードの移植性が低下するからです。

私は通常、可能な限り明示的に日付を扱います。

  1. 文字列をさまざまな部分に分割します(年、月、日、および関連する場合は時、分、秒)
  2. さまざまなパーツをDateSerial機能に貼り付けます。これは型を返しますDate。(該当する場合は、の出力を追加できますTimeSerial。)
  3. 表示目的で必要な場合は、文字列を返す関数Dateを使用して、これを適切にフォーマットします。Format

これが実際の例です。

于 2012-09-05T08:09:41.003 に答える
1

更新で示したように、ListColumn.Name メソッドが不要な変換の原因でした。理由はまだわかりませんが、簡単な修正方法があります。

CreateHistoryColumn.Name = CLng(headerDate)

これにより、ヘッダーが数値として扱われるようになるため、適切な日付として認識されます。それ以上説明することはできません。

于 2012-09-11T04:26:28.810 に答える