gpt4 book ai didi

vba - 简化 VBA 以在 Excel 中单击时更改形状颜色

转载 作者:行者123 更新时间:2023-12-03 00:31:57 25 4
gpt4 key购买 nike

我有一个“表单”,其中包含工作表上的一组问题(请注意,这不是用户表单,我不想使用它)。有些答案是是/否,其他答案有多个答案,例如数量(即答案可能是 1 或 2 或 3 或 4 等)。

此工作表上“表单”的设计要求这些答案是用户可以像按钮一样单击来选择答案的形状 - 请注意,我不想使用命令按钮。

在这个简单的例子中,我有 2 个矩形,一个名称为"is",一个名称为“否”当用户单击"is"时,形状的颜色填充变为蓝色(“否”形状保持白色)。如果用户单击“否”,“否”形状将变为蓝色,而"is"将变为白色。在此示例中,它还会填充并回答 A1。

我使用以下代码,它工作得很好(尽管我确信可以稍微减少一些),但是当我需要多次复制此代码时,问题就出现了。例如,如果我有一个有多个答案的问题,例如数量(答案可以是 1 或 2 或 3 或 4 或 5),则每个宏(即按钮“1”)需要和“事件”编码器,以及“非事件”部分用于为事件形状和所有其他非事件形状指定颜色。这是非常重复的,并且代码很快就会变得冗长。我希望有一种方法可以将格式(填充颜色、文本颜色等)保留在单独的宏中,例如“Sub Active”和“Sub Non_Active”,而不必一次又一次地重复。我尝试使用“调用”来获取包含格式的宏(例如“调用事件”),但不断出现错误。

Sub yes_button()

'active
ActiveSheet.Shapes("yes").Select
ActiveSheet.Shapes("yes").Fill.ForeColor.RGB = RGB(85, 142, 213) ' fill: dark blue color
ActiveSheet.Shapes("yes").Line.BackColor.RGB = RGB(198, 217, 241) ' border: light blue color
ActiveSheet.Shapes("yes").TextFrame.Characters.Font.Color = RGB(255, 255, 255) ' text: white color
Range("A1").Formula = "YES" ' fills cell with button value

' nonactive
ActiveSheet.Shapes("no").Select
ActiveSheet.Shapes("no").Fill.ForeColor.RGB = RGB(255, 255, 255) ' fill: light blue color
ActiveSheet.Shapes("no").Line.BackColor.RGB = RGB(198, 217, 241) ' border: light blue color
ActiveSheet.Shapes("no").TextFrame.Characters.Font.Color = RGB(85, 142, 213) ' text: dark blue color



End Sub

Sub no_button()

'active
ActiveSheet.Shapes("no").Select
ActiveSheet.Shapes("no").Fill.ForeColor.RGB = RGB(85, 142, 213) ' fill: dark blue color
ActiveSheet.Shapes("no").Line.BackColor.RGB = RGB(198, 217, 241) ' border: light blue color
ActiveSheet.Shapes("no").TextFrame.Characters.Font.Color = RGB(255, 255, 255) ' text: white color
Range("A1").Formula = "NO" ' fill scell with button value
' nonactive

ActiveSheet.Shapes("yes").Select
ActiveSheet.Shapes("yes").Fill.ForeColor.RGB = RGB(255, 255, 255) ' fill: light blue color
ActiveSheet.Shapes("yes").Line.BackColor.RGB = RGB(198, 217, 241) ' border: light blue color
ActiveSheet.Shapes("yes").TextFrame.Characters.Font.Color = RGB(85, 142, 213) ' text: dark blue color

End Sub

非常感谢任何建议。谢谢

最佳答案

是的,你是对的,你可以用你的形状作为输入编写一个 Sub,并最终用"is"和“否”事件填充它。例如。 ClickOnButton MyShape, YesNo 其中 YesNo 可以是触发其中一个事件的标志。然后您可以为每个按钮调用该 Sub。

我还建议使用一些 With:With Activesheet.MyShape 效果很好。最后,请不要使用.Select。有很多理由不这样做,而且最重要的是,选择不会在您的代码中执行任何操作...好吧,放慢速度。

我将举一个例子来更好地解释:您可以编写一个子例程,将一个 Shape 和一个 bool 值(例如)作为输入(即 YesNo 变量)。在子例程中,您可以有条件地将 2 种不同的行为 (If ... Else ... End If) 写入 YesNo 变量(或者,我们是否要将其称为 GreenRed/ActiveInactive?)。在这两种情况下,您都可以写任何您想要的内容。以下内容可用于"is"和“否”按钮。

Sub Example(YourShape As Shape, GreenRed as Boolean)

If GreenRed = True Then ' Say we want in this case an "active" button
With YourShape
.Fill.ForeColor.RGB = RGB(85, 142, 213)
.Line.BackColor.RGB = RGB(198, 217, 241)
.TextFrame.Characters.Font.Color = RGB(255, 255, 255)
End With
Else
With YourShape
.Fill.ForeColor.RGB = RGB(255, 255, 255)
.Line.BackColor.RGB = RGB(198, 217, 241)
.TextFrame.Characters.Font.Color = RGB(85, 142, 213)
End With
End If

End Sub

然后,您可以在主程序中编写 Example ActiveSheet.Shapes("yes"), True 以使按钮自行激活,并 Example ActiveSheet.Shapes("no"), False 停用另一个。

关于vba - 简化 VBA 以在 Excel 中单击时更改形状颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24750390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com