Come impostare un testo in una casella di Modifica del Nastro tramite VBA (Excel)

Come posso impostare un testo in un Nastro di Modifica? Non riesco a trovare su internet :/

Appena posso trovare esempi di evento click, ma nulla di impostare un testo da un Sub.

Così, per esempio, voglio qualcosa di simile a questo:

Sub settingText()
   editboxname = "my text"
end sub
Vuoi dire che vuoi una casella di testo visualizzata nella barra Multifunzione? Questo sarebbe simile a discesa tipo di carattere nella scheda Home, per esempio?
No, ho già la casella di testo della barra Multifunzione e voglio solo mettere un testo in qualsiasi momento l’esecuzione di un codice. Sono nuovo di questo e sto imparando, quindi mi controlla circa la discesa roba.
So solo un modo per mettere un testo in quando ho aperto il foglio di calcolo, ma non so ancora come inserire un testo quando sto usando il foglio di calcolo
Ho trovato una soluzione! Ci sono alcune linee per farlo :S shulerent.com/2011/08/16/…
Si prega di inviare la tua soluzione come risposta.

OriginaleL’autore Braulio | 2013-09-06

2 risposte

  1. 10

    La soluzione che ho trovato su questo link: http://www.shulerent.com/2011/08/16/changing-the-value-of-an-editbox-office-ribbon-control-at-runtime/

    Qui è un esempio che ho provato e ha funzionato bene:

    '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>

    OriginaleL’autore Braulio

  2. 1

    È da un po ‘ che questa risposta è stato pubblicato, e ci sembra di essere in una recente-ish modificare il comportamento del nastro, il che significa che l’originale risposta inviato potrebbe non essere una soluzione. Per la cronaca, sto usando Excel 2013, con alcuni aggiornamenti che sono datati dopo Braulio risposta.

    Cuore di la differenza è che Invalidano e InvalidateControl sul nastro non si comportano allo stesso modo come in precedenza. Questo significa che InvalidateControl non chiamare il getText richiamata la casella di modifica. Ho sostituito il InvalidateControl chiamate con Invalidate (così le forze di una ri-disegnare l’intero nastro), e che fa innescare il callback come previsto.

    Quindi, ecco il codice della mia soluzione per un nome di file/pulsante sfoglia (nota ho incluso codice aggiuntivo per la memorizzazione, l’interfaccia utente della barra multifunzione di riferimento su un foglio nascosto, in modo che si resetta durante lo sviluppo non fare il nastro inaccessibile).

    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

    Per la cronaca, ecco il codice XML per i due oggetti che ho a che fare con qui:

    <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" />

    OriginaleL’autore greenbutterfly

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *