スクリプトを使用してフォーム テンプレートをカスタマイズする

適用先
InfoPath 2010 InfoPath 2013

重要

Microsoft InfoPath 2013 のサポートは 2026 年 7 月 14 日に終了しました。 既存の InfoPath フォームとワークフローを、サポートされている Microsoft 365 ソリューションに移行することをお勧めします。 InfoPath の廃止に関する詳細情報。

スクリプトの記述に慣れている場合は、Microsoft JScript または Microsoft Visual Basic Scripting Edition (VBScript) スクリプト言語を使用して、Microsoft Office InfoPath フォーム テンプレートにスクリプトを追加できます。 スクリプトを追加すると、ルール、数式、データの入力規則、条件付き書式などで使用できる範囲を超えてフォーム テンプレートをカスタマイズできます。 たとえば、ユーザーがフォーム テンプレートに基づいてフォームのビューを切り替えたときに、電子メール メッセージを作成して送信するスクリプトを追加できます。 スクリプトを使用してのみ電子メール メッセージを作成および送信するようにフォーム テンプレートを構成できます。

この記事の内容

概要

ルール、数式、データの入力規則、条件付き書式などを使用して、InfoPath フォーム テンプレートをカスタマイズできます。 これらの機能は非常に柔軟で、さまざまなタスクを処理できますが、一部のタスクではこれらの機能の範囲を超えています。 たとえば、ユーザーがフォームのテキスト ボックスに値を入力したときに、ルールを使用して電子メール メッセージを送信することはできません。 これらの機能では使用できない方法でフォーム テンプレートをカスタマイズする必要があり、JScript または VBScript スクリプト言語を使用してスクリプトを記述することに慣れている場合は、ユーザーが新しいフォームを開いたとき、またはフォーム テンプレートに基づく既存のフォームを変更したときに実行されるスクリプトを追加できます。

フォーム テンプレートにスクリプトを追加すると、InfoPath によって Microsoft Script Editor (MSE) が起動します。これにより、フォーム テンプレートのスクリプトの追加、編集、およびデバッグが行えるようになって、選択したイベントにカーソルを置きます。 InfoPath によってスクリプトにイベント ハンドラーが自動的に追加されます。 イベント ハンドラーは、ユーザーの操作またはフォーム内の XML データの変更に応答する InfoPath フォーム テンプレート内の関数コードです。 たとえば、ユーザーがフォームを複数のネットワークの場所に保存できるようにする場合は、 OnSaveRequest イベント ハンドラーにスクリプトを追加できます。 ユーザーがフォーム テンプレートに基づいてフォームを保存するときに実行するスクリプトを追加すると、InfoPath によってスクリプト エディターが起動し、次のいずれかのコードがスクリプトに追加されます。

InfoPath が追加するコードは、選択したスクリプト言語によって異なります。

JScript

//=======
// The following function handler is created by Microsoft Office InfoPath.
// Do not modify the name of the function, or the name and number of arguments.
//=======
function XDocument::OnSaveRequest(eventObj)
{
   // Write the code to be run before saving here.
   eventObj.IsCancelled = eventObj.PerformSaveOperation();
   // Write the code to be run after saving here.
   eventObj.ReturnStatus = true;
}

VBScript

'=======
' The following function handler is created by Microsoft Office InfoPath.
' Do not modify the name of the function, or the name and number of arguments.
'=======
Sub XDocument_OnSaveRequest(eventObj)
' Write the code to be run before saving here.
eventObj.IsCancelled = eventObj.PerformSaveOperation
' Write the code to be run after saving here.
eventObj.ReturnStatus = True
End Sub

その後、フォームを別のネットワークの場所に保存するイベント ハンドラーの適切な場所にコードを追加できます。 ユーザーがこのフォーム テンプレートに基づいてフォームを保存すると、InfoPath は OnSaveRequest イベント ハンドラー内のコードを実行します。

この記事では、フォーム テンプレートでのスクリプト作成の概要を示します。 Microsoft Script Editor と、InfoPath で使用される特定のオブジェクト、メソッド、イベント、およびプロパティの詳細については、InfoPath 開発者のリファレンスを参照してください。

InfoPath により、次のイベントの 1 つを除き、すべてのイベントに対してイベント ハンドラーが自動的に追加されます。

イベント ハンドラー 説明 作成の手順
OnAfterChange このイベントは、ユーザーがフィールドにバインドされた指定されたコントロールの値を変更した後に実行されます。 たとえば、ユーザーがリスト ボックス コントロール内のアイテムを選択した後に、カスタム HTML 作業ウィンドウを表示できます。 このイベントは、 OnValidate イベントの後に実行されます。 [ データ ソース ] 作業ウィンドウでフォーム テンプレートまたはフィールドのコントロールを右クリックし、ショートカット メニューの [プログラミング ] をポイントして、[ 変更イベント後にオン] をクリックします。
OnAfterImport このイベントは、ユーザーが複数のフォームを 1 つのフォームに正常に結合した後に実行されます。 MSE を使用して、 OnAfterImport イベント ハンドラー宣言をスクリプト ファイルに直接手動で追加します。 このイベント ハンドラーは、デザイン モードでは作成できません。
OnBeforeChange このイベントは、ユーザーがコントロールの値を変更した後、そのコントロールにバインドされた指定されたフィールドに値が追加される前に実行されます。 たとえば、繰り返しテーブルの最後の行を入力する前に、ユーザーが行を追加できないようにすることができます。 [ データ ソース ] 作業ウィンドウでフォーム テンプレートまたはフィールドのコントロールを右クリックし、ショートカット メニューの [プログラミング ] をポイントして、[ 変更イベントの前にオン] をクリックします。
OnClick このイベントは、このイベントに関連付けられているボタンをユーザーがクリックすると実行されます。 このイベントは、フォーム テンプレートにボタンを追加した後に使用できます。 たとえば、ユーザーがボタンをクリックしたときのメイン データ ソースのフィールドの値を使用して、複雑な計算を実行できます。 ボタン コントロールをダブルクリックし、[ボタンのプロパティ] ダイアログ ボックスの [全般] タブで [フォーム コードの編集] をクリックします。
OnContextChange このイベントは、フォームのフォーカスが変更されたときに実行されます。 たとえば、ユーザーがテキスト ボックスから日付の選択に移動したり、ビューを切り替えたりすると、このイベントが実行されます。 このイベントは、他のすべてのイベントが発生した後に発生します。 [ ツール] メニューの [プログラミング] をポイントし、[ コンテキスト変更イベントの時] をクリックします。
OnLoad このイベントは、ユーザーが新しいフォームを作成するか、フォーム テンプレートに基づいて既存のフォームを開くたびに実行されます。 たとえば、ユーザーがフォームを開いたときに、セカンダリ データ ソースからメイン データ ソースにアイテムのリストをコピーできます。 [ ツール] メニューの [プログラミング] をポイントし、[ イベントの読み込み時] をクリックします。
OnMergeRequest このイベントは、フォーム テンプレートに基づくフォームが結合されるときに実行されます。 たとえば、結合操作中にユーザーの状態を付与するために結合されたフォームの数を表示できます。 [ ツール] メニューの [フォーム オプション] をクリックします。 [ カテゴリ] リストで、[ 詳細設定] をクリックします。 [フォームの差し込み] で、[カスタム コードを使用して差し込む] チェック ボックスをオンにして、[編集] をクリックします。
OnSaveRequest このイベントは、ユーザーがフォーム テンプレートに基づいてフォームを保存したときに実行されます。 たとえば、ユーザーがフォームを保存したときに、このフォーム テンプレートに基づくフォームを複数の場所に保存できます。 InfoPath は、フォームを保存する行と、InfoPath によってフォームが正常に保存されたかどうかを示す行の 2 行のコードをこのイベントに追加します。 [ ツール] メニューの [フォーム オプション] をクリックします。 [ カテゴリ] ボックスの一覧で、[ 開いて保存] をクリックします。 [保存動作] で、[カスタム コードを使用して保存する] チェック ボックスをオンにし、[編集] をクリックします。
OnSign このイベントは、ユーザーがフォームにデジタル署名を適用したときに実行されます。 たとえば、ユーザーが署名するときに、経費精算書フォームのデジタル署名にデータを追加できます。 [ ツール] メニューの [プログラミング] をポイントし、[ イベントの署名時] をクリックします。
OnSubmitRequest このイベントは、ユーザーがフォーム データを送信したときに実行されます。 たとえば、ユーザーが [ファイル] メニューの [送信] をクリックしたときに、セキュリティで保護された Web サービスにフォーム データを送信できます。 InfoPath はセキュリティで保護された Web サービスへのデータ接続をサポートしていないため、セキュリティで保護された Web サービスで連動するカスタム データ接続を追加する必要があります。 [ ツール] メニューの [ 送信オプション] をクリックします。 [ユーザーにこのフォームの送信を許可する] チェック ボックスをオンにし、[コードを使用してカスタム アクションを実行] をクリックして、[コードの編集] をクリックします。
OnSwitchView このイベントは、ユーザーがフォーム テンプレートに基づいてフォームを開くか、フォーム内の別のビューに切り替えたときに実行されます。 たとえば、ユーザーが特定のビューに切り替えるときに、フォームのメイン データ ソースのフィールドのデータを含む電子メール メッセージを作成できます。 [ ツール] メニューの [プログラミング] をクリックし、[ イベントの表示の切り替え] をクリックします。
OnValidate このイベントは、ユーザーがフィールドに連結されたコントロールの値を変更すると実行されます。 たとえば、ユーザーが特定のコントロールの値を変更した場合、ユーザーが入力した数値とスクリプト内の数値を使用して、別のコントロールの新しい値を計算できます。 このイベントは、 OnBeforeChange イベント ハンドラーが実行された後に発生します。 [ データ ソース ] 作業ウィンドウでフォーム テンプレートまたはフィールドのコントロールを右クリックし、ショートカット メニューの [プログラミング ] をポイントして、[ イベントの検証後にオン] をクリックします。
OnVersionUpgrade このイベントは、ユーザーが既存のフォームを開き、既存のフォームで使用されるフォーム テンプレートのバージョン番号が、発行場所にあるフォーム テンプレートのバージョン番号より古い場合に実行されます。 ユーザーが既存のフォームを開くと、InfoPath は既存のフォームに関連付けられているフォーム テンプレートのバージョン番号を確認します。 フォーム テンプレートのバージョン番号が新しい場合は、ユーザーが既存のフォームを開いたときに InfoPath によって OnVersion イベント ハンドラーが実行されます。 たとえば、既存のフォーム テンプレートに新しいフィールドを追加して再発行し、ユーザーが既存のフォームを開いたときに、その新しいフィールドをメイン データ ソースに追加したいとします。 このイベントは、ユーザーが既存のフォームを開いたときに、メイン データ ソースに新しいフィールドを追加します。 [ ツール] メニューの [フォーム オプション] をクリックします。 [ カテゴリ] ボックスの一覧で、[ バージョン管理] をクリックします。 [ バージョンアップグレード時] の一覧で、[ カスタム イベントの使用] をクリックし、[ 編集] をクリックします。

ページの先頭へ

互換性に関する考慮事項

ブラウザー互換のフォーム テンプレートにスクリプトを追加することはできません。 スクリプトは、フォームが InfoPath に入力されるフォーム テンプレートにのみ追加できます。 ブラウザー互換のフォーム テンプレートは、マネージド コードを使用してのみカスタマイズできます。

ページの先頭へ

フォーム テンプレートのスクリプト言語を設定する

スクリプトを使用してフォーム テンプレートをカスタマイズするには、Microsoft JScript または Microsoft Visual Basic Scripting Edition (VBScript) のいずれかを使用できます。 InfoPath は、既定では JScript を使用してスクリプトを追加するように構成されています。 フォーム テンプレートにスクリプトやマネージド コードが含まれておらず、スクリプト言語として VBScript を使用する場合は、フォーム テンプレートのスクリプト言語を VBScript に変更できます。 同じフォーム テンプレートで両方のスクリプト言語を使用することはできません。

フォーム テンプレートに既に一方の言語のスクリプトが含まれている場合に、他の言語を使用する場合は、スクリプトを他の言語に変換できるように既存のスクリプトを保存し、[ フォーム オプション] ダイアログ ボックスからフォーム テンプレートからスクリプトを削除してから、変換したスクリプトをフォーム テンプレートに追加し直す必要があります。 InfoPath はスクリプトを新しいスクリプト言語に変換できません。 [ フォーム オプション] ダイアログ ボックスでスクリプト言語を変更しても、このフォーム テンプレートにのみ影響します。 他のフォーム テンプレートには、既定のスクリプト言語として JScript があります。

  1. [ ツール] メニューの [フォーム オプション] をクリックします。

  2. [ カテゴリ] ボックスの一覧の [ フォーム オプション ] ダイアログ ボックスで、[ プログラミング] をクリックします。

  3. [ フォーム テンプレート] コード言語 の一覧の [プログラミング言語] で、[ VBScript] をクリックします。

    • スクリプト言語を設定し、フォーム テンプレート用に 1 つ以上のイベント ハンドラーを作成した後は、フォーム テンプレートのスクリプト言語を変更することはできません。
    • Microsoft Visual Studio 2005 Tools for Applications をインストールした場合、既定の言語は Microsoft Visual Basic .NET です。 この手順を使用して、スクリプト言語を VBScript に変更することもできます。

ページの先頭へ

イベントが発生するたびにメッセージを表示する

アクションまたはその他のイベントに応答して実行されるイベント ハンドラーを知りたい場合は、イベント ハンドラーが実行されるたびにメッセージ ボックスを表示する一時的なコードを追加できます。 このコードは、イベント ハンドラーが実行されるタイミングを判断する場合にのみ使用してください。 このコードを追加したら、プレビューを使用して、このフォーム テンプレートに基づいてフォームを表示したり、フォーム テンプレートを発行してから新しいフォーム テンプレートを作成したりできます。 一部のイベント ハンドラーは、フォーム テンプレートを発行した後にフォームを作成した場合にのみ実行されます。 その後、イベント ハンドラーを実行する可能性があると思われるアクションを実行できます。 イベント ハンドラーを実行すると、メッセージ ボックスが表示されます。

イベント ハンドラーを実行するアクションまたはイベントを決定したら、コードを削除してフォーム テンプレートの設計を再開します。 このコードを削除せずにフォーム テンプレートを発行すると、イベント ハンドラーの実行時にこのメッセージ ボックスがユーザーに表示されます。

  1. イベント ハンドラーを追加します。

  2. JScript にコードを追加するには、「 XDocument.UI.Alert 」と入力します ("The Event name event just ran"); イベント ハンドラーの名前に置き換えます。 たとえば、このコードを OnValidate イベント ハンドラーに追加する場合、「 XDocument.UI.Alert (「The OnValidate event handler just run");

  3. VBScript にコードを追加するには、XDocument.UI.Alert ("The Event name event just ran") と入力します。たとえば、このコードを OnSaveRequest イベント ハンドラーに追加する場合は、XDocument.UI.Alert ("The OnSaveRequest event handler just ran") と入力します。

  4. コードをテストするには、[ファイル] メニューの [プレビュー] をクリックするか、Ctrl + Shift + B を押して、イベントを開始できるユーザーアクションを実行します。 そのコード行を含むイベントが発生すると、メッセージ ボックスにメッセージが表示されます。

    イベントによっては、ユーザー アクションを実行してイベントを開始する前に、フォーム テンプレートを発行し、このフォーム テンプレートに基づいてフォームを作成する必要がある場合があります。

  5. フォーム テンプレートを発行し、ユーザーがこのフォーム テンプレートに基づいてフォームに入力できるようにするには、メッセージ ボックスを表示するために使用したコードを削除します。

ページの先頭へ

ユーザーがフォーム データを保存したときに実行されるスクリプトを追加する

  1. [ ツール] メニューの [フォーム オプション] をクリックします。

  2. [フォーム オプション] ダイアログ ボックスの [カテゴリ] ボックスの一覧で、[開いて保存] をクリックします。

  3. [保存動作] で、[カスタム コードを使用して保存する] チェック ボックスをオンにし、[編集] をクリックします。 Microsoft Script Editor は、OnSaveRequest イベント ハンドラーのカーソルから始まります。
    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnSaveRequest(eventObj)
    {
       // Write the code to be run before saving here.
       eventObj.IsCancelled = eventObj.PerformSaveOperation();
       // Write the code to be run after saving here.
       eventObj.ReturnStatus = true;
    }
    
    

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnSaveRequest(eventObj)
    ' Write the code to be run before saving here.
    eventObj.IsCancelled = eventObj.PerformSaveOperation
    ' Write the code to be run after saving here.
    eventObj.ReturnStatus = True
    End Sub
    
    
  4. 次のいずれか、または両方の操作を行います。

    • InfoPath によってフォームが保存される前に実行されるスクリプトを追加するには、コメントを Write the code to be run before saving here. コードに置き換えます。
    • InfoPath でフォームを保存した後に実行するスクリプトを追加するには、コメント Write the code to be run after saving here. をコードに置き換えます。
  5. 変更内容をテストするには、[標準] ツール バーの [プレビュー] をクリックするか、Ctrl キーと Shift キーを押しながら B キーを押します。

    フォーム テンプレートに基づいてフォームを作成した後にのみイベント ハンドラが実行される場合は、[ファイル] メニューの [発行] をクリックしてフォーム テンプレートを発行し、発行ウィザードを完了します。 フォーム テンプレートを発行した後、フォームを作成し、イベント ハンドラーを実行するアクションを実行します。

ページの先頭へ

ユーザーがフォーム データを送信したときに実行されるスクリプトを追加する

  1. [ ツール] メニューの [ 送信オプション] をクリックします。

  2. [送信オプション] ダイアログ ボックスで、[ユーザーにこのフォームの送信を許可する] チェック ボックスをオンにします。

  3. [コードを使用してカスタム アクションを実行] をクリックし、[コードの編集] をクリックします。 Microsoft Script Editor は、OnSubmitRequest イベント ハンドラーのカーソルから始まります。
    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnSubmitRequest(eventObj)
    {
       // If the submit operation is successful, set
       // eventObj.ReturnStatus = true;
       // Write your code here
    }
    
    

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnSubmitRequest(eventObj)
    ' If the submit operation is successful, set
    ' eventObj.ReturnStatus = True
    ' Write your code here
    End Sub
    
    
  4. コメント If the submit operation is successful, set eventObj.ReturnStatus = true Write your code here を独自のコードに置き換えます。

  5. 変更内容をテストするには、[標準] ツール バーの [プレビュー] をクリックするか、Ctrl キーと Shift キーを押しながら B キーを押します。

ページの先頭へ

ユーザーがボタンをクリックしたときに実行されるスクリプトを追加する

  1. フォーム テンプレートのビューに新しいボタンを追加し、ボタンをダブルクリックします。

    既存のボタンにスクリプトを追加する場合は、代わりに既存のボタンをダブルクリックします。

  2. [全般] タブをクリックします。

  3. [ フォーム コードの編集] をクリックします。 Microsoft Script Editor は、そのボタンの OnClick イベント ハンドラーにカーソルを置いて開始します。
    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function Button Name::OnClick(eventObj)
    {
    // Write your code here
    }
    
    

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub Button Name_OnClick(eventObj)
    ' Write your code here
    End Sub
    
    
  4. コメント Write your code here を独自のコードに置き換えます。

  5. 変更内容をテストするには、[標準] ツール バーの [プレビュー] をクリックするか、Ctrl キーと Shift キーを押しながら B キーを押します。

ページの先頭へ

既存のフォームが結合されるときに実行されるスクリプトを追加する

  1. [ ツール] メニューの [フォーム オプション] をクリックします。

  2. [カテゴリ] ボックスの一覧の [フォーム オプション] ダイアログ ボックスで、[詳細設定] をクリックします。

  3. [フォームの差し込み] で、[フォームの差し込みを有効にする] チェック ボックスをオンにします。

  4. [カスタム コードを使用してマージする] チェック ボックスをオンにし、[編集] をクリックします。 Microsoft Script Editor は、OnMergeRequest イベント ハンドラーのカーソルから始まります。
    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnMergeRequest(eventObj)
    {
    // Write the code that handles each form being merged here.
    XDocument.ImportDOM(eventObj.DOM);
    eventObj.ReturnStatus = true;
    }
    
    

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnMergeRequest(eventObj)
    ' Write the code that handles each form being merged here.
    XDocument.ImportDOM(eventObj.DOM)
    eventObj.ReturnStatus = True
    End Sub
    
    
  5. コメントを Write the code that handles each form being merged here. コードに置き換えます。

  6. このイベントのコードをテストするには、フォーム テンプレートを発行し、このフォーム テンプレートに基づいて複数のフォームを作成して、フォーム テンプレートを結合します。

    フォーム テンプレートの発行の詳細については、[ 関連項目 ] セクションにリンクがあります。

ページの先頭へ

スクリプトを追加して既存のフォームを更新する

以前に発行したフォーム テンプレートを更新し、そのフォーム テンプレートに基づいて既存のフォームを更新する場合は、ユーザーが既存のフォームの 1 つを開いたときに実行される更新されたフォーム テンプレートにスクリプトを追加できます。 ユーザーが既存のフォームを開くと、InfoPath は発行場所に関連付けられているフォーム テンプレートのバージョン番号を確認します。 発行場所にあるフォーム テンプレートのバージョン番号が既存のフォームのバージョン番号よりも新しい場合、つまりフォームが更新されたことを示します。InfoPath はこのイベントのコードを実行して既存のフォームを更新します。

  1. [ ツール] メニューの [フォーム オプション] をクリックします。

  2. [ カテゴリ] ボックスの一覧の [ フォーム オプション ] ダイアログ ボックスで、[ バージョン管理] をクリックします。

  3. [ バージョンアップグレード時] の一覧で、[ カスタム イベントの使用] をクリックし、[ 編集] をクリックします。 Microsoft Script Editor は、OnVersionUpgrade イベント ハンドラーのカーソルから始まります。
    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnVersionUpgrade(eventObj)
    {
    // Write your code here
    }
    
    

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnVersionUpgrade(eventObj)
    ' Write your code here
    End Sub
    
    
  4. コメント Write your code here を独自のコードに置き換えます。

  5. このイベントのコードをテストするには、フォーム テンプレートを発行し、このフォーム テンプレートに基づいて複数のフォームを作成し、更新されたバージョンのフォーム テンプレートを変更して発行し、この古いバージョンのフォーム テンプレートに基づく既存のフォームを開きます。

    フォーム テンプレートの発行の詳細については、[ 関連項目 ] セクションにリンクがあります。

ページの先頭へ

他のイベントのスクリプトを追加する

この手順を使って、次のイベント ハンドラをフォーム テンプレートに追加できます。

  • OnAfterChange
  • OnBeforeChange
  • OnContextChange
  • OnLoad
  • OnSwitchView
  • OnSign
  • OnValidate
  • [ ツール] メニューの [プログラミング] をポイントし、イベント ハンドラーに追加するイベントをクリックします。 Microsoft Script Editor は、選択したイベント ハンドラーにカーソルを置いて開始します。
  • コメント Write your code here を独自のコードに置き換えます。

ページの先頭へ