2017-07-27 50 views
0

我想將下拉列表添加到使用c#的範圍。C#excel數據驗證下拉列表throwserror

這是我迄今爲止所做的。

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(字符串成員名稱,的BindingFlags標記,對象目標,Int32 [] aWrapperTypes,MessageData & msgData) at Microsoft.Office.Interop.Excel.Validation.set_InCellDropdown(Boolean) at MS.ProductionPlanningTool.Excel.Ribbon_PPT.ribbon_signin_Click(Object sender,RibbonControlEventArgs e)in D:\ MidasCloud \ CloudTFS \ ProductionPlanning \ MSP2 \ MS.ProductionPlanningTool.Excel \ UI \ Ribbon_PPT.cs:line 1328 at Microsoft.Office。 Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control) at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component,Object [] args) at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback,對象[] args) at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture) at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System。 Reflection.IReflect.InvokeMember(String name,BindingFlags invokeAtt r,Binder binder,Object target,Object [] args,ParameterModifier []修飾符,CultureInfo culture,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#轉換器將產生可以清理和使用的代碼。唯一的問題是宏記錄器大量使用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行移動到最後,然後它拋出添加方法。它繼續拋出相同的異常。 –

+0

嗨羅蘭, 有沒有其他的方式來添加下拉列表到單元格? 任何想法將不勝感激... –