Microsoft Calendar Control 10.0 以降のバージョンでは、FirstDay プロパティの値が正しくありません

元の KB 番号: 826761

注:

この記事は、Microsoft Access データベース (.mdb) ファイルまたは Microsoft Access データベース (.accdb) ファイルに適用されます。 基本的なマクロ、コーディング、相互運用性のスキルが必要です。

現象

Microsoft Access では、予定表コントロールの初日に正しくない日が表示されます。 この問題は、Microsoft Calendar Control 10.0 以降のバージョンをフォームまたはレポートに挿入し、Microsoft Visual Basic for Applications (VBA) 組み込み定数を使用して予定表コントロールのプロパティを設定FirstDayするときに発生します。

たとえば、予定表コントロールのプロパティを FirstDayvbMonday または vbTuesday に設定します。 予定表コントロールのプロパティを FirstDayvbTuesday に設定すると、予定表は水曜日を週の最初の日として使用します。

注:

以前のバージョンの予定表コントロールを使用する場合は、プロパティを FirstDay 正しく設定できます。

原因

この問題は、microsoft Visual Basic で定義されている日の組み込み定数 ( vbSundayvbMonday など) が正しい日の値に関連付けられていないために発生します。

回避策

この問題を回避するには、次の手順を実行します。

  1. 日、VBA 組み込み定数、および正しい日の値と VBA 組み込み定数に関連付けられている数値の間の関連付けを決定します。 これを行うには、次の手順を実行します。

    1. Access を開始します。

    2. Northwind サンプル データベースを開きます。

    3. [データベース] ウィンドウで、[オブジェクト] の [フォーム] をクリックします。

      注:

      Access 2007 で、[作成] タブをクリックし、[フォーム] グループの [フォーム デザイン] をクリックします。

    4. 右側のウィンドウで、[ デザイン] ビューで [フォームの作成] をダブルクリックします。

      注:

      Access 2007 で、この手順をスキップします。

    5. [ 挿入 ] メニューの [ ActiveX コントロール] をクリックします。

    注:

    Access 2007 で、[デザイン] タブをクリックし、[コントロール] グループの [ActiveX コントロールの挿入] をクリックします。

    1. [ActiveX コントロールの挿入] ダイアログ ボックスで、[ActiveX コントロールの選択] リスト ボックスから [予定表コントロール 10.0 以降] をクリックして選択し、[OK] をクリックします

    2. プロパティが次のように設定されているフォームにコマンド ボタンを追加します。

      プロパティ
      Name testFD
      Caption 初日の変更
    3. [ファイル] メニューで [保存] をクリックします。

      注:

      Access 2007 で、[ Microsoft Office] ボタンをクリックし、[ 保存] をクリックします。

    4. [ 名前を付けて保存 ] ダイアログ ボックスの [ フォーム名 ] ボックスに「Form1」と入力し、[ OK] を クリックして Form1 フォームを保存します。

    5. [表示] メニューの [コード] をクリックします。

      注:

      Access 2007 で、[デザイン] タブをクリックし、[ツール] グループの [コードの表示] をクリックします。

    6. Visual Basic エディターで、次のコードを入力するか貼り付けます。

      Option Compare Database
      
      Private Sub testFD_Click()
          Calendar0.FirstDay = vbTuesday
      End Sub
      
    7. フォーム ビューで Form1 を開きます。

    8. [ 初日の変更 ] ボタンをクリックします。

      注:

      予定表コントロールの最初の列が火曜日に設定されていない場合は、最初の列の日をメモします。

    9. Visual Basic エディターで、[表示] メニューの [イミディエイト ウィンドウ] をクリックします。

    10. [イミディエイト] ウィンドウで、「 ?vbTuesday」と入力し、Enter キーを押します。

      数値に注目してください。

    11. vbTuesday を vbMondayvbWednesday などの他の VBA 組み込み定数に置き換えて、手順 j から手順 o を繰り返します。

      次の表に、日、VBA 組み込み定数、および正しい日の値と VBA 組み込み定数に関連付けられている数値の間の関連付けを示します。

      週の日 VBA 組み込み定数 関連付けられた数値
      月曜日 vbSunday 1
      火曜日 vbMonday 2
      水曜日 vbTuesday 3
      木曜日 vbWednesday 4
      金曜日 vbThursday 5
      土曜日 vbFriday 6
      日曜日 vbSaturday 7
  2. 曜日に正しくマップされるグローバル カスタム列挙体を作成します。 これを行うには、次の手順を実行します。

    1. [データベース] ウィンドウで、[オブジェクト] の下の [モジュール] をクリックします。

      注:

      Access 2007 で、[作成] タブをクリックし、[その他] グループの [マクロ] の下の矢印をクリックし、[モジュール] をクリックします。

    2. [挿入] メニューの [モジュール] をクリックします。

      注:

      Access 2007 で、この手順をスキップします。

    3. Visual Basic エディターに次のコードを入力または貼り付けます。

      Option Explicit
      
      Public Enum nwFirstDay
         nwMonday = 1
         nwTuesday = 2
         nwWednesday = 3
         nwThursday = 4
         nwFriday = 5
         nwSaturday = 6
         nwSunday = 7
      End Enum
      

      注:

      「週の日」列と、手順 1r の表の対応する "関連付けられた数値" 列に列挙体を作成します。

    4. [モジュール] Day_Associationに名前を付けて保存します。

    5. Visual Basic エディターを閉じます。

  3. アプリケーションの VBA 組み込み定数を、手順 2 で説明されているカスタム列挙内の定数に置き換えます。

    たとえば、元のコードが

    Calendar0.FirstDay = vbTuesday
    

    カスタム列挙を使用するようにコードを次のように変更します。

    Calendar0.FirstDay = nwTuesday
    
  4. アプリケーションを実行します。

詳細情報

VBA 組み込み定数は、システムのローカル情報に依存しません。 たとえば、ドイツ語でローカライズされたオペレーティング システムを持つコンピューターでは、週の最初の日は月曜日です。 コンピューター上の Monday に関連付けられている数値は常に 0 です。

Calendar Control 10.0 以降のバージョンは世界中の Microsoft ActiveX コントロールであるため、コンピューターの仕様に基づいて VBA 組み込み定数に関連付けられている数値を制御することはできません。 そのため、この記事の「現象」セクションに記載されている問題が発生します。

問題の再現手順

  1. Access を開始します。

  2. Northwind サンプル データベースを開きます。

  3. [データベース] ウィンドウで、[オブジェクト] の [フォーム] をクリックします。

    注:

    Access 2007 で、[作成] タブをクリックし、[フォーム] グループの [フォーム デザイン] をクリックします。

  4. 右側のウィンドウで、[ デザイン] ビューで [フォームの作成] をダブルクリックします。

    注:

    Access 2007 で、この手順をスキップします。

  5. [ 挿入 ] メニューの [ ActiveX コントロール] をクリックします。

    注:

    Access 2007 で、[デザイン] タブをクリックし、[コントロール] グループの [ActiveX コントロールの挿入] をクリックします。

  6. [ActiveX コントロールの挿入] ダイアログ ボックスで、[ActiveX コントロールの選択] リスト ボックスから [予定表コントロール 10.0 以降] をクリックして選択し、[OK] をクリックします

  7. プロパティが次のように設定されているフォームにコマンド ボタンを追加します。

    プロパティ
    Name testFD
    Caption 初日の変更
  8. [表示] メニューの [コード] をクリックします。

    注:

    Access 2007 で、[デザイン] タブをクリックし、[ツール] グループの [コードの表示] をクリックします。

  9. Visual Basic エディターで、次のコードを入力するか貼り付けます。

    Option Compare Database
    
    Private Sub testFD_Click()
     Calendar0.FirstDay = vbTuesday
    End Sub
    
  10. [ファイル] メニューで [保存] をクリックします。

    注:

    Access 2007 で、[ Microsoft Office] ボタンをクリックし、[ 名前を付けて保存] をクリックします。

  11. [ 名前を付けて保存 ] ダイアログ ボックスで、[ フォーム名 ] ボックスに「Form1」と入力し、[ OK] を クリックして Form1 フォームを保存します。

  12. フォーム ビューで Form1 を開きます。

  13. [ 初日の変更 ] ボタンをクリックします。

    予定表コントロールのプロパティを FirstDayvbTuesday に設定しますが、予定表は水曜日を週の最初の日として選択します。

関連情報

予定表コントロールと予定表コントロールのプロパティの詳細については、Mscal.hlp を開き、適切なトピックを検索します。 Mscal.hlp は、次のフォルダーにあります。

Microsoft Access 2002

インストール ドライブ: \Program Files\Microsoft Office\Office10

Microsoft Office Access 2003

インストール ドライブ: \Program Files\Microsoft Office\Office11

注:

インストール ドライブ は、インストール ドライブの名前のプレースホルダーです。