RibbonX-Workshop - Eingabefeld

In diesem Teil bauen wir ein Eingabefeld (Editbox) ein. Im folgenden Beispiel wird das Eingabefeld genutzt, um über TAPI eine Telefonnummer zu wählen. Zuerst wird die Nummer eingegeben. Ein Klick auf die Entertaste löst dann das Ereignis aus.

Erstellen Sie eine neue Arbeitsmappe. Fügen Sie ein neues Modul und in dieses den folgenden Makrocode ein.

Option Private Module
Option Explicit
Declare Function tapiRequestMakeCall Lib "Tapi32.dll" (ByVal DestAddress As String, ByVal AppName As String,  ByVal CalledParty As String, _
                                                       ByVal Comment As String) As Long

Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
                                                                          ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_COMMAND As Long = &H111
Public objRibbon As IRibbonUI
Public A$

Public Sub onload(ribbon As IRibbonUI)
 Set objRibbon = ribbon
End Sub
Sub BoxWahlRaus(control As IRibbonControl, ByRef text)
Dim i As Integer
Dim Zelle As Integer
Dim A$

  A$ = text
  Telefonieren A, " "
End Sub

Sub Telefonieren(TelefonNr$, derName$)
Application.EnableCancelKey = False
Dim retval As Long
  retval = tapiRequestMakeCall(TelefonNr, "", derName, "")
    If retval <> 0 Then
       MsgBox "Beim Verbindungsaufbau ist ein Fehler aufgetreten!"
    End If
End Sub


Speichern und schließen Sie die Arbeitsmappe und öffnen Sie diese dann mit dem CustomUI-Editor. Fügen Sie dann im Codefenster folgenden XML-Code ein.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad">
  <ribbon>
    <tabs>
     <tab id="tabExcelvorlage" label="Telefonieren">
        <group id="groupTelefonieren" label="Telefonieren">
          <editBox id="ebx_Schnellwahl" onChange="BoxWahlRaus" supertip="Telefonnummernschnellwahl. Nummer eingeben und Entertaste drücken." 
                   sizeString="wwwwwwwwww"/>
          </group>
     </tab>
    </tabs>
  </ribbon>
</customUI>


Jetzt wollen wir das Eingabefeld beim Laden des Menübandes mit einem Wert vorbelegen. Den Wert holen wir uns aus der Zelle "A1" des Blattes "Tabelle1".


    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="edb0_onLoad">
       <ribbon>
          <tabs>
             <tab id="inpTab" label="InputFields" insertAfterMso="TabView">
                <group id="InputGroup" label="Info Inputfield">
                   <editBox id="edb0" label="Test" getText="edb0_getText" sizeString="wwwwwwww" onChange="edb0_onChange" />
                </group>
             </tab>
          </tabs>
       </ribbon>
    </customUI>


Option Private Module
Option Explicit

Public objRibbon As IRibbonUI


Public Sub edb0_onLoad(ribbon As IRibbonUI)
    Set objRibbon = ribbon
End Sub

Sub edb0_getText(control As IRibbonControl, ByRef Text)
    Text = ThisWorkbook.Sheets("Tabelle1").Range("A1").Value
End Sub

Sub edb0_onChange(control As IRibbonControl, Text As String)
    ThisWorkbook.Sheets("Tabelle1").Range("A1").Value = Text
End Sub


Sie können das Eingabefeld auch zur Laufzeit füllen lassen. Hierzu können Sie z.B. das Worksheet_Change-Ereignis einsetzen. Wir beziehen uns im Beispiel wieder auf Zelle "A1" Immer wenn A1 geändert wird lassen wir das Menüband aktualisieren. Eingaben in anderen Zellen werden nicht beachtet. Den folgenden Code legen Sie im Codebereich der Tabelle ab.

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then objRibbon.Invalidate
End Sub