7

我是 VBA 和 Office Ribbon 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选项卡中,我想将其可见性更改为并更改andtrue的值。目前,这必须在此按钮上一次调用之后完成:lblUsernamelblFullname

<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 中使用这两个属性时getVisiblegetLabel加载项本身不会显示。:(我使用的代码是:

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

如果我删除这两个属性,很奇怪。顺便说一句,我正在使用Office 2007

4

2 回答 2

4

getLabel您可以在 xml中使用称为属性的东西。

例如

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

这是一个简单的功能示例。我替换了简单InputBox的提示,而不是尝试重新创建您的 UserForm 代码,但一般原则仍应适用。

我为用户名、全名和 bAuthenticated 创建公共变量(让您的表单分配给这些变量,或直接引用表单)。bAuthenticated = True在您对用户进行身份验证后设置。

使用getLabel回调并刷新功能区。我创建了两个单独的回调,一个用于用户名,一个用于全名,它们是getUserNamegetFullName. VisibleGroup我还添加了从getVisibleXML 属性调用的 vba 。

请注意,在对 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 回答