Office アドイン

[Officeアドイン]ワークシートで選択範囲を変更したときに発生するイベント

ワークシート上で選択範囲の変更を検知する際、VBAでは通常「Worksheet.SelectionChange」イベントを利用します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Debug.Print Target.Address
End Sub

Office アドインでも同様に、イベントハンドラを追加することによって、選択範囲の変更を検知できるようになります。

マニフェストファイル(manifest.xml)

<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp">
  <Id>c578d697-f2bc-4eea-9d44-68a35fc24d39</Id>
  <Version>1.0</Version>
  <ProviderName>@kinuasa</ProviderName>
  <DefaultLocale>ja-jp</DefaultLocale>
  <DisplayName DefaultValue="イベントサンプル" />
  <Description DefaultValue="Work with Events using the Excel JavaScript API"/>
  <Hosts>
    <Host Name="Workbook" />
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost/apps/test0301/index.html" />
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
</OfficeApp>

アドイン本体(index.html)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <title>Sample</title>
    <link rel="stylesheet" href="https://static2.sharepointonline.com/files/fabric/office-ui-fabric-js/1.4.0/css/fabric.components.min.css">
    <style>
      #content-main {
        background: #ffffff;
        position: fixed;
        top: 200px;
        left: 0;
        right: 0;
        bottom: 0;
        overflow: auto;
      }
    </style>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"></script>
    <!-- <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script> -->
    <script src="https://appsforoffice.microsoft.com/lib/beta/hosted/office.js"></script>
    <script src="https://unpkg.com/core-js/client/core.min.js"></script>
    <script src="https://unpkg.com/@microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js"></script>
    <script src="https://static2.sharepointonline.com/files/fabric/office-ui-fabric-js/1.4.0/js/fabric.min.js"></script>
    <script>
      var eventResult;
      
      Office.initialize = function(reason){
        $(document).ready(function(){
          $("#btn1").click(regOnSelectionChanged);
          $("#btn2").click(removeOnSelectionChanged);
        });
      };
       
      function regOnSelectionChanged(){
        Excel.run(function(context){
          var sht = context.workbook.worksheets.getActiveWorksheet();
          eventResult = sht.onSelectionChanged.add(sht_onSelectionChanged);
          return context.sync().then(function(){
            OfficeHelpers.UI.notify("", "イベントハンドラの追加成功", "success");
          });
        }).catch(function(error){
          OfficeHelpers.UI.notify(error);
        });
      }
      
      function removeOnSelectionChanged(){
        return Excel.run(eventResult.context, function(context){
          eventResult.remove();
          return context.sync().then(function(){
            eventResult = null;
            OfficeHelpers.UI.notify("", "イベントハンドラの削除成功", "success");
          });
        }).catch(function(error){
          OfficeHelpers.UI.notify(error);
        });
      }
      
      function sht_onSelectionChanged(event){
        return Excel.run(function(context){
          return context.sync().then(function(){
            OfficeHelpers.UI.notify("", "type:" + event.type + 
                                        "\naddress:" + event.address + 
                                        "\nworksheetId:" + event.worksheetId, "success");
          });
        }).catch(function(error){
          OfficeHelpers.UI.notify(error);
        });
      }
    </script>
  </head>
  <body>
    <div id="content-main">
      <button id="btn1" class="ms-Button">
        <span class="ms-Button-label">Reg onSelectionChanged</span>
      </button>
      <button id="btn2" class="ms-Button">
        <span class="ms-Button-label">Remove onSelectionChanged</span>
      </button>
    </div>
  </body>
</html>

追加したイベントハンドラは、上記コードのようにremoveメソッドで削除、もしくはアドインを終了した際に破棄されるため、ファイルにイベントが保持されることはありません。

参考Webページ

関連記事

  1. Office関連

    「Excel VBAでラクラク Win64 APIプログラミング」(大村あつし著)レビュー

    当ブログでも以前書評を書いた「Excel VBAの神様 ボクの人生を変…

  2. Office関連

    アラビア文字かどうかを判別するWordマクロ

    以前mougの質問用に書いたコードが出てきたので、一部修正しました。…

  3. Office関連

    各ページの各行の行頭と行末に文字列を挿入するWordマクロ

    Word文書の各ページに10行程度の文章があり、各行の行頭と行末に文字…

  4. Office関連

    RSSの日付を変換するVBAマクロ

    RSSから取得した日付(「Wed, 20 Dec 2017 00:02…

  5. Office アドイン

    [Office用アプリ]Seller Dashboardの販売者アカウントを作成する。

    Office用アプリをOfficeストアで公開するためにはMicros…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP