单击后将 ActiveX 命令按钮颜色更改回之前的颜色

2023-12-21

我有一个包含超过 65 个 ActiveX 命令按钮的电子表格。当我左键单击一个命令按钮时,它会变成绿色并在单元格中添加一个 (+1)。当我右键单击同一个命令按钮时,它会变成红色并在单元格中添加 (+1)。

当我单击另一个命令按钮时,我想将上一个命令按钮恢复为默认灰色。问题是上一个命令按钮的颜色与我之前单击的颜色相同。

当工作表上有超过 65 个命令按钮时,如何使单击的命令按钮返回到默认灰色。这是迄今为止我对单个命令按钮的了解:

Private Sub Action68_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

If Button = 1 Then
    Worksheets("Stats").Cells(CurrentPlayerRow, "BA").Value = Worksheets("Stats").Cells(CurrentPlayerRow, "BA").Value + 1
    Action68.BackColor = vbGreen
ElseIf Button = 2 Then
    Worksheets("Stats").Cells(CurrentPlayerRow, "BB").Value = Worksheets("Stats").Cells(CurrentPlayerRow, "BB").Value + 1
    Action68.BackColor = vbRed
End If
End Sub

Private Sub Action69_MouseDown(ByVal Button As Integer, ByVal Shift As 
Integer, ByVal X As Single, ByVal Y As Single)

If Button = 1 Then
    Worksheets("Stats").Cells(CurrentPlayerRow, "BT").Value = Worksheets("Stats").Cells(CurrentPlayerRow, "BT").Value + 1
    Action69.BackColor = vbGreen
ElseIf Button = 2 Then
    Worksheets("Stats").Cells(CurrentPlayerRow, "BU").Value = Worksheets("Stats").Cells(CurrentPlayerRow, "BU").Value + 1
    Action69.BackColor = vbRed
End If 
End Sub

我有它,当右键单击或左键单击时,它将颜色更改为红色或绿色。但我不知道当单击另一个按钮时如何将其更改为默认灰色。

基本上,当我单击“Action 69”命令按钮时,“Action68”命令按钮以及其他 67 个命令按钮将返回到默认灰色,以便仅针对单击的按钮更改颜色。你有什么建议吗?

谢谢


这是大量的复制粘贴和重复的代码。您将希望减少重复,以便当您需要按钮执行其他操作(或只是更改配色方案)时,您可以更改一个位置而不是 70 个位置。

您可以通过增加抽象层次,即通过在单独的专用过程中实现功能。

Public Enum ButtonState
    LeftButton = 1
    RightButton = 2
End Enum

Private Sub HandleControlClick(ByVal axControl As MSForms.Control, ByVal column As String, ByVal state As ButtonState)
    Const defaultColor As Long = &H8000000F&
    Dim newColor As Long, columnOffset As Long
    Select Case state
        Case LeftButton
            newColor = vbRed
        Case RightButton
            newColor = vbGreen
            columnOffset = 1
        Case Else
            newColor = defaultColor
    End Select
    axControl.BackColor = newColor
    StatsSheet.Cells(CurrentPlayerRow, column).Offset(0, columnOffset).Value = StatsSheet.Cells(CurrentPlayerRow, column).Offset(0, columnOffset).Value + 1
End Sub

现在你的处理程序看起来像这样:

Private Sub Action68_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    HandleControlClick ActiveSheet.OleObjects("Action68").Object, Button, "BA"
End Sub

Private Sub Action69_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    HandleControlClick ActiveSheet.OleObjects("Action69").Object, Button, "BT"
End Sub

我热烈推荐您给(Name) of statsSheet(或类似)到你的Worksheets("Stats")如果可能的话 - 这样您就可以使用已经存在的工作表对象,而不是从Worksheets每次都收藏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击后将 ActiveX 命令按钮颜色更改回之前的颜色 的相关文章

  • 使用 VBA 通过简单命令从非连续范围的并集获取值到数组中(无循环)

    我有以下任务 表面上很简单 使用 VBA 将电子表格上多个列的值复制到二维数组中 为了让生活更有趣 这些柱子并不相邻 但它们的长度都相同 显然 可以通过依次循环每个元素来做到这一点 但这看起来非常不优雅 我希望有一个更紧凑的解决方案 但我很
  • OpenArgs 为空问题

    我正在使用OpenArgs使用时发送值的参数DoCmd OpenForm DoCmd OpenForm frmSetOther acNormal acFormAdd acDialog value 然后我用Me OpenArgs在打开的表格内
  • 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

    我在使用 VBA 将 mm dd yyyy 转换为 dd mm yyyy 日期格式时遇到问题 我有一个这样的表 仅供参考 该表是从报告工具自动生成的 字符串操作 或任何 Excel 函数可以提供帮助吗 希望知道如何解决这个问题的人可以给我一
  • Excel VBA 过滤和复制粘贴数据

    给定一个数据集 假设有 10 列 在 A 列中我有日期 在 B 列中我有 我想仅过滤 A 列 2014 年的数据 B 列 ActiveSheet Range A 1 AR 1617 AutoFilter Field 5 Operator x
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • Confluence:使用 VBA 更新现有页面

    我尝试使用 VBA 更新 Confluence 页面 我的想法是使用REST API加载页面内容 修改内容然后上传修改后的版本 这是我的代码 Private Sub TestRESTApi Dim uname As String uname
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 无法将 Excel 值的类型“double”转换为“string”

    我正在加载 Excel 文件 如网络上许多地方所示 OpenFileDialog chooseFile new OpenFileDialog chooseFile Filter Excel files xls xlsl xls xlsx i
  • 使用 pythoncom 在 Python 进程之间编组 COM 对象

    我希望有人可以帮助我从 Python 进行编组跨进程调用到 Excel 我有一个通过 Python 启动的 Excel 会话 我知道当需要从单独的 Python 进程访问它时 该会话将会启动并运行 我已经使用编组让一切按预期工作CoMars
  • 如何使用VBA根据条件删除Excel中的行?

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

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

    我有以下问题 我有一个存储在服务器上的 CSV 文件 但它有 3 个字符作为分隔符 我想从 URL 加载数据并使用 作为分隔符将数据填充到 Excel 页面的列中 到目前为止 我找到了使用 ADODB 记录集从网站加载文件的代码 但我无法进
  • 在 VBA Excel 中查找、剪切和插入行以匹配借项和贷项值

    我在 Sheet1 中有以下设置数据 并从第 4 行 A 列开始 其中标题位于第 3 行 No Date Code Name Remarks D e b i t Cr e d i t 1 4 30 2015 004 AB 01 04 15
  • Excels COUNTIFS 函数中的数组作为条件,混合 AND 和 OR [重复]

    这个问题在这里已经有答案了 我已经在谷歌上搜索了一段时间 但似乎无法让它发挥作用 我使用 Excel 2010 希望混合使用 AND 和 OR 运算符来计算行数 我想做的是这样的 COUNTIFS A A string1 B B strin
  • 当使用公式生成超链接时,VBA 打开 Excel 超链接不起作用

    使用公式生成的 Excel 超链接似乎存在错误 我使用的是 Excel 2010 我有一个电子表格 其中的单元格包含 URL 我的目标是执行以下两件事 将这些单元格变成超链接 创建一个键盘快捷键来打开这些超链接 这样我就不必使用鼠标了 为了
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V

随机推荐

  • 求一个数的真正大幂

    I am creating a small game for students and in a place it has to display the value of 27830457 1 如果数字不是那么大 我可以调用 BigInte
  • ReactJS + Socket.IO - 处理套接字连接的最佳方式

    我正在尝试使用 Node 和 Socket IO 制作一个 ReactJS 实时应用程序 但我很难找出在客户端处理套接字连接的最佳方法 我有多个 React 组件 它们都需要来自服务器的一些信息 并且最好通过套接字连接实时获取 但导入时so
  • 具有多个条件的 VLOOKUP 在一个单元格中返回值

    我发现这个 VBA 能够使用一个匹配条件将所有匹配值返回到一个单元格中 Function MYVLOOKUP pValue As String pWorkRng As Range pIndex As Long Update 20150310
  • 输入文件 onchange 事件未在 Chrome 中触发

    这是我在 chrome 中注意到的一件奇怪的事情 如果用户选择一个文件 然后再次打开文件对话框再次选择同一文件 则 chrome 不会触发 onchange 事件 而 firefox 会触发 有人也注意到了吗 这是 Chrome 的一项已知
  • 锁和监视器可以安全地用于同一个对象吗?

    我有以下情况 我想相互排除对对象的访问 到目前为止我通常会使用锁对象 object lockObject new object method1 lock lockObject CODE1 现在我还有一个可以从另一个线程调用的方法 它不应该被
  • 设备中的sign_in_and_redirect如何工作?

    if user persisted sign in and redirect user event gt authentication this will throw if user is not activated set flash m
  • 如何为一组目标创建 Maven 别名?

    我正在配置一个 Maven 项目并希望能够使用别名 例如 mvn server 执行mvn clean package tomcat run Grunt 任务运行器做得很好 但我还没有找到在 Maven 中做同样事情的方法 是否可以 您可以
  • 如何阅读 C 声明?

    我听说过一些方法 但没有一个能坚持下来 就我个人而言 我尝试避免 C 中的复杂类型 并尝试将它们分解为组件 typedef 我现在面临着维护一些来自所谓的 三星级程序员 的遗留代码 并且我很难阅读一些 代码 如何阅读复杂的 C 声明 本文解
  • Autohotkey 多个热键映射到同一功能

    我有几个热键 它们都做同样的事情 我有多个热键 所以我可以在我的手当时在的任何地方调用它们 并且可以在多个键盘上使用 例如 Send Media Next XButton2 RButton Send Media Next SC15D Sen
  • 如何在搅拌机中导出带有纹理的.obj格式文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 First of all i am new in blender i have attached texture from tree ob
  • 爪哇 |整数运算符;

    我用 Java 编程大约一年了 但仍然发现了一些我不知道的东西 如何 new Font FontFamily TIMES ROMAN 12 1 4 如何 可以处理整数吗 谢谢 附 我用谷歌搜索了很多 The 运算符计算 按位或 http d
  • Windows 中崩溃进程的可预测退出代码

    对于Windows中正常退出的进程来说 进程的退出码一般是以下的返回值 main 或传递给的退出代码std exit ERRORLEVEL 然后可以用于查询退出代码 并且可以用于确定程序是否正确执行 或者是否存在一些指示特定问题 特定于应用
  • 使用 astype 在 H5py 中创建对 HDF 数据集的引用

    来自h5py 文档 http docs h5py org en latest high dataset html Dataset astype 我发现我可以使用以下命令将 HDF 数据集转换为另一种类型astype数据集的方法 这会返回一个
  • 通过 REST 将消息发送到 Azure 服务总线队列

    Azure 队列向 REST API 公开 为了使 REST 调用正常工作 我在 POSTMAN 上进行了示例测试 POST 调用 https yournamespace servicebus windows net yourentity
  • 仅在持久函数中扇出(并忘记)

    我有一个现有的函数应用程序 带有 2 个函数和一个存储队列 F1 由服务总线主题中的消息触发 对于收到的每个消息 F1 计算一些必须以不同的延迟量执行的子任务 T1 T2 例如 T1 在 3 分钟后触发 T2 在 5 分钟后触发 等等 F1
  • SQL Server Management Studio:图标含义

    我只是想知道这个图标在 SQL Server 2008 Management Studio 中意味着什么 在减号和带有绿色箭头的数据库图标之间 数据库引擎正在按预期工作 SQL Server 代理也正在运行 有人能帮我吗 截屏 https
  • 如何通过 javascript 将图像/ HTML 画布切成两半?

    我正在使用 html2canvas 将具有自定义功能的谷歌地图 javascript API 转换为画布 然后转换为图像 在所有浏览器上都可以正常工作 但在 IE 11 上它会生成一个图像 图像右侧有额外的空白区域 等于 浏览器窗口的宽度
  • 传递到字典中的模型项的类型为“mvc.Models.ModelA”,但该字典需要类型为“mvc.Models.ModelB”的模型项

    我在一些构建中遇到了这个恼人的错误 项目中没有错误 因为如果我再次构建 问题就会消失 仅当站点部署到 Windows 2008 Server 时才会出现该消息 我首先认为这可能是临时文件的问题 但事实并非如此 我将构建部署到不同的网络 但错
  • F# 异步中的结果与提升?

    似乎有两种方法可以返回错误async工作流程 raise and Result let willFailRaise async return raise lt new Exception oh no let willFailResult a
  • 单击后将 ActiveX 命令按钮颜色更改回之前的颜色

    我有一个包含超过 65 个 ActiveX 命令按钮的电子表格 当我左键单击一个命令按钮时 它会变成绿色并在单元格中添加一个 1 当我右键单击同一个命令按钮时 它会变成红色并在单元格中添加 1 当我单击另一个命令按钮时 我想将上一个命令按钮