Id. de artículo: 201095 - Última revisión: sábado, 19 de noviembre de 2005 - Versión: 2.5

OL: Cómo utilizar CommandBars en soluciones de Outlook

En esta página

Expandir todo | Contraer todo

Resumen

Aunque Microsoft Outlook utiliza el mismo CommandBars que utilizan otras aplicaciones de Microsoft Office, CommandBars están implementados en una forma diferente en Outlook. Este artículo describe las diferencias de implementación CommandBar, para que los desarrolladores pueden entender mejor cómo trabajar con CommandBars al diseñar una solución de Outlook.

Más información

En Office, menús y barras de herramientas de cada aplicación de Office se representan mediante un modelo de objetos CommandBars. CommandBars son un componente de Office compartido y el modelo de objetos se proporciona en la biblioteca de objetos Microsoft Office 10.0. El modelo de objetos CommandBars no está contenido en el modelo de objetos de Outlook; en su lugar, el objeto de Outlook "túneles" a la biblioteca de objetos de Microsoft Office 10.0 para esta funcionalidad.

Arquitectura de Outlook CommandBar

Otras aplicaciones de Office admiten un conjunto de CommandBars, pero Outlook admite dos: una establecida en la ventana de aplicación principal y un segundo conjunto de cada elemento individual.

Desde punto de vista un programador de, la ventana principal de Outlook (la ventana de aplicación) se conoce como "explorador".

importante : estas ventanas también se pueden considerar ventanas de nivel de carpeta porque haga clic con el botón secundario en cualquier carpeta y, a continuación, haga clic en Abrir en ventana nueva para abrir ventanas diferentes para trabajar con carpetas diferentes.

Además de estas ventanas de explorador, cada elemento de Outlook tiene una ventana de formulario que se denomina "inspector". Estas ventanas de inspector también tienen un conjunto de CommandBars porque los elementos tienen menús y barras de herramientas.

Utilice los objetos diferentes como sigue:
  • Utilice los objetos Explorer (ActiveExplorer/GetExplorer) para hacer referencia a la ventana de aplicación principal de Outlook.
  • Utilice los objetos Inspector (ActiveInspector/GetInspector) para hacer referencia a la ventana de un elemento de Outlook.
                 |  To refer to the                  |  To refer to a folder
   Window type   |  "active" window                  |  or item's window
   ---------------------------------------------------------------------------------
   Application   |  Use the ActiveExplorer method.   |  Use the GetExplorer method.
                 |                                   |
   Item or Form  |  Use the ActiveInspector method.  |  Use the GetInspector method.
				

Consideraciones al utilizar Microsoft Word como editor de correo electrónico

Al diseñar una solución de Outlook CommandBar para elementos de correo, es importante que comprenda que se usan diferentes CommandBars cuando Microsoft Word está configurado como editor de correo electrónico. Algunos puntos clave que debe tener en cuenta cuando utiliza Word como editor de correo electrónico son:
  • CommandBars forman parte de Word, no en Outlook.
  • CommandBars diferentes están disponibles según el editor de mensajes y el formato.
  • Los botones personalizados pueden desaparecer al cambiar el editor de mensajes o formato.
  • CommandBar Sobres especial no está diseñado para personalizarse.
  • No hay ningún objeto Inspector para los formatos HTML y texto sin formato con Office 2000 si Word está configurado como editor de correo electrónico.
El CommandBars disponibles pueden cambiar en función en los editores diferentes (Outlook frente a Word) y formatos de mensaje diferente (RTF, HTML y texto sin formato); por lo tanto, es importante que pruebe exhaustivamente la solución en cada configuración. Porque diferentes CommandBars están disponibles en configuraciones diferentes, es habitual que un botón Agregar en una configuración que ya no aparecerá después de cambiar a otra configuración. Con Word establecido como editor de correo electrónico, la aplicación Word proporciona el nivel de elemento (inspector) CommandBars. Aunque algunos de estos CommandBars de Word son accesibles a través del objeto Inspector si utiliza Microsoft Office 2002, no es el caso de Microsoft Office 2000. En Office 2000, los mensajes HTML y texto sin formato no tienen objetos Inspector si utiliza Word como editor de correo electrónico; por lo tanto, deberá tener acceso a la CommandBars mediante el modelo de objetos de Word. La ubicación de almacenamiento de las personalizaciones de CommandBar también en que los cambios se basan en la aplicación que proporciona el CommandBars. Personalizaciones que realice en el estándar CommandBars de Outlook se almacenan en el archivo Outcmd.dat. Las personalizaciones que realice a la CommandBars de Word se almacenan en la plantilla global Word Normal.dot.

Word también proporciona dos conjuntos diferentes de CommandBar tecnologías basadas en el formato del mensaje de correo electrónico. En Office 2002, todos los formatos de mensaje utilizan CommandBar Sobres especializado de forma predeterminada, pero en Office 2000, sólo HTML y los mensajes de texto sin formato utilizan el control CommandBar Sobres . CommandBar Sobres contiene características que son específicas al correo electrónico, como los Enviar mensaje y el botón campos ( para , CC y Asunto ). El control CommandBar Sobres no se muestra en la lista de barras de herramientas de Word y no está diseñado para personalizarse. Por lo tanto, debe realizar cualquier modificación a otros CommandBars. Office 2000 se controla los mensajes RTF diferente y se utiliza el Outlook enviar y Leer correo de Outlook CommandBars para redactar y leer mensajes. Aunque Office 2002 formatos de mensaje no utilizan el Outlook enviar y Leer correo de Outlook CommandBars de forma predeterminada, puede diseñar un formulario de Outlook personalizado que utiliza estos CommandBars. Para configurar el formulario para que utilice Word como editor de correo electrónico, en modo de diseño de formulario, haga clic en la ficha de Propiedades del formulario y haga clic para seleccionar Usar siempre Microsoft Word como editor de correo electrónico .

Historial de soporte de Outlook para menús personalizables y barras de herramientas

CommandBars se diseñaron originalmente para aplicaciones centradas en documentos, tales como Word y Microsoft Excel, que admite un único conjunto de CommandBars de nivel de aplicación. Las demás aplicaciones admiten totalmente todas las características del diseño CommandBars y en Microsoft Office 97 y versiones posteriores, las demás aplicaciones totalmente compatible con muchos aspectos de la personalización de CommandBars. Sin embargo, Outlook ha continuado admitir CommandBars es varias formas:
  • En Microsoft Outlook 97, no se puede personalizar menús y barras de herramientas mediante la interfaz de usuario de Outlook. Outlook 97 no está diseñado para almacenar los cambios realizados en CommandBars. Aunque el modelo de objetos CommandBars se muestran en el modelo de objetos de Outlook, no puede utilizar el modelo de objetos CommandBars para modificar los menús o barras de herramientas porque se encuentren en un estado "sólo lectura". Sin embargo, puede utilizar el método Execute para ejecutar mediante programación un comando integrado de Outlook. La única forma de crear adicionales de los botones o comandos de menú en Outlook 97 es crear una extensión de cliente de Microsoft Exchange en C o C++.
  • En Microsoft Outlook 98, Microsoft recomienda que no mediante programación realice cambios en el modelo de objetos CommandBars. Menús y barras de herramientas son personalizables en la interfaz de usuario de Outlook. Las personalizaciones se almacenan en un archivo denominado Outcmd.dat. Sin embargo, aunque el modelo de objetos CommandBars se exponen en el modelo de objetos de Outlook, y puede agregar mediante programación nuevos botones de barra de herramientas y comandos de menú, esta característica no se ha diseñado o probado para que funcione realmente. Como resultado, puede experimentar problemas si utiliza el modelo de objetos CommandBars en Outlook 98. Outlook 98 no admite Microsoft Visual Basic para aplicaciones (VBA) o código de nivel de aplicación. Por tanto, si agrega mediante programación un comando personalizado a una ventana de nivel de aplicación o explorador, no hay ninguna manera de adjuntar código personalizado al botón. Si agrega mediante programación un comando personalizado a una ventana de nivel de elemento o inspector, puede hacer que el botón Ejecutar secuencia de comandos personalizada de Microsoft Visual Basic Scripting Edition (VBScript) en el formulario, pero se producirán problemas que provocan el botón para mostrarse en otros tipos de elementos y puede haber diferencias entre los nuevos elementos de apertura y los elementos existentes.
  • Outlook 2000 es la primera versión de Outlook que está diseñado para admitir barras de herramientas personalizables mediante programación y menús. Esto coincide con la adición de compatibilidad con complementos VBA y modelo de objetos componentes (COM).

CommandBars y el modelo de objetos de Outlook

En los modelos de objetos de otras aplicaciones de Office, la colección CommandBars se encuentra fuera del objeto Application porque esas aplicaciones admiten sólo un conjunto de CommandBars de nivel de aplicación. Sin embargo, el modelo de objetos de Outlook está diseñado para admitir los dos conjuntos de CommandBars que Outlook admite (inspector y Explorer).

En el modelo de objetos de Outlook, la colección CommandBars se encuentra fuera de objetos Explorer e Inspector, no el objeto Application de Outlook. Muchos ejemplos de código están disponibles que ilustran cómo a mediante programación realizar cambios en CommandBars; sin embargo, la mayoría de estos ejemplos está diseñada para otras aplicaciones de Office. Para utilizar estos ejemplos en Outlook, debe modificar el código adecuadamente para reflejar la diferencia en el modelo de objetos de Outlook.

Soluciones de formulario personalizado

En una solución de formulario personalizado que utiliza VBScript, tiene acceso normalmente a CommandBars el nivel de formulario utilizando código similar a:
Set objCBs = Item.GetInspector.CommandBars
				

Un ejemplo de VBScript para ejecutar un comando de Outlook

Puede utilizar el siguiente ejemplo de código con un control CommandButton en un formulario de contacto para crear fácilmente una nueva carta para un contacto:
Sub CommandButton1_Click()
   Set MyCB = Item.GetInspector.CommandBars.Item("Menu Bar")
   Set MyMenu = MyCB.Controls("Actions")
   Set MyMenuItem = MyMenu.Controls("New Letter to Contact")
   MyMenuItem.Execute()
End Sub
				

Un ejemplo de VBScript que utiliza el método de "FindControl"

Si conoce el valor interno que Outlook ha asignado para cada comando, puede utilizar el método FindControl para hacer referencia cualquier comandos de Outlook (o controles, en relación con el modelo de objeto CommandBars). Si utiliza el identificador interno, puede utilizar sintaxis más concisa cuando ejecuta comandos CommandBar y puede tener acceso a comandos que no esté en el menú o barra de herramientas que se muestra.

Por ejemplo, considere la posibilidad de un formulario de Outlook personalizado que utiliza un botón de comando personalizado para imprimir el formulario. Suponiendo que el botón de comando se denomina cmdPrint, cualquiera de los siguientes dos ejemplos de código de VBScript muestra el cuadro de diálogo de Imprimir de archivo :
Sub cmdPrint_Click()
   Item.GetInspector.CommandBars.FindControl(,4).Execute
End Sub

Sub cmdPrint_Click()
   Item.GetInspector.CommandBars.Item("Menu Bar").Controls("File") _
      .Controls("Print...").Execute
End Sub
				
para obtener un ejemplo de cómo generar una lista de Outlook CommandBar identificadores de control, vea el ejemplo de Excel en la sección "Using an Excel Utility to Generate a List of Outlook CommandBar IDs" de este artículo.

Soluciones de aplicación

En una solución de nivel de aplicación, como VBA de Outlook o un complemento COM, el método típico para tener acceso el CommandBars de nivel de aplicación es utilizar código similar al:
Set objCBs = Application.ActiveExplorer.CommandBars
				

Visual Basic para aplicaciones

VBA de Outlook está diseñado para ser una herramienta de desarrollo personal; estos tipos de soluciones no están diseñados para implementarse. Por lo tanto, normalmente, no mediante programación personalizaría CommandBars de VBA de Outlook. En su lugar, cree manualmente el botón de CommandBar personalizado:
  1. En el menú Herramientas , haga clic en Personalizar .
  2. Haga clic en la ficha comandos y, a continuación, haga clic en macros en la lista de categorías.
  3. Arrastre una macro hasta el menú o barra de herramientas.
  4. Para modificar el aspecto de la barra de herramientas o menú comando, en la ventana Personalizar , haga clic en Modificar selección y, a continuación, realizar las modificaciones en la barra de herramientas o comando de menú personalizado.
  5. Haga clic en Cerrar .

Un ejemplo VBA para agregar un Control CommandBar

Para agregar un control CommandBar:
  1. Crear un formulario de ejemplo personalizado posterior de Outlook y, a continuación, publicarlo a la Bandeja de entrada. Nombre formularioDePrueba .
  2. En el menú Herramientas , elija macro y, a continuación, haga clic en Editor de Visual Basic .
  3. En el proyecto ? Proyecto1 , haga doble clic en Proyecto1 , haga doble clic en Microsoft Outlook objetos y, a continuación, haga doble clic en ThisOutlookSession .
  4. En la ventana código, escriba el siguiente código:
    Dim WithEvents myControl As CommandBarButton
    
    Private Sub Application_Startup()
    
       Dim oExp As Outlook.Explorer
       Dim oBar As Office.CommandBar
    
       Set oExp = Outlook.ActiveExplorer
       Set oBar = oExp.CommandBars.Item("Standard")
    
       ' See if button already exists based on Tag value
       Set myControl = oBar.FindControl(, , "OpenForm")
    
       ' If not found then create button
       If myControl Is Nothing Then
          Set myControl = oBar.Controls.Add(, , , 2, True)
          With myControl
             .Caption = "Open Form"
             .FaceId = 59
             .Style = msoButtonIconAndCaption
             .Tag = "OpenForm"
             .Visible = True
          End With
       End If
    
    End Sub
    
    Private Sub myControl_Click(ByVal Ctrl As _
          Office.CommandBarButton, CancelDefault As Boolean)
          
       Dim myFolder As MAPIFolder
    
       Set myFolder = Session.GetDefaultFolder(olFolderInbox)
       Set MyItem = myFolder.Items.Add("IPM.Post.TestForm")
       MyItem.Display
    
       Set MyItem = Nothing
       Set myFolder = Nothing
    
    End Sub
    					
  5. Cierre el Editor de Visual Basic.
  6. Cierre Outlook. Cuando se le pida guardar los cambios en el proyecto de VBA, haga clic en .
  7. Inicie Outlook.

Un ejemplo de complemento COM para agregar un Control CommandBar

La forma compatible de distribuir código de nivel de aplicación a los usuarios de Outlook es crear un complemento. El siguiente COM add - en código de ejemplo muestra cómo agregar un nuevo botón a la primera posición en el CommandBar estándar de Outlook (también puede establecer la propiedad OnAction del botón para cargar el complemento si no está ya cargado):
Dim OL As Outlook.Application
Dim WithEvents objButton As Office.CommandBarButton

Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
   ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
   ByVal AddInInst As Object, custom() As Variant)

   Dim objBar As Office.CommandBar
   Set OL = Application
   Set objBar = OL.ActiveExplorer.CommandBars.Item("Standard")
   Set objButton = objBar.Controls.Add(, , , 1, True)
   With objButton
      .FaceId = 59
      .Caption = "My Button"
      .Style = msoButtonIconAndCaption

      ' The OnAction property is optional but recommended. 
      ' It should be set to the ProgID of the add-in, such that if
      ' the add-in is not loaded when a user presses the button,
      ' Outlook loads the add-in automatically and then raises
      ' the Click event for the add-in to handle. 

      .OnAction = "!<" & AddInInst.ProgId & ">"
   End With

End Sub

Private Sub objButton_Click(ByVal Ctrl As Office.CommandBarButton, _
   CancelDefault As Boolean)

   MsgBox "Hello World"

End Sub
				
Para obtener información adicional sobre los recursos disponibles para crear complementos para Outlook, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
230225  (http://support.microsoft.com/kb/230225/EN-US/ ) OL2000: Cómo crear un complemento COM para Outlook

Utilizar una utilidad de Microsoft Excel para generar una lista de identificadores de CommandBar de Outlook

Puede utilizar el siguiente código de VBA de Excel de Microsoft para generar una hoja de cálculo que contiene una lista de comandos de Outlook y sus correspondientes identificadores de controles CommandBar. El código agrega un Autofiltro de Excel a la hoja de cálculo para que pueda encontrar fácilmente el identificador que está buscando.

Para configurar esta utilidad:
  1. Inicie Excel. Asegúrese de que se encuentra en un nuevo libro de Excel.
  2. En el menú Herramientas , elija macro y, a continuación, haga clic en Editor de Visual Basic .
  3. En la ventana del editor del explorador de proyectos, haga doble clic en ThisWorkbook para abrir una ventana de código.
  4. En la ventana código, escriba el siguiente código:
    Option Explicit
    Dim oOutApp As Outlook.Application
    Dim I As Long
    Dim iRowCount As Long
    Dim oItm As Object ' so it'll handle varying item types
    Dim oSheet As Excel.Worksheet
    Dim oNS As Outlook.NameSpace
    Dim oFld As Outlook.MAPIFolder
    
    Sub GetOutlookCommandBarIDs()
    
    If MsgBox("This will clear the current worksheet, OK to continue?", vbOKCancel) = 1 Then
       
       Cells.Select
       Selection.ClearContents
       
       iRowCount = 0
       Set oSheet = ActiveSheet
       Set oOutApp = New Outlook.Application
       Set oNS = oOutApp.Session
       
       Set oItm = oOutApp.CreateItem(olMailItem)
       GetInspectorIDs oItm, "Mail Message"
       Set oItm = oOutApp.CreateItem(olPostItem)
       GetInspectorIDs oItm, "Post"
       Set oItm = oOutApp.CreateItem(olContactItem)
       GetInspectorIDs oItm, "Contact"
       Set oItm = oOutApp.CreateItem(olDistributionListItem)
       GetInspectorIDs oItm, "Distribution List"
       Set oItm = oOutApp.CreateItem(olAppointmentItem)
       GetInspectorIDs oItm, "Appointment"
       Set oItm = oOutApp.CreateItem(olTaskItem)
       GetInspectorIDs oItm, "Task"
       Set oItm = oOutApp.CreateItem(olJournalItem)
       GetInspectorIDs oItm, "Journal Entry"
       
       Set oFld = oNS.GetDefaultFolder(olFolderInbox)
       GetExplorerIDs oFld, "Mail Folder"
       Set oFld = oNS.GetDefaultFolder(olFolderContacts)
       GetExplorerIDs oFld, "Contact Folder"
       Set oFld = oNS.GetDefaultFolder(olFolderCalendar)
       GetExplorerIDs oFld, "Calendar Folder"
       Set oFld = oNS.GetDefaultFolder(olFolderTasks)
       GetExplorerIDs oFld, "Task Folder"
       Set oFld = oNS.GetDefaultFolder(olFolderJournal)
       GetExplorerIDs oFld, "Journal Folder"
       Set oFld = oNS.GetDefaultFolder(olFolderNotes)
       GetExplorerIDs oFld, "Notes Folder"
       
       Selection.AutoFilter
       Cells.Select
       Cells.EntireColumn.AutoFit
       Range("A1").Select
    
       MsgBox "The spreadsheet is complete."
       
    End If
    
    End Sub
    
    
    Sub GetInspectorIDs(oItm, sType As String)
       Dim oCBs As Office.CommandBars
       Dim oCtl As Office.CommandBarControl
       Set oCBs = oItm.GetInspector.CommandBars
       For I = 1 To 35000
          Set oCtl = oCBs.FindControl(, I)
          If Not (oCtl Is Nothing) Then
             iRowCount = iRowCount + 1
             oSheet.Cells(iRowCount, 1) = "Inspector"
             oSheet.Cells(iRowCount, 2) = sType
             oSheet.Cells(iRowCount, 3) = oCtl.Parent.Name
             oSheet.Cells(iRowCount, 4) = oCtl.Caption
             oSheet.Cells(iRowCount, 5) = CStr(I)
          End If
       Next
    End Sub
    
    
    Sub GetExplorerIDs(oFld As Outlook.MAPIFolder, sType As String)
       Dim oCBs As Office.CommandBars
       Dim sFilter As String
       Dim oCtl As Office.CommandBarControl
       Set oCBs = oFld.GetExplorer.CommandBars
       For I = 1 To 35000
          Set oCtl = oCBs.FindControl(, I)
          If Not (oCtl Is Nothing) Then
             iRowCount = iRowCount + 1
             oSheet.Cells(iRowCount, 1) = "Explorer"
             oSheet.Cells(iRowCount, 2) = sType
             oSheet.Cells(iRowCount, 3) = oCtl.Parent.Name
             oSheet.Cells(iRowCount, 4) = oCtl.Caption
             oSheet.Cells(iRowCount, 5) = CStr(I)
          End If
       Next
    End Sub
    					
  5. En el menú Herramientas , haga clic en referencias . En la lista de bibliotecas de objetos disponibles, haga clic en Biblioteca de objetos de Microsoft Outlook 10.0 y a continuación, haga clic en Aceptar .
  6. Cierre el Editor de Visual Basic.
  7. Guardar el libro de Excel para que tenga para uso futuro.
Para generar la lista de identificadores:
  1. Asegúrese de que la configuración de seguridad de Excel permite que se ejecute la macro. En el menú Herramientas , haga clic en seguridad y, a continuación, asegúrese de que la configuración se establecido en medio o bajo , por lo menos temporalmente. Si cambia la configuración de alta , debe reiniciar Excel.
  2. Abra el libro que ha creado al configurar la utilidad de Excel.
  3. En el menú Herramientas , elija macro y, a continuación, haga clic en macros . Haga clic en la macro GetOutlookCommandBarIDs y, a continuación, haga clic en Ejecutar .
  4. Espere mientras se genera la hoja de cálculo. Esta operación tardará al menos un par de minutos. Cuando la macro finalice runnning, recibirá un mensaje que indica, "la hoja de cálculo está completo."
  5. Después de genera la hoja de cálculo, guarde el libro para que no es necesario volver a ejecutar la macro.
Para utilizar la hoja de cálculo, utilice la característica Autofiltro en la parte superior para buscar el identificador de CommandBar que está buscando. Por ejemplo, en la celda A1 puede seleccionar un comando en un objeto Explorer o Inspector; en la celda B1, a continuación, puede seleccionar el tipo de elemento o carpeta que contiene el comando.

Referencias

Para obtener información adicional sobre los recursos disponibles y answersto las preguntas más frecuentes acerca de soluciones de Microsoft Outlook, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
146636  (http://support.microsoft.com/kb/146636/EN-US/ ) OL2000: Preguntas acerca de los formularios personalizados y las soluciones de Outlook
287530  (http://support.microsoft.com/kb/287530/EN-US/ ) OL2002: Preguntas acerca de los formularios personalizados y las soluciones de Outlook

La información de este artículo se refiere a:
  • Microsoft Outlook 2000 Standard
  • Microsoft Outlook 2002 Standard
Palabras clave: 
kbmt kbinfo KB201095 KbMtes
Traducción automáticaTraducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 201095  (http://support.microsoft.com/kb/201095/en-us/ )
 

Seleccione idioma

 

Related Support Centers