2012-10-12 12 views
7

現在、私は多くの面で問題を抱えています。誰かが私を助けてくれることを願っています。私はOffice 2007(32ビット)とOffice 2010(64ビット)の両方を使用している大企業に勤務しています。私は全社を通して互換性のあるマクロを書くことが難しい作業でした(私は以前はVBAでプログラミングしていませんでした - 実際このフォーラムは私を助けました)。私の仕事は、1つの大きなテーブルを共有Excelシートで管理することです。いくつかのマクロといくつかのユーザーフォームがあります。ここで問題を簡単に解消します: シートには、日付形式(開始日と終了日)の2つの列が含まれています。両方の値はカラムフォームのuserformのテキストボックスにインポートされます(commandbuttonはMsCalをランチしてclassにエクスポートされ、これらのテキストボックスに日付を入れます)。私が必要とするのは、フィルタリングやその他の操作を実行するために、両方の列に日付形式をmm/dd/yyyyとして持つことです。この値が、英語とは異なるローカライゼーションを使用する作業者によって更新される場合、米国の日付はdd.mm.yyyyとして入力されます。 Thatsは、日付に基づく適切なフィルタリングを不可能にします。私は次のように書式を変更しようとしました:複数の地域にまたがる同じ日付形式

UserForm1.TextBox10.Value = Format(Calendar1.Value, "mm/dd/yyyy") 

しかし、このコードは何とかしています。一部のマシンでは動作しますが、一部のマシンでは動作しません。そして、それは私に頭痛を与えているものです。今はどのように進めるべきですか?シートで同じ日付形式を使用し、Windowsのローカリゼーション設定を無視するようExcelに強制する方法はありますか?従業員は、そのフォーマットに慣れているか、他のアプリケーションに必要なため、ローカリゼーションを英語(米国)に変更する必要はありません。このシートが開くときに限ってローカライズを一時的に変更する方法はありますか? アドバイスがあります。 おかげで、事前に ピーター

+0

Excelセルの日付は文字列ではなく、日付でなければなりません。アスタリスク*(通常はFormat Cells/Dateオプションの最初の2つのオプション)の前にある日付書式にセル書式を設定すると、日付はユーザーのローカル日付書式に変更されます。しかし、下位のセルはまだ形式にかかわらず使用可能な日付の番号です。テキストボックスに日付を入力するか、文字列を日付に変換する必要がある場合は、別の問題であり、余分な処理が必要です。 http://stackoverflow.com/questions/12495504/how-to-convert-a-string-into-date/12497237#12497237 – user3357963

+0

@PeterTを参照してください。表では、日付列はテキストまたは日付として形式化されていますか? – CaBieberach

+0

日付として作成 – PeterT

答えて

1

あなたができることは、決して日付変数をテキストに変換することではありません。

内部的には、日付はちょうど連続した数字です(小数点区切り記号の左に小数点区切り記号からの曜日と右は時間です)。したがって、例えば、2012年6月10日、excelはです。この日付の値は、コンピュータで設定されている日付の形式とは関係ありません。

日付を表現する場合(人間が視覚化するために)Excelは、この内部値をコンピュータで設定された形式の文字列にフォーマットします。たとえば、コンピュータに米国の日付形式がある場合、日付41188は6/10/2012として書式設定されます。

日付の大きな課題は、正しい形式で日付を入力することです。日付を文字列( "6/10/2012")として入力すると、Excelはコンピュータ上で設定された日付形式に応じてそれを解釈します。あなたが米国の書式を持っているなら、それは最初の暗号を月として、2番目を日として、最後を1年として取ります。ドイツ語の書式をお持ちの場合は、最初は曜日、次は月、最後は1年となります。したがって、米国の書式Excelの場合と同じ入力(「6/10/2012」)では、ドイツ語書式の場合と同様に6月の10日目が読み取られ、Excelは6番目のOktoberを読み込みます。

あなたの場合、Textbox10内の日付を書式設定しないでください。米国の書式Excelの場合は問題ありませんが、別の日付書式がある場合は、最初の暗号化が月の代わりに曜日になります。 この例を確認してください。ドイツの形式エクセル(DD.MM.YYYY)で6月のユーザ入力10日

  1. Calendar1.Valueは、日付の値を取得する()
  2. Format(Calendar1.Value, "mm/dd/yyyy")は、文字列「2012年6月10日に日付値を変換します"
  3. フォーマット日付(STRING)を使用している場合、Excelはその日付を解釈する必要があります。コンピュータの日付形式はドイツ語なので、日:06、月:10、年:2012と表示されます。あなたはCalendar1.Valueは日付変数を取得し、あなたが列をフォーマットさ日にこの日付変数を与える場合、あなたはオールウェイズあなたの列に正しいデールを取得し、あなたがする代わりに

の日を使用することになります列セル内に設定された日付形式またはユーザーのコンピュータで設定された形式に関係なく、日付のフィルタリングと並べ替えを正しく行うことができます。


さて、あなたの場合には、最高のは、必要な細胞に直接Calendar1.Value割り当てることであろう。ような何か:

ThisworkBook.WorkSheets("Sheet1").Range("C3").Value= Calendar1.Value 

あなたはまだ彼の選択を参照するには、ユーザーのためにTextBox10にCalendar1.Valueをasignが、唯一の編集オプションは、カレンダーコントロールであるようにTextBox10を無効にすることができます。そして、日付を使って作業しているときは、TextBox10からそれを奪取するisteadをCalendar1.Valueから直接取ります。

Calendar1から選択した値をテキストボックスに表示する必要がある場合は、テキストボックスで日付をフォーマットしないでください。代わりに、使用:

UserForm1.TextBox10.Value = Cstr(Calendar1.Value) 

この方法で、ユーザーは、彼が自分のコンピュータに設定されており、その彼がに使用されているために、DATEFORMATに日付が表示されます。

+0

ありがとうございました。私が探していたこの種の答え。 – PeterT

0

一つの解決策は、日付番号の形式を使用しないことですむしろあなたは、フォーマット文字列として"mm/dd/yyyy"を指定し、すべてのセルの日付のカスタムフォーマットを使用します。しかし、私の経験では、コンピュータの地域設定が"mm/dd/yyyy"を使用するように設定されている場合、この同じ文字列を使用してカスタムセルの書式を設定しようとすると、コンピュータ設定にリンクされたdaterとしてExcelが役立ちます。私がこれを回避する方法は、私のコンピュータ上の日付フォーマットを変更し、カスタムの "mm/dd/yyyy"としてセルをフォーマットして保存した後、コンピュータの設定を元の状態に戻します。彼らが日付セルだと主張すると、あなたのコンピュータの設定を変更してもセルの値は変わらないことがわかります。

私はTEXT関数を呼び出す日付セルの隣に常にセルを置くことをお勧めします。したがって、A1に日付があり、別のセルに=TEXT(A1, "mm/dd/yyyy")があり、この新しいセルのみを参照しているとします。しかし、それはあなたのスプレッドシートを非常に乱雑にする可能性があります。

私は最高の解決策は、会社の日付設定のすべての人が同じフォーマットを使用するようIT部門に指示することです。

+0

ダン、あなたの答えをありがとう。セル形式をカスタムに変更すると、メトリック、ピボットなどを計算するために使用される他のマクロが誤動作することになります。このマクロでは、日付にセル形式を設定する必要があります。このマクロは他のサイトで保持されています。さらに、ファイル全体は、プログラムによって弱くベースで遠隔更新され、セルをそのデフォルト状態(プログラムによって設定)にフォーミングするように設定する。何も助けなければ、私はIT部門に連絡する必要があると思います。しかし、正直言って、私はそのシナリオを避けたいと思います。 – PeterT

+0

結論として、私はテーブルを変更することはできません(列の追加/削除/行の変更など)。私はテーブルにデータを書き込むVBAコードだけを変更することができます。 – PeterT

+0

何について:UserForm1.TextBox10.Value = Worksheetfunction.Text(Calendar1.Value、 "mm/dd/yyyy") – Dan

関連する問題