visual validated tamaño que programar font eventos evento ejemplo control cambiar c# .net excel user-controls vsto

validated - Obtener un control de un control NamedRange en C#



textbox c# (1)

No hay problema con el tipo de objeto que se devuelve. Se debe acceder al tipo "Microsoft.Office.Tools.Excel.NamedRangeImp" ​​a través de la interfaz "Microsoft.Office.Tools.Excel.NamedRange".

La excepción COM de 0x800A03EC me sugiere que Excel no le permitirá realizar la operación solicitada (este es también el código de error que obtendrá si intenta, por ejemplo, enviar un valor de cadena a una celda que excederá el límite de caracteres) .

No hay ningún problema al establecer la propiedad RefersTo varias veces, como lo verifiqué al ejecutar el siguiente código:

Microsoft.Office.Tools.Excel.Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.MercuryAddIn.Application.ActiveWorkbook.ActiveSheet); Excel.Range cell = worksheet.Range["A1"]; Microsoft.Office.Tools.Excel.NamedRange r = worksheet.Controls.AddNamedRange(cell, "HeaderCells"); r.RefersTo = "=" + worksheet.Name + "!$A$1:$A$5"; r.RefersTo = "=" + worksheet.Name + "!$C$1:$C$5";

Entonces, el problema debe estar en la cadena contenida en su variable "newHeaderCellsLocation". RefersTo se debe establecer en una fórmula válida para un rango. ¿Puedes verificar que la cadena está en el formato correcto?

Estoy desarrollando un AddIn para Excel 2007 a nivel de aplicación usando C # (.NET 4.0). Preguntas similares a esta han sido previamente preguntadas >>

https://stackoverflow.com/questions/11374023/resizing-namedrange-throws-a-controlnotfoundexception

C # excel addin - Acceso a los controles

pero las respuestas a ellos (donde los hubo) no funcionaron para mí. Así que me gustaría dar una descripción detallada de lo que estoy tratando de hacer, y lo que sucede cuando trato de hacerlo.

Muy brevemente, mi problema es que no puedo acceder a los objetos de control de NamedRange para modificarlos, después de que se han instanciado e inicializado en otro lugar del código.

Por favor, sigue leyendo para una descripción más completa.

Cuando se inicia AddIn, crea un control NamedRange y lo asocia a algunas celdas de una hoja de trabajo en particular >>

Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet); Excel.Range cell = worksheet.Range["A1"]; _configParams.HeaderNamedRange = worksheet.Controls.AddNamedRange(cell, "HeaderCells"); _configParams.HeaderNamedRange.RefersTo = "=" + worksheet.Name + "!$A$1:$A$5";

Después de que se haya iniciado AddIn, quiero permitir que el usuario vuelva a especificar las celdas a las que puede apuntar este control NamedRange. Para hacerlo, le pido al usuario que seleccione un rango de celdas y luego obtenga la ubicación de las celdas seleccionadas (como una cadena) en un método adecuado de controlador de eventos.

Luego tengo la intención de volver a especificar mediante programación las celdas a las que apunta el control NamedRange anterior. He intentado los siguientes enfoques, pero ninguno de ellos funciona.

[Enfoque 1]

Worksheet controlWorksheet = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet); ((NamedRange)(controlWorksheet.Controls["HeaderCells"])).RefersTo = newHeaderCellsLocation;

Al ejecutar el código anterior, lanza una ControlNotFoundException, y aparece el siguiente mensaje:

Microsoft.VisualStudio.Tools.Applications.Runtime.ControlNotFoundException was unhandled by user code Message=This document might not function as expected because the following control is missing: PortfolioHeaderCells. Data that relies on this control will not be automatically displayed or updated, and other custom functionality will not be available. Contact your administrator or the author of this document for further assistance. Source=Microsoft.Office.Tools.Excel.Implementation StackTrace: at Microsoft.Office.Tools.Excel.NamedRangeImpl.GetObjects() at Microsoft.Office.Tools.Excel.NamedRangeImpl.EnsureProxy() at Microsoft.Office.Tools.Excel.NamedRangeImpl.get_Proxy() at Microsoft.Office.Tools.Excel.NamedRangeImpl.AttachSupport() at Microsoft.Office.Tools.Excel.NamedRangeImpl.ResetControl() at Microsoft.Office.Tools.Excel.NamedRangeImpl.set_RefersTo(String value) at ExcelListenerAddIn.Configuration.ListenerConfigManager.ActivateListenerConfiguration(ListenerConfigParams newConfiguration, Boolean cameFromConfigFile) in C:/Users/jag201/Documents/Visual Studio 2010/Projects/PoC/ExcelListenerAddIn/Configuration/ListenerConfigManager.cs:line 97 at ExcelListenerAddIn.TaskPanes.ListenerConfigurator._activateNewConfigButton_Click(Object sender, EventArgs e) in C:/Users/jag201/Documents/Visual Studio 2010/Projects/PoC/ExcelListenerAddIn/TaskPanes/ListenerConfigurator.cs:line 131 at System.EventHandler.Invoke(Object sender, EventArgs e) at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException: System.Runtime.InteropServices.COMException Message=Exception from HRESULT: 0x800A03EC Source=Microsoft.VisualStudio.Tools.Office.Runtime ErrorCode=-2146827284 StackTrace: at Microsoft.VisualStudio.Tools.Office.Runtime.Interop.IHostItemProvider.GetHostObject(String primaryType, String primaryCookie, IntPtr& hostObject) at Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.Microsoft.Office.Tools.IHostItemProvider.GetHostObject(Type primaryType, String primaryCookie) at Microsoft.Office.Tools.Excel.NamedRangeImpl.GetObjects() InnerException:

[Enfoque 2]

Luego vi Set Excel Named Ranges a través de C #? y entonces traté de usar el enfoque descrito en la respuesta allí:

Worksheet controlWorksheet = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet); controlWorksheet.Names.Item("HeaderCells", Type.Missing, Type.Missing).RefersTo = newHeaderCellsLocation;

Al ejecutar el código anterior, recibo la siguiente excepción y mensaje:

System.Runtime.InteropServices.COMException was unhandled by user code Message=Exception from HRESULT: 0x800A03EC Source="" ErrorCode=-2146827284 StackTrace: at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Microsoft.Office.Interop.Excel.Names.Item(Object Index, Object IndexLocal, Object RefersTo) at ExcelListenerAddIn.Configuration.ListenerConfigManager.ActivateListenerConfiguration(ListenerConfigParams newConfiguration, Boolean cameFromConfigFile) in C:/Users/jag201/Documents/Visual Studio 2010/Projects/PoC/ExcelListenerAddIn/Configuration/ListenerConfigManager.cs:line 97 at ExcelListenerAddIn.TaskPanes.ListenerConfigurator._activateNewConfigButton_Click(Object sender, EventArgs e) in C:/Users/jag201/Documents/Visual Studio 2010/Projects/PoC/ExcelListenerAddIn/TaskPanes/ListenerConfigurator.cs:line 131 at System.EventHandler.Invoke(Object sender, EventArgs e) at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException:

Entonces, en ambos enfoques, la excepción de HRESULT es la misma: 0x800A03EC. Además, la excepción se lanza a la línea donde trato de obtener el control NamedRange y volver a especificar las celdas a las que apunta.

He revisado mi código y existe un control NamedRange donde / cuando intento modificar el objeto NamedRange.

Luego verifiqué el tipo del objeto controlWorksheet.Controls["HeaderCells"] usando el siguiente código >>

Worksheet controlWorksheet = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet); System.Windows.Forms.MessageBox.Show((controlWorksheet.Controls["HeaderCells"]).ToString());

Esto da como resultado un MessageBox que contiene "Microsoft.Office.Tools.Excel.NamedRangeImpl". Si no me equivoco, este Tipo no está expuesto por el Modelo de objetos de Excel, por lo que me pregunto si el problema se debe a que he lanzado un objeto NamedRangeImpl a un objeto de control NamedRange.

Su ayuda es muy apreciada. Si hay más información que puedo proporcionar, házmelo saber. ¡Gracias por adelantado!