配布した自作マクロでレジストリのIME関連部分が書き換わることがあるか?
Question 74.5 Previous Next
長文になります。 500連発第2弾NO.340「指定フォルダー内の全ファイル名を取得する」に関するものです。
詳細は こちら このせいかどうかわかりませんが、発端は私がExcel2000VBAを使って作成したファイルを、他人にあげたことから始まります。 なぜかIMEのレジストリーが変更されていました。
マイクロソフトに聞いて復旧できたようですが、一部戻っていないとのことです。その日の作業状態からこのエクセルファイルが原因である可能性は高いと思われます。

変更された内容は IMEが「英語系?」になってしまったようで、
 「( 」が入力できないとか、
 スペースキーで変換しないとか、
 ユーザー辞書がなくなったとかの障害が出た模様です。
障害は当初「秀丸」などを含む全部の変換で発生し、レジストリー修正後はマイクロソフト以外は正常ですが、エクセル・ワードでは「スペースキーで変換候補が出ない」状態らしく、これを解決する方法はまだ問い合わせていないとのことです。なおマイクロソフトでは同様の障害事例はないそうです。

プログラムの内容は、No.340を応用して指定フォルダー内のjpgファイル名を取得し、それからユーザーフォームで写真を出しながらコメントを書いて、エクセルシートに写真アルバムとして貼り付ける作業を行うためのものです。
これは、昨年完成させ既に相当使いこなしています(なかなか優れもので社内では大評判)が、私が今使っているIME2000及びOffice2000proでは全く問題ありません。
渡した相手はOSはWinXP、Excel2003、IME2003で東芝社製ノートPCだそうです。(東芝でも全くこの障害事例はなかったそうです。)
プログラムの一部に
[フォルダーの参照]ダイアログを表示するAPI関数
Public Declare Function SHBrowseForFolder Lib "shell32.dll" _
    Alias "SHBrowseForFolderA" (lpBROWSEINFO As BROWSEINFO) As Long

SHBrowseForFolderで得られた値からフォルダーのパスを取得するAPI関数
Public Declare Function SHGetPathFromIDList Lib "shell32.dll" _
    Alias "SHGetPathFromIDListA" _
    (ByVal pidl As Long, ByVal pszPath As String) As Long

メモリブロックを開放するAPI関数
Declare Function CoTaskMemFree Lib "OLE32.dll" _
    (ByVal pv As Long) As Long
と、dllに関与する記述がありますが、これがIMEの書き換えに影響することがあるのでしょうか?
追伸:
この日にそのノートPCに新たにインストールしたものはフリーソフトの「Lhaca120」と「縮小専用。version 1.50 」 を入れていましたが、これでレジストリーをいじった様子はありませんし、マイクロソフトでもソフトやVBAが原因とは考えにくいとのことでした。
Answer   Copyright (C) 2005.7.14 永井善王
340番は遠山文雄氏の作品ですが、監修を担当した私に質問されましたので、分かる範囲内でお答えします。
これを参考にして貴方が作成されたマクロは、「なかなか優れもので社内では大評判」、かつ、「昨年完成させ既に相当使いこなしています」とのこと、私にはマクロの全貌が分かりませんが、これらの実績から判断すると問題ないのではないでしょうか。

貴方がはっきり確認しておきたいことは、340番のAPI関数が利用している3つのDLLの内の OLE32.dll が レジストリのIME関連部分を書き換えるかどうか? かと思いますが、レジストリの読み込みや書き込みをAPI関数やWSHを使用して行うことは可能ではありますが、あなたが照会されたマイクロソフト社の見解と同様で、私も無関係と思います。

ただ、Windows XPのIMEでは左図のように、IME Standard 2003 か Natural Input 2003を選択できたりする等、使い勝手が前のバージョンのものとは相当変わっているようです。

そして、たくさんのソフトを立ち上げてあちこち入力していると、いつのまにかIMEの状態が変わってしまうこともあるようです。

さらに、最近では「Windows Update」機能により、詳細が十分知らされていない改良が自動的になされてしまい、戸惑うこともあるようです。

どうしても原因究明されたいようでしたら、フリーソフトだけをインストールした段階、そして、実行した段階ともに障害が発生しないこと。次に、340番のマクロを実行した段階で障害が発生した? というように、1つずつ絞り込んでいくことになろうかと思います。 何か分かりましたら是非ご連絡ください。できるだけお力になりますので。

Excel VBA Macro