LoginSignup
1
1

More than 1 year has passed since last update.

Excel VSTO での入力ダイアログは InputBox で?

Last updated at Posted at 2022-01-18

背景

業務改善でちょっとした作業を楽にしようとする場合の選択肢として、Local で VSTO 開発ってのがあります。

いつもはリボンにドラッグ&ドロップで必要な UI を配置していくだけで悩むこともないんですが、文字列の入力ダイアログを用意しようとしたら・・・ないって事に今日気付きました。OpenFileDialog とかなら普通にあるのにね。
image.png

リボン上で TextBox 配置して入力させるって手もあるんですが、流石に使いにくいので普段使いには微妙。
ってことで、標準?の InputBox を調べてみました。

結論

こいつ使うだけですね 😅

ちょっと使い方に悩んだので、補足的な情報を
まぁ、今回欲しかった文字列の入力には、Type = 2 ってだけでしたが。

Parameters

パラメーター は以下のように説明がある程度

image.png
InputBox 上ですぐわかる部分はこんな感じ。Left/Top で表示位置制御も出来るので、MessageBox よりは使いやすい?
ただ、HelpFile/HelpContextID は・・
Type によって、Default や Return Type が変わるので注意
image.png

Type

Type の補足はこんな感じ

image.png

実際の使用例

動画が途中でフォーカスずれてるのは御愛嬌

指定した型入力しかできないのかな?とか思ったけど、Formula はそもそも型でもなく、何のチェックされてるのかも不明

数値と論理については、型チェックされてる。
ただ、キャンセルされた時には、想定の型と違うので、対処必要。

エラーはなにかさっぱり分からない。

配列は、選択範囲の値が配列として取得出来てるように見えるが・・詳細は未調査。
Range を大量取得する場合、配列取得で高速化するわけだけど、この配列使うと速い・・かも?
そもそも値だけほしい時には便利かも。

数式

Type が 0 の場合、InputBox は =2*PI()/360 のようにテキストの形式で数式を返します。 数式に参照がある場合は、A1 形式の参照として返されます。 (参照形式の変換には、ConvertFormula を使用してください)。

If Type is 0, InputBox returns the formula in the form of text; for example, =2*PI()/360. If there are any references in the formula, they are returned as A1-style references. (Use ConvertFormula to convert between reference styles.)

数式の参照は、A1-style って話で英語説明も書いてあるが、取得はなんか違ってるので注意?
数式.gif

数値

数値.gif

文字列

論理値.gif

論理値

セル参照.gif

セル参照

文字列.gif

エラーと配列

エラーと配列.gif

コード例

利用例
        enum TypeValue
        {
            Formula = 0,    // 数式
            Number = 1,     // 数値
            String = 2,     // 文字列 (テキスト)
            Bool = 4,       // 論理値 (True または False)
            Range = 8,      // セル参照 (Range オブジェクト)
            Errors = 16,    // #N/A などのエラー値
            Array = 64,     // 値の配列
        }
        private void ButtonPoC4InputBox_Click(object sender, RibbonControlEventArgs e)
        {
            var result = Globals.ThisAddIn.Application.InputBox(TypeValue.Formula.ToString(), "Type 比較", Type.Missing, 50, 50, Type.Missing, Type.Missing, TypeValue.Formula);
            MessageBox.Show(result);
        }

GitHub

VSTO で試行した記録も残しておかないとねってことで。

keyword

how to use Excel.Application.InputBox in VSTO

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1