Office 開発におけるパフォーマンス トラブルシュート (その 2 : ボトルネックの特定)

こんにちは、Office 開発サポート チームの中村です。 前回の投稿で、Office 開発のパフォーマンスに関する調査の進め方をご紹介しました。その中で予告した通り、今回の記事ではボトルネックとなるコードの特定手法について、特定作業に使えるサンプル コードとともに詳しく解説していきます。 今回も、「Office バージョンアップに伴い、これまで利用していたプログラムのパフォーマンスが低下した」という場合を例に説明します。コードの掲載などのため記事が長くなりますがご容赦ください。   目次 1. 説明用サンプル プログラムの紹介 2. デバッグ ログの追加 (関数単位) 3. デバッグ ログの解析 4. デバッグ ログの追加 (行単位) 5. 関数単位の時刻ログ出力処理追加プログラム   1. 説明用サンプル プログラムの紹介 かなりシンプルな例ですが、以下の VBA マクロ (TestProgram.xlsm) を例に説明します。(この VBA マクロの内容で大きくパフォーマンスが低下するわけではありません。あくまでも調査の流れを説明するためのサンプルです。そして説明用にあえて効率の悪い処理などを書いています。) 前回の記事でも述べた通り、業務で使用するプログラムは膨大なステップ数となり、多くの場合は処理の内容ごとに関数を分け、これを呼び出すよう実装されています。今回のサンプルでは、OpenWorkBook / SetValue / ChangeFontColor / CloseWorkBook の 4 つの関数を呼び出しています。   <テスト プログラム 処理概要> ボタン コントロールをクリックすると、データ ブック (sample.xlsx)…


Office 開発におけるパフォーマンス トラブルシュート (その 1 : 概要と対処方法)

こんにちは、Office 開発サポート チームの中村です。 2018/7/12 Update ボトルネック特定手法についてのパート 2 記事を公開しました。   Office 開発において、「期待するパフォーマンスが出ない」「利用する Office のバージョンによってパフォーマンスが低下する」といったお問い合わせを頂くことがあります。今回の記事では、このような状況で改善を図るためにどのように調査・検討を進めればよいかを記載します。 今回は全体の流れと Office におけるパフォーマンスの考え方などを紹介しています。ボトルネックの特定手法については、以下のパート 2 の記事をご参照ください。 タイトル : Office 開発におけるパフォーマンス トラブルシュート (その 2 : ボトルネックの特定) アドレス : https://blogs.msdn.microsoft.com/office_client_development_support_blog/2018/07/12/office-perf-troubleshoot-part2/   目次 1. はじめに : Office におけるパフォーマンス 2. プログラム上のボトルネックの特定 3. 対処方法の検討 3-1. ボトルネックとなる処理の速度改善 3-2. プログラム構成の見直し 3-3. プログラム全体のパフォーマンス チューニング 3-4. 他の言語から VBA に変更する 3-5. マシン リソースの増強…


Word 2016 からメールを送信すると文字化けする

こんにちは、Office 開発サポート チームの中村です。 今回の記事では、Word 2016 からテキスト形式のメールを送信するときの以下の動作について記載します。1. は Word 2016 での意図した仕様変更による動作です。2. は、Word 2016 製品の不具合によって生じます。 メール タイトルや本文などが UTF-8 で送信される 差し込み印刷でタイトルは ANSI(SJIS) / 本文は UTF-8 で送信される Word 2016 からのテキスト形式のメールの送信では、Simple MAPIを使用しています。以下に記載する動作変更への対応として、Simple MAPI API が拡張され、従来 ANSI 用であった関数で UTF-8 が送信可能となっています。後述の通り、お手数をおかけしますが、メール アプリケーションを作成されている開発者様には、Simple MAPI の UTF-8 対応をお願いいたします。   1. Word 2016 でのテキストメールの UTF-8 への変更 Word 2013 まで、差し込み印刷や共有などの機能で Word からテキスト形式のメールを送信すると、タイトル、本文、添付ファイル名などの文字情報は、ANSI (SJIS) で送信されていました。しかしながら、グローバルで様々な言語を扱う上で ANSI では表現できない文字が多く、これらの文字への対応要望を多くいただいていました。…


Microsoft ストア アプリ版 Office 2016 (Centennial) での開発 – その1 – (DLL の読み込み)

こんにちは、Office 開発サポート チームの中村です。久しぶりの投稿になります。 このタイトルの記事では、新しい提供方法である「Microsoft ストア版 Office 2016」における、これまでの Office との違いについて、Office 開発観点から記載していきたいと思います。今後もこのテーマでは何度か投稿することになると思いますが、今回はまず、DLL 読み込み動作の違いについて記載します。   1. Microsoft ストア版 Office 2016 とは? Office 開発観点の話の前に、そもそも、Microsoft ストア版 Office 2016 とはどういうものかを簡単に説明します。 Office 2016 には色々なライセンス契約方式がありますが、これは単に契約上のみの違いではなく、販売方法によって、Office アプリケーション自体も異なる仕組みで提供されています。現在、以下の 3 種類の提供形式があります。   1-1. クイック実行 (C2R) 形式 Office 365、市販パッケージ (FPP)、以前のプレインストール (PIPC) がこの提供形式です。また、MSDN サブスクリプション契約でダウンロードできる検証用の Office 2016 も (プロダクト キーの入力などの認証方式はボリュームライセンスに一見見えますが) クイック実行形式です。 インターネットなどからサイズの小さいインストーラをダウンロードして実行し、インストールの中で実行モジュールのダウンロード等を行います。最低限の準備ができると Office を使い始めることができ、バックグラウンドで残りのインスト―ルが行われることから、クイック実行と呼ばれます。 Office 2016 では、現在このクイック実行形式が主流となっており、製品の修正、新機能の追加などは、基本的にこのクイック実行形式に対して行われます。 クイック実行形式は、Microsoft Application…


Excel / PowerPoint / Visio 2016 バージョン 1801 以降で WebBrowser コントロールがユーザーフォーム外に表示される

こんにちは、Office 開発サポート チームの中村です。 今回の記事では、ユーザーフォーム上に WebBrowser コントロールを貼り付けて利用している場合に、Windows 10 バージョン 1703 以降の OS で Office 2016 をバージョン 1801 以降に更新すると、WebBrowser コントロールがユーザーフォームの外に表示される動作について記載します。 2018/2/5 Update 本現象が発生する要因となる機能 (後述の「ディスプレイで最適な解像度を使用」) の有効化を延期しました。このため、本記事の内容は今後の更新で発生する可能性がある現象としてご案内します。現時点で、本機能の有効化時期は未定です。 2018/6/8 Update 月次チャネル バージョン 1805 (16.0.9226.2114) で本機能が有効化されました。当初公開時とオプション メニュー名などが変更されたため、記事内の画面キャプチャなどを最新の状態に更新しています。   再現手順 1. 新規 Excel ブックを作成し、Visual Basic Editor でユーザーフォーム (UserForm1) を追加して、WebBrowser コントロールとボタン コントロールを貼り付けます。   2. ボタン コントロールのクリック イベント ハンドラに以下のようなコードを記述します。 Private Sub CommandButton1_Click() UserForm1.WebBrowser1.Navigate2 (“http://www.microsoft.com”)…