2017-07-27 18 views
0

C#を使用して範囲にドロップダウンリストを追加しようとしています。C#はデータ検証のドロップダウンリストを有効にするthrowserror

これまで私が行ってきたことです。コードの3行目に

Worksheet ws = PPTAddIn.thisAddin2Obj.Application.ActiveWorkbook.ActiveSheet; 
      ws.get_Range("a1").Validation.Delete(); 
      ws.get_Range("a1").Validation.InCellDropdown = true; 
      ws.get_Range("a1").Validation.IgnoreBlank = true; 
      ws.get_Range("a1").Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertWarning, "opt1,opt2,opt3", Missing.Value); 

はHRESULTから例外
例外下にスロー:0x800A03EC

ErrorImage

これはSystem.RuntimeType.ForwardCallToInvokeMember(文字列memberNameの、のBindingFlagsにスタックトレース
ありますフラグ、オブジェクトターゲット、Int32 [] aWrapperTypes、MessageData & msgData) at Microsoft.Office.Interop.Excel.Validation.set_InCellDropdown(Boolean)D:\ MidasCloud \ CloudTFS \ ProductionPlanning \ MSP2 \ MS.ProductionPlanningTool.Excel \ UI \ Ribbon_PPT.csのMicrosoft.ProductionPlanningTool.Excel.Ribbon_PPT.ribbon_signin_Click(オブジェクト送信者、RibbonControlEventArgs e)の:Microsoft.Officeの行番号。 (RibbonComponentImplコンポーネント、Object [] args) at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallbackコールバック、ツールバーのリボンプロパティの表示、 Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、バインダーバインダー、Object []パラメーター、CultureInfoカルチャ) (Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Systemの )を参照してください。 Reflection.IReflect.InvokeMember(String name、BindingFlags invokeAtt)オブジェクトのターゲット、オブジェクトのターゲット、オブジェクトのターゲット[]、ParameterModifier []修飾子、CultureInfoカルチャ、String [] namedParameters)

答えて

1

一連のコマンド間違っています。 AddステートメントをDeleteステートメントの直後に移動します。検証が存在しない場合、Validationオブジェクトの他の値を設定することはできません。

Worksheet ws = PPTAddIn.thisAddin2Obj.Application.ActiveWorkbook.ActiveSheet; 
ws.get_Range("a1").Validation.Delete(); 
ws.get_Range("a1").Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertWarning, "opt1,opt2,opt3", Missing.Value); 
ws.get_Range("a1").Validation.InCellDropdown = true; 
ws.get_Range("a1").Validation.IgnoreBlank = true; 

側注:

操作の構文を取得するために、Excelでマクロレコーダーを使用してください。出力がVBAにある間、構文はコマンドを解読できず、C#に変換できないという違いはありません。 VBAはVB.NetにVBからC#へのコンバータがあなたがきれいにして使用できるコードを生成するのに十分近いVB.Netです。唯一の問題は、マクロレコーダーがSelectionオブジェクトを大量に使用することで、Selectionオブジェクトが表しているもの(おそらくExcel.Range)に変換する必要があります。また、VBのインデックス付きプロパティの修正を同等のメソッド呼び出し(つまり、:Range("a1") - >get_Range("a1"))。

編集:私はもともとAddステートメントの構文をチェックしていませんでしたが、パラメータがありません。 documentationから

とあなたのAdd staterment:

Add(XlDVType.xlValidateList, 
    XlDVAlertStyle.xlValidAlertWarning, 
    "opt1,opt2,opt3", 
    Missing.Value) 

あなたがOperatorパラメータが欠落している表示されます。マクロレコーダーを使用すると、既定値はXlFormatConditionOperator.xlBetweenであるように見えます。

Validationオブジェクトも定義し、それぞれのプロパティ/メソッドの設定/呼び出しにws.get_Range("a1").Validationの代わりにそのオブジェクトを使用する必要があります。

+0

これが正しいかどうかは今は確認できませんが、ガイドとしてVBAコードを取得する方法についてはアドバイスを+1してください。 OP、多くのVBA開発者は、私たちが忘れてしまったオブジェクトモデルのビットに対してこれを行います。それは補正のためのまともな出発点です... – MacroMarc

+0

私はそれを試みた...しかし、まだ同じ... –

+0

@CharithLankathilakeは、私の編集した情報を参照してください。 – TnTinMn

1

".InCellDropDown = true"をコードの最後に移動してみてください。

私は意味:

Worksheet ws = PPTAddIn.thisAddin2Obj.Application.ActiveWorkbook.ActiveSheet; 
      ws.get_Range("a1").Validation.Delete(); 
      ws.get_Range("a1").Validation.IgnoreBlank = true; 
      ws.get_Range("a1").Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertWarning, "opt1,opt2,opt3", Missing.Value); 
      ws.get_Range("a1").Validation.InCellDropdown = true; 

お役に立てば幸いです。これを見て取る

+0

ignoreblank行で例外がスローされます。 ignoreblank行を最後まで移動してから、addメソッドでスローしました。それは同じ例外をスローし続けます。 –

+0

こんにちはローランド、 ドロップダウンリストをセルに追加する方法はありますか? どんなアイデアも大いに評価されるでしょう... –

関連する問題