2011-06-22 10 views
9

Estoy considerando implementar un complemento de Excel utilizando COM (no VBA) que manipulará los datos en la hoja de trabajo.Complemento de Excel con Deshacer sin problemas: posible?

Voy a necesitar este complemento para integrarlo sin problemas con la pila Deshacer. Más específicamente:

  1. Cualquier cambio este complemento hace que los datos tienen que ser undoable por el usuario (a través de la acción estándar Deshacer)
  2. Los elementos de la pila de deshacer antes de que el complemento acción tiene lugar debe ser preservado

En mi (aunque superficial) investigación hasta el momento, no está claro si Excel puede permitir esto. Si no lo hace, se trata de un evento espectacular, y el complemento no tendrá ningún valor.

Mi pregunta: ¿es posible? Esta es más una pregunta de "sí o no" que una pregunta de "cómo", ya que necesito saber si me estoy embarcando en una búsqueda inútil o no. Sin embargo, cualquier sugerencia sobre cómo se puede hacer sería una ventaja.

+0

¿Está utilizando un componente para esto, he utilizado 'add-in express' y me funcionó bien. – Johan

+0

Sí, considerando usar add-in express.Sin embargo, su aplicación de demostración no admite deshacer, y borra la pila de deshacer. Estoy tratando de averiguar si hay una forma de evitar esto. – kes

+0

Puede preguntarles, su servicio de ayuda es bastante receptivo. En mi experiencia, generalmente responden dentro de las 24 horas. – Johan

Respuesta

4

Parece que no es posible después de todo.

El método Application.OnUndo borra la pila de deshacer actual y se coloca en la parte superior.
No parece haber nada más relacionado con la personalización de deshacer.

Es posible.

Application.OnUndo registra un sub deshacer para el sub está ejecutando actualmente:

sub ImMakingChanges() 
    cells(1,1).interior.color = vbyellow 
    application.onundo "Undo the stupid color", "RemoveMyStupidChanges" 
end sub 

sub RemoveMyStupidChanges() 
    cells(1,1).interior.colorindex = xlnone 
end sub 

Obviamente, el ahorro de un estado anterior en la naturaleza en general es una pesadilla. Pero aquí tienes.

Además, su sub de deshacer tendrá que ser visible para el público en general para que Excel pueda encontrarlo y llamarlo.

+1

¿Application.OnUndo conserva la pila actual y la agrega? – kes

+0

@scrapdog Esa fue mi impresión. Resulta que estaba equivocado. – GSerg

0

Parece que es posible, después de todo

Esto se puede hacer, pero usted tendrá que escribir un controlador de deshacer bastante involucrados. Aquí hay un enlace que también le dirá exactamente cómo
: http://www.jkp-ads.com/Articles/UndoWithVBA01.asp

Por suerte el enlace tiene el código fuente completo y se ve blindado por lo que no debería tener problemas.
Estaré encantado de escuchar cómo/si esto funcionó para usted.

PS: aquí está el mismo enlace en holandés: http://www.jkp-ads.com/Articles/UndoWithVBA01NL.asp

+0

Revisado el código, es una especie de cola de deshacer completamente personalizada. Eso no puede reemplazar sin problemas la pila de deshacer predeterminada o integrarse con ella. Ese es el objetivo de la pregunta. – GSerg

+0

Más precisamente, usando una pila de estas clases, puede escribir fácilmente un sub que puede registrar con 'Application.OnUndo', pero las acciones del usuario se perderán de todos modos. – GSerg

1

Al parecer, esto es no posible y no hay planes de apoyo a él, incluso en Office 2013, de acuerdo con la respuesta de un empleado MSFT en esto thread.

Cuestiones relacionadas