質問者
引数の省略の仕方

質問
-
.netからエクセルを開き、開いたエクセルのマクロを実行するということを
行っているのですが。
エクセルを開くapp.Workbooks.Open
エクセルマクロの実行app.Run
の所で引数を省略することはできるのでしょうか?
今は引数を省略するとエラーになってしまうのでType.Missingを入れています。
しかし、HELPなどを見ると引数を省略した書き方で書いてあったので省略できるのかなと思うのですが。
private void button1_Click(object sender, System.EventArgs e)
{
Excel.Application app = null;
Excel.Workbook wb = null;label1.Visible = true;
Refresh();try
{
app = new Excel.Application();
//エクセルファイル起動
wb = app.Workbooks.Open(@"E:\\\aaa.xls",
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);//エクセルマクロの実行
app.Run("SelectFile",Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,
Type.Missing);
//app.Visible=true;
wb.Save();MessageBox.Show("エクセルが作成されました。");
}
catch
{
MessageBox.Show("ファイルの起動に失敗しました", "実行エラー");
}
finally
{
//プロセス開放処理
System.GC.Collect();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
if(wb != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
}
label1.Visible = false;
}}
すべての返信
-
Hongliang さんからの引用 C# では引数の省略はサポートされていません。
…ですね。MSDN Library Japan > C# プログラミングリファレンス > 2-8 基本的なメソッド定義と呼び出し
/*
● for VB6
C# のメソッド呼び出しでは「名前付き引数」を使って、引数を渡すことはできません。つまり、2 つ以上の実引数がメソッドの仮引数にどう渡るかは、引数リストに記述された引数の順番で決まります。
*/どうしても名前付き引数を使って呼び出したい場合は、
Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
を使います。
…が、 Office の呼び出しでここまで面倒なことをやっているという例は、 聞いたことがないです。