7

私は VBA と Office リボン UI の初心者です。Office 2007 を使用しており、カスタム UI を使用して PPTM でリボンを開発しました。以下のような一連の XML を追加しました。

<group id="myGroup" label="Hello World" visible="false">
    <labelControl id="lblUsername" label="Your Username: " />
    <labelControl id="lblFullname" label="" />
</group>

そこで、このタブで、その可視性を に変更し、との値をHello World変更したいと思います。現在、これは、このボタンによる前回の呼び出しの後に行う必要があります。truelblUsernamelblFullname

<button id="signin" label="Sign In" image="signin" size="large"
    supertip="Click this button to sign in."
    onAction="ribbon_SignIn" tag="SignIn" />

現在、 のコードは次のribbon_SignInとおりです。

Sub ribbon_SignIn()
    SignIn.Show
End Sub

これにより、フォームが開き、SignInユーザーからユーザー名とパスワードが取得されます。ユーザー名とパスワードが検証された後、すべてがうまくいきますが、コントロールのプロパティを取得し、サインインしたユーザーの詳細でそれらの値を変更する手順がわかりませlblUsernamelblFullname


明確化

SignInフォームには、ボタン用の以下のコードがありますSign In

Private Sub btnSignIn_Click()
    ' Authentication Mechanism
    MsgBox "You have successfully signed in!"

    ' Show the Ribbon group.
    ' What am I supposed to do here to make the group visible?
    ' Also how do I change the text of the label?
End Sub

では、ここでグループを表示するには何を入れればよいでしょうか? また、ラベルのテキストを変更するにはどうすればよいですか?


更新 #1

カスタム UI で2 つの属性を使用するgetVisiblegetLabel、アドイン自体が表示されません。:(私が使用したコードは次のとおりです。

<group id="myGroup" label="Hello World" getVisible="VisibleGroup">
    <labelControl id="lblUsername" label="Your Username: " getLabel="lblUsername" />
    <labelControl id="lblFullname" label="" getLabel="lblFullname" />
</group>

これらの 2 つの属性を削除すると、奇妙で​​す。ところで、私はOffice 2007を使用しています。

4

2 に答える 2

4

getLabelxml でプロパティと呼ばれるものを使用できます。

例えば

getLabel = "GetLabelMacro"

GetLabelMacro で、次のようにコードを挿入できます。

Sub GetLabelMacro(control As IRibbonControl, ByRef label)
    if control.id = "MyLabel" then
        label = "New Label"
    end if
End Sub

このサンプル コードは目的に合わせて変更できます。getLabel の構文の詳細については、getLabel コールバックについてグーグルで検索してください。

于 2014-07-07T14:43:10.663 に答える
4

これは、単純で機能的な例です。InputBoxUserForm コードを再作成しようとする代わりに単純なプロンプトを代用しますが、一般的な原則は引き続き適用されます。

ユーザー名とフルネーム、および bAuthenticated のパブリック変数を作成します (フォームにこれらの変数を割り当てるか、フォームを直接参照します)。bAuthenticated = Trueユーザーを認証したら設定します。

コールバックを使用してgetLabel、リボンを更新します。ユーザー名用とフルネーム用の 2 つの個別のコールバックを作成します。これらはgetUserNamegetFullNameです。XML プロパティVisibleGroupから呼び出されるvba も追加します。getVisible

VBA を変更するときは、ファイルを保存して閉じてから再度開く必要があることに注意してください。これらの変更を行うと、リボン自体を表す変数を含むすべてのパブリック変数がクリアされる可能性があるためです。RefreshRibbonこれが、手順からエラーが発生する可能性がある理由です。

xml は次のようになります。

getVisible コールバックを含めるように更新されました

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonOnLoad">
    <ribbon startFromScratch="false" >
        <tabs>
            <tab id="customTab" label="Custom Tab">
                      <group id="myGroup" label="Hello World" getVisible="VisibleGroup" >
                          <labelControl id="lblUsername" getLabel="getUserName" />
                          <labelControl id="lblFullname" getLabel="getFullName" />
                      </group>
                      <group id="mySignin" label="SignIn" visible="true" >
                          <button id="signin" label="Sign In" size="large"
                              supertip="Click this button to sign in."
                              onAction="ribbon_SignIn" tag="SignIn" />
                      </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

注:これをより簡単にテストできるように、myGroupの visible プロパティを に設定しました。実行時にこのプロパティを変更する必要がある場合は、同様にコールバックTrueを使用できます。getVisible

そして、VBA モジュールのコールバックは多かれ少なかれ次のようになります。

Option Explicit
Public Rib As IRibbonUI
Public xmlID As String
Public username As String
Public fullName As String
Public bAuthenticated As Boolean

'Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)
    'MsgBox "onLoad"
    Set Rib = ribbon
End Sub

Sub ribbon_SignIn(control As IRibbonControl)

    username = InputBox("enter your username", "Your username?")
    fullName = InputBox("enter your full name", "Your full name?")

    'Authenticate
    bAuthenticated = True

    VisibleGroup control, bAuthenticated
End Sub
Sub VisibleGroup(control As IRibbonControl, ByRef returnedVal)
    returnedVal = bAuthenticated
    Call RefreshRibbon("myGroup")
End Sub
Sub getUserName(control As IRibbonControl, ByRef returnedVal)
    returnedVal = username
    Call RefreshRibbon(control.id)
End Sub
Sub getFullName(control As IRibbonControl, ByRef returnedVal)
    returnedVal = fullName
    Call RefreshRibbon(control.id)
End Sub
Sub RefreshRibbon(id As String)
    xmlID = id
    'MsgBox "Refreshing ribbon for " & Id, vbInformation
    If Rib Is Nothing Then
        MsgBox "Error, Save/Restart your Presentation"
    Else
        Rib.Invalidate
    End If
End Sub
于 2014-07-07T14:53:20.507 に答える