¿Cómo puedo poner un texto en un cuadro de edición de la Cinta? No puedo encontrar en internet :/

Puedo encontrar ejemplos de evento click pero nada sobre el conjunto de un texto a partir de un Sub.

Así, por ejemplo, quiero algo como esto:

Sub settingText()
   editboxname = "my text"
end sub
  • ¿Quieres decir que te quiero un cuadro de texto que aparecen en la Cinta de opciones? Sería similar a la de la fuente desplegable en la pestaña Inicio, por ejemplo?
  • No, ya tengo el cuadro de texto en la Cinta de opciones y solo quiero poner un texto en cualquier momento cuando puedo ejecutar un código. Soy nuevo en esto y estoy aprendiendo, así que voy a comprobar sobre el desplegable cosas.
  • Yo sólo sé una manera de poner un texto en que cuando yo abra la hoja de cálculo, pero todavía no sé cómo poner un texto cuando estoy usando la hoja de cálculo
  • He encontrado una solución! Hay algunas líneas para hacer eso :S shulerent.com/2011/08/16/…
  • Por favor enviar su solución como una respuesta.
  • Hola Aaron, he publicado un ejemplo de abajo que he probado. Gracias por su atención!

InformationsquelleAutor Braulio | 2013-09-06

2 Comentarios

  1. 10

    La solución que he encontrado en este enlace: http://www.shulerent.com/2011/08/16/changing-the-value-of-an-editbox-office-ribbon-control-at-runtime/

    Aquí está un ejemplo que he probado y ha funcionado bien:

    'Global Variables:
    Public MyRibbonUI As IRibbonUI
    Public GBLtxtCurrentDate As String
    
    Private Sub OnRibbonLoad(ribbonUI As IRibbonUI)
    
        Set MyRibbonUI = ribbonUI
        GBLtxtCurrentDate = ""
    
    End Sub
    
    Private Sub ocCurrentDate(control As IRibbonControl, ByRef text)
    
        GBLtxtCurrentDate = text
        MyRibbonUI.InvalidateControl (control.id)
    
    End Sub
    
    Private Sub onGetEbCurrentDate(control As IRibbonControl, ByRef text)
        text = GBLtxtCurrentDate
    End Sub
    
    Public Sub MyTest()
        'Here is an example which you are setting a text to the editbox
        'When you call InvalidateControl it is going to refresh the editbox, when it happen the onGetEbCurrentDate (which is the Gettext) will be called and the text will be atributed.
        GBLtxtCurrentDate = "09/09/2013"
        MyRibbonUI.InvalidateControl ("ebCurrentDate")
    End Sub
    
    <?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnRibbonLoad">
      <ribbon>
        <tabs>
          <tab id="Objects" label="Objects">
            <group id="grp" label="My Group">
              <editBox id="ebCurrentDate" label="Date" onChange="ocCurrentDate" getText="onGetEbCurrentDate"/>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
  2. 1

    Es un poco de tiempo ya que esta respuesta fue publicado, y no parece ser un reciente-ish cambio en el comportamiento de la cinta de opciones, lo que significa que la respuesta original publicado no puede ser una solución más. Para el registro, estoy usando Excel 2013 con algunas actualizaciones que están fechadas después de Braulio de la respuesta.

    El corazón de la diferencia es que Invalidan y InvalidateControl en la cinta de opciones no se comportan de la misma manera que anteriormente. Esto significa que InvalidateControl no llama a la getText devolución de llamada en el cuadro de edición. He sustituido el InvalidateControl llamadas con Invalidate (de modo que las fuerzas de un re-dibujar en toda la cinta), y que hace activar la devolución de llamada como se esperaba.

    Así que aquí está el código de mi solución para un nombre de archivo/botón examinar (nota: he incluido código adicional para la caché de la interfaz de usuario de cinta de referencia en un muy oculta de la hoja, de modo que se restablece durante el desarrollo no se hacen de la cinta de opciones inaccesible).

    Private sobjRibbon As IRibbonUI
    Private strFilename As String
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (destination As Any, source As Any, ByVal length As Long)
    Private Function GetRibbon() As IRibbonUI
    If sobjRibbon Is Nothing Then
    Dim objRibbon As Object
    CopyMemory objRibbon, ThisWorkbook.Worksheets("Ribbon_HACK").Range("A1").Value, 4
    Set sobjRibbon = objRibbon
    End If
    Set GetRibbon = sobjRibbon
    End Function
    'Callback for customUI.onLoad
    Sub Ribbon_Load(ribbon As IRibbonUI)
    Set sobjRibbon = ribbon
    Dim lngRibPtr As Long
    lngRibPtr = ObjPtr(ribbon)
    ' Write pointer to worksheet for safe keeping
    ThisWorkbook.Worksheets("Ribbon_HACK").Range("A1").Value = lngRibPtr
    strFilename = ""
    End Sub
    'Callback for FileName onChange
    Sub OnChangeFilename(control As IRibbonControl, text As String)
    strFilename = text
    End Sub
    'Callback for FileName getText
    Sub GetFileNameText(control As IRibbonControl, ByRef returnedVal)
    returnedVal = strFilename
    End Sub
    'Callback for FilenameBrowse onAction (I'm looking for XML files here)
    Sub OnClickFilenameBrowse(control As IRibbonControl)
    Dim objFileDialog As Office.FileDialog
    Set objFileDialog = Application.FileDialog(msoFileDialogFilePicker)
    With objFileDialog
    .AllowMultiSelect = False
    .Title = "Please select the file."
    .Filters.Clear
    .Filters.Add "XML", "*.xml"
    If .Show = True Then
    strFilename = .SelectedItems(1)
    GetRibbon().Invalidate ' Note the change here, invalidating the entire ribbon not just the individual control
    End If
    End With
    End Sub

    Para el registro, aquí está el XML para los dos objetos que estoy tratando aquí:

    <editBox id="FileName" onChange="OnChangeFilename" screentip="Filename of the XML file to upload" label="XML file name" showImage="false" getText="GetFileNameText" />
    <button id="FilenameBrowse" imageMso="ImportExcel" onAction="OnClickFilenameBrowse" screentip="Find the file to upload" label="Browse" />

Dejar respuesta

Please enter your comment!
Please enter your name here