|
はじめて質問させていただきます。
Excelで納品書作成や技術計算を行うマクロを組んでいます。
ExcelやAccessの機能にあるプルダウンボックスでリストのデータを呼び出すような操作と同様のプロセスを、ワークシート上のリストに実際に飛んでから選択し、コピペで目的のシートに持ってきて実現するプロシージャを利用しています。
つまり目的の計算をする場であるSheet1から実行してSheet2に用意されているリストにフォーカスが移って「待ち」になり、ユーザが該当データを選択すれば再実行されてSheet1の元の位置にコピペで持ってくるという初歩的なものです。
Excelで用意されているプルダウンボックス機能を利用するのに比べて、呼び出すデータの多くのフィールドやレコードを一度に確認できるので多用しておりまして、私としてはたいへん重宝しています。
このプロシージャの中の中核的なコードは
Set obj = Application.InputBox(prompt:="該当のdataを選んでちょうだい!",Left:=-10000, Top:=0, Type:=8)
であり、変数「obj」に選択したいデータ行のRangeオブジェクトを代入して、その変数の行番号を取得し、コピーするデータ範囲を決定することにしています。
ここでLeft:=-10000とあるのは、選択元のシート上該当データを探す際にInputBoxメソッドのダイアログボックス自体が邪魔なためであり、画面の表示範囲外にダイアログボックスの位置を指定することで実質的な非表示とし、選択元シート上に表示される破線(非表示ダイアログボックス上のコントロールと連動)のみで選択位置を確認してEnterキー実行し、変数「obj」に目的セルのオブジェクトを代入しています。
さて、Excel2003まではこのコードで問題なく目的の動作を実現できていましたが、2007以降になってLeft:=-10000が無効になり困っています。
つまりleftの数値に関わらず、画面の同じ中央付近の位置にダイアログボックスがずでんと現れてしまうのです。
現在2010の環境がありますので、InputBoxメソッドのTopやLeftに様々な数値を代入して実行してもダイアログボックスの位置はまったく変化がありません。
何か記載方法など2007以降は変化があるのでしょうか?
なお、Excel2010ヘルプのApplication.InputBoxメソッドの項に下記の記述があることは確認しています。
****************************
Left オプション バリアント型 (Variant) 画面の左上隅を基準として、ダイアログ ボックスの X 座標をポイント (ポイント: 印刷する文字のサイズ (高さ) を指定する基本単位。1 ポイントは、約 0.0353 cm (1/72 インチ) です。)単位で指定します。
Top オプション バリアント型 (Variant) 画面の左上隅を基準として、ダイアログ ボックスの Y 座標をポイント単位で指定します。
****************************
InputBox関数のxpos,yposは有効なのですが、こちらはオブジェクトを扱えないので、セル番地を手入力する必要が出てくると思われ、目的の機能を実現できないと考えています。
以上の観点からInputBoxメソッドのダイアログボックスの位置の操作方法についてご教示いただければ幸いです。よろしくお願いいたします。
|
|