使用 VBA 更改 Office 功能区中元素的属性

2024-01-06

我是 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选项卡,我想将其可见性更改为true并改变的值lblUsername and lblFullname。目前,这必须在上次通过此按钮调用之后完成:

<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表单并从用户那里获取用户名和密码。验证用户名和密码后,一切正常,但我不确定获取控件属性的过程是什么lblUsername and lblFullname使用登录用户的详细信息更改其值。


澄清

In the SignIn form I have the below code for the Sign In button.

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

当我使用这两个属性时getVisible and getLabel在自定义 UI 中,加载项本身不会显示。:(我使用的代码是:

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

如果我删除这两个属性,那就很奇怪了。顺便说一句,我正在使用办公室2007.


这是一个简单、实用的示例。我用简单的代替InputBox提示而不是尝试重新创建用户窗体代码,但一般原则仍然适用。

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

Use the getLabel回调并刷新功能区。我创建了两个单独的回调,一个用于用户名,一个用于全名,这些是getUserName and getFullName。我还添加了vbaVisibleGroup这是从getVisibleXML 属性。

Note对 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>

Note:我已经设置了可见属性myGroup to 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VBA 更改 Office 功能区中元素的属性 的相关文章

  • 在 vba 上将值粘贴到另一个工作簿工作表上时出现问题

    我有以下代码 以便从工作簿复制工作表并将其粘贴到另一个名为 Control de precios 的工作簿的工作表 1 上 Sub createSpreadSheet Set NewBook Workbooks Add With NewBo
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • 用于将 MS Word 表导出到 Excel 工作表的宏

    我有一个包含许多表格的word文档 有谁知道如何编写宏将此类表导出到不同的 Excel 工作表 答案摘自 http www mrexcel com forum showthread php t 36875 http www mrexcel
  • 如果字符串包含列表中的单词,则返回与列表值相邻的值

    目前我有一组单元格 每个单元格在无用的信息中都有一个唯一的标识符 我还有这些唯一标识符的列表 以及每个标识符对应的值 我想做的是找到一个单元格包含哪个标识符 如果有的话 然后输出相应的值 下面是一个例子 https i stack imgu
  • VBA 代码中的 Excel 公式

    所以 在 Sheet1 中 我有一些名称的基础 它看起来像这样 在 Sheet2 中 我正在使用 Sheet1 中的这些名称 我这样做的方式是在 A 列中输入代码值 在 B 列中输入名称 在 C 列中输入姓氏 看起来像这样 我已经用公式完成
  • VBA仅清除数据透视表缓存,但保留数据透视表结构

    如何使用VBA清除数据透视表缓存 但不破坏数据透视表结构 我的数据透视表已连接到外部数据源 SQL 源决定哪个用户应该查看数据的哪一部分 当表刷新时 源会填充该表 我想保存 Excel 文件并使用干净的数据透视表 内部没有数据 分发它 结果
  • 复制列中的所有单元格[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一张表 有 200 行 行间有一
  • 将所有工作簿工作表复制到新工作簿 VBA

    我正在使用此代码将工作簿中的每张工作表复制到新工作簿中 它工作正常 但它颠倒了工作表的顺序 是否有办法阻止它这样做 Sub copy copies all the sheets of the open workbook to a new o
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 运行时错误“1004”:无法获取 WorksheetFunction 类的 Combin 属性

    我在 Excel 2013 的工作簿中有 VBA 函数 可以根据泊松分布计算 p 值 当 的时候events下面代码中的变量超过 1029 我得到运行时错误 1004 无法获取 WorksheetFunction 类的 Combin 属性
  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • VBA 访问:从另一个表单的代码刷新一个表单

    编辑 没关系有人帮助了我 form name recalc 或 form name refresh form main recalc 我有两种形式 主要 详细信息 在 主 表单中 我有一个在对话框中打开 详细信息 的按钮 问题是我在 详细信
  • 在 VBA 中按键对字典进行排序

    我使用 VBA 创建了一个字典CreateObject Scripting Dictionary 将源单词映射到要在某些文本中替换的目标单词 这实际上是为了混淆 不幸的是 当我按照下面的代码进行实际替换时 它将按照源单词添加到字典中的顺序替
  • Excel VBA 导出到文本文件。需要删除空行

    我有一个工作簿 使用以下脚本将其导出到文本文件 它工作正常 但是当我打开文本文件时 末尾总是有一个空行 这导致我在生成此文本文件后运行的另一个脚本出现问题 有关如何从导出中删除空行的任何帮助 Code Sub Rectangle1 Clic
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • Outlook 无法识别一个或多个姓名

    我有以下 vba 代码 它读取邮箱并向任何发送无效代码作为邮箱回复的用户发送回复 但有时会收到运行时错误 Outlook 无法识别一个或多个名称 我的问题是 创建新的 MAPI 配置文件是否可以解决该问题 或者我是否需要添加一个代码来解析地
  • 根据单元格值向用户窗体添加复选框

    我对 VBA 很陌生 只有 3 天 但我发现它非常有用且易于使用 但现在我面临一个问题 我需要制作一个具有不同复选框的用户窗体 但我需要根据工作表某一列中使用的信息自动添加它们 我相信我可以使用 For Each Next 但我真的不知道如
  • 如何使用VBA根据条件删除Excel中的行?

    我目前正在构建一个宏来格式化数据表并删除不适用的数据行 具体来说 我希望删除列 L ABC 的行以及删除列 AA DEF 的行 到目前为止 我已经实现了第一个目标 但还没有实现第二个目标 现有代码是 Dim LastRow As Integ
  • VBA 字符串 255 个字符限制

    我在使用 VBA 时遇到问题 并注意到它的字符串限制为 255 个字符 我实际上正在尝试通过 POST 发送 JSON 并暂停执行 我注意到该字符串始终只有 255 个字符 有没有办法调整字符串的大小或其他什么 我在这个问题上浪费了大约 6
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入

随机推荐

  • 按动态类对 div 元素进行分组

    我有一个day班级动态 div class day day111 a div div class day day111 a div div class day day112 a div div class day day112 a div
  • 角度组件宿主元素宽度和高度均为 0

    当我检查我的组件元素时 有时它width and height是 0 即使我检查内部 组件包含的元素具有一定的宽度和高度 这导致我无法设置主机元素的样式 因为即使我设置width and height通过声明到宿主元素 host style
  • 如何使用 Ajax 和 ASP.NET WebMethod 传递 JSON 对象

    我在使用 Ajax 和 ASP NET WebMethods 传递 JSON 对象时遇到问题 function setStudentInfo var jsonObjects id 1 name mike id 2 name kile id
  • 自定义字体显示在 IB 中但不在设备上

    我正在尝试使用 Open Sans 系列的字体 我将字体添加到我的 Xcode 项目中 检查它们是否已添加到我的应用程序的资源包中 并将字体添加到我的 Info plist 文件中 当我在 Interface Builder 中编辑 XIB
  • 如何在 ASP.NET Web 表单中获取 JSON POST 数据?

    我目前有一些 jquery 将数据发布到我的网页之一上 现在我只是想让它发布一些 JSON 来测试它 但我不知道发布后是否必须在后端实际获取数据 我一直用Request Params获取发布的数据 但这次似乎不起作用 这是我用来发帖的代码
  • 如何检查 PowerShell 开关参数是否缺失或为 false

    我正在构建一个构建哈希表的 PowerShell 函数 我正在寻找一种方法 可以使用开关参数将其指定为不存在 true 或 false 我怎样才能确定这一点 我可以通过使用 boolean 参数来解决这个问题 但我发现这不是一个优雅的解决方
  • xsd:simpleContent 的含义

    我只是想知道什么以及何时
  • 实现返回带有闭包的结构的工厂函数

    假设我们有一个结构体StoresFnMut借助泛型参数存储闭包 它应该通过通用类型字段存储 以确保静态调度 存储的闭包通常非常简单 例如 单个数字加法 但调用频率很高 所以动态调度会对性能产生相当大的影响 struct StoresFnMu
  • 覆盖 Glassfish 生成的 WSDL 服务端点地址

    我有一个由 wsgen 通过 Maven 生成的 Web 服务 当我将服务部署到 Glassfish 时 它会将服务器 URL 放入 WSDL 中 我们的 Glassfish 服务器前面有一个 Apache 代理服务器 这一切意味着当有人访
  • 使用 SQL 对表进行“转置”

    我不知道这个运算是否有名称 但它类似于线性代数中的转置 有没有办法将 1 by n 表 T1 转换为 c 1 c 2 c 3 a n 1 2 3 n 放入如下所示的 n 2 表中 key val c 1 1 b 2 2 c 3 3 a n
  • Google Cloud Storage 基于 IP 地址的文件访问策略

    有没有办法根据客户端IP地址限制Google Cloud Storage中某个存储桶中所有文件的访问 我在那里存储了一个文件 该文件只能通过特定的 IP 地址访问 这个怎么做 不 目前没有办法做到这一点
  • 在运行时交换正在运行的 jar

    我正在构建一个更新系统 其中我需要能够在运行时替换正在运行的应用程序 jar 的引用 jar 但是 当我尝试在 jar 上执行文件实用程序功能 例如 setLastModified 时 我遇到了 Windows 上的文件锁定问题 经过一番谷
  • 如何在 SSRS 报告中以给定字符串格式显示时间值?

    我想在 SSRS 报告中显示持续时间 我的数据库字段是 SQL 中的时间 它转换 SSRS 中的时间跨度 格式为 下午 1 00 下午 3 50 我怎样才能做到这一点 Fields StartTime Value ToString PM F
  • 我应该使用 Vagrant 还是 Docker 来创建隔离环境? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我使用Ubuntu进行开发和部署 需要创建一个隔离的环境 为此 我正在考虑 Vagrant 或 Docker 这些解决方案有何优缺点
  • 如何拆分 ipython 笔记本

    我的 Jupyter 笔记本越来越长 这使得导航变得困难 我想将每一章 从标题 1 开始的 Cel 保存到不同的文件中 我怎样才能做到这一点 在笔记本之间剪切和粘贴多个单元似乎是不可能的 这是我使用的方法 虽然有点尴尬 但很有效 使用 文件
  • Android 上 libgdx 项目中的蓝牙

    谁能给我一些关于使用蓝牙的建议libgdx安卓上有游戏吗 我的问题是整个代码都在 MyGame 项目中MyGame Android只有MainActivity在 Android 上启动游戏的类 我可以让蓝牙在普通的 Android 应用程序
  • CSS 动画无法在 Chrome 上运行 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个通过 CSS 动画淡入的图像标题 它可以在 Safari 和 Firefox 上运行 但不能在 Chrome 上运行 我在 28
  • Rails 和 MiniTest:添加附加文件夹

    我使用 Ruby 2 和 Rails 4 我有一个文件夹test lib 其中有一些测试 但跑步rake test不使用它们 仅其他测试 模型 控制器等 正在运行 我必须在哪里添加lib folder 我已经尝试过了MiniTest Rai
  • 通过强制转换在 uint8_t[8] 和 uint64_t 之间安全转换?

    我目前正在做的方式 我宁愿摆脱memcpy call uint64 t integer uint8 t string 8 memcpy integer string 8 or swap the parameters 假设integer数组长
  • 使用 VBA 更改 Office 功能区中元素的属性

    我是 VBA 和 Office Ribbon UI 的初学者 我正在使用 Office 2007 并使用自定义 UI 在 PPTM 中开发功能区 我添加了一组 XML 如下所示