2016-09-28 14 views
0

1つのスプレッドシートからデータをインポートし、再フォーマットしてから送信するVBAスクリプトに問題があります。Excel VBA US/UK日付変換の問題

ソースシートの日付エントリは、dd/mm/yyyy形式で入力されます。宛先シートは、次の行を使用して日付をインポートします。

If RolandSource.Worksheets(tFocus).Cells(rFocus, 2).Value <> "" And RolandSource.Worksheets(tFocus).Cells(4, cFocus) <> "" And RolandSource.Worksheets(tFocus).Cells(rFocus, cFocus) <> "" Then ThisWorkbook.Worksheets(1).Cells(rRecord, 6).Value = RolandSource.Worksheets(tFocus).Cells(rFocus, cFocus).Value 

Excelを使用してデータをコピーし、日付として自動的に書式設定することが問題です。このプロセスでは、これが必要ではないにもかかわらず、英国と米国の日付形式のあいまいな日付が変換されています。

インポートされるデータセットに日付(dd/mm/yyyy)またはテキストエントリが含まれている可能性があります。通常の処理ルートではエラーが発生します。誰か提案はありますか?

ThisWorkbook.Worksheets(1).Cells(1,2).value = ThisWorkbook.Worksheets(1).Cells(1,1).Value 

(ご注意:あなたは、私がイミディエイトウィンドウで次のコマンドを実行し、セルA1に「2003年1月2日」と入力し、テキストとしてセルA1をフォーマットすることにより、記述していますこの問題を見ることができます

このソリューションは、日付と単語を処理するループの一部として使用されます)。

ありがとうございます。

+3

'ThisWorkbook.Worksheets(1).Cells(1,2).NumberFormat =" @ "'を実行した後、 'ThisWorkbook.Worksheets(1).Cells(1,2).Value = ThisWorkbook.Worksheets (1).Cells(1,1).Value'を使用して、ターゲットセルの自動フォーマットを防止します。 – omegastripes

+0

Excelは日付を「1 Jan 1900」=「1」のシリアル番号として保存します。日付のように見えるものを入力すると、ExcelはWindows Regional Short Dateの設定に従ってそれを解析します。 'RolandSource'の日付が「実際の日付」である場合、解決策は日付のテキスト表現である場合とは異なります。テキスト表現の場合は、列をテキストとして事前にフォーマットし、ソースセルの '.Text'プロパティをコピーします。それらが実際の日付で正しい場合、この問題は発生しないはずですが、ソースセルの '.Value2'プロパティにアクセスすることができます。 –

+0

@omegastripesありがとうございました。このソリューションを試しましたが、ループが失敗します。 – user3190686

答えて

0

@OmegaStripesと@RonRosenfeldのおかげで答えは、値をソースから宛先にコピーする前にセルをフォーマットすることでした。これはループを失敗させていましたが、If()ステートメントを追加してエラーからループを保護して解決しました。両方ともお手伝いしてくれてありがとう。