【问题标题】:VBA - Change cell background colorVBA - 更改单元格背景颜色
【发布时间】:2021-10-31 02:00:36
【问题描述】:

我一直在 Excel(Office 365 版本)中构建团队假期日历,并且我第一次使用 VBA 来自动执行一些计算和样式设置。

我一直坚持以下几点:

我想创建一个改变单元格背景颜色的函数。 我有四种颜色可以切换,所以我宁愿做四种功能,每种颜色一种。 然后在需要时在不同的函数中调用该函数。 我不想使用 ColorIndex,而是使用自定义颜色(我可以使用 RGB 或 Long 值),但我也无法使用 ColorIndex。

我的假设是问题出在范围上,但在这一点上,谁知道:D。

每种颜色的长值都存储在自制的枚举“OwnColorLong”中。

这是我的一些尝试,每次我的 Excel 工作表中的结果(作为公式运行时)都是“#Value!”。

'Function SetBackgroundToRed(RangeToChange As Range)
'    Dim ColorIWant As Long
'    ColorIWant = OwnColorLong.Red         
'    RangeToChange.Interior.Color = ColorIWant 
'End Function

'Sub SetColorToRed(RangeToChange As Range)
'    RangeToChange.Select
'    With Selection.Interior
'        .ColorIndex = 3
'    End With
'End Sub
'
Function SetBackgroundToRed(RangeToChange As Range)
   Dim MyRange As Range
   Set MyRange = Worksheets("Vacation Calendar").Range("RangeToChange")
    MyRange.Select
    With Selection.Interior
        .ColorIndex = 3
    End With
End Function

对于何时使用 sub 或函数,或者何时最好使用类模块,我仍然有些困惑。现在所有代码都放在一个模块中,我将编写一个链接到按钮的 Main sub 并将所有代码放在那里,除了函数本身。如果有更好的做法,请随时告诉我。

【问题讨论】:

  • 最好将其用作 Sub 并从按钮运行。
  • 嗨 Ben,我不确定使用按钮是否是最好的方法,因为我想在不同的功能中使用这些功能。颜色变化只是我计划编写的代码的一小部分。例如,我将在 IF 语句中使用它。我在工作表中制作了一个按钮,它应该运行所有计算并更新颜色以清晰起见。
  • 不明白为什么按钮不起作用。不使用函数的参数也是没有意义的。
  • 仍然让它成为一个子,因为它做了一些事情并且不返回任何东西。
  • SJR,我怎么不使用函数的参数?这就是需要新颜色的单元格范围。我以为我选择了那个范围然后改变颜色,这可能是错误的 :) 我可以把它变成一个子,但我一直在尝试一切:p 第二个例子是一个子,这也不起作用。我会确保在最终版本中将其设为 sub :) 我无法将其设为按钮,因为我不会在工作表中使用此 sub,它将隐藏在不同的功能中。颜色变化不是我的代码的主要目标,尽管对于打开工作表的最终用户的快速查看很重要

标签: excel vba colors


【解决方案1】:

第二,Sub 还是Function?如果您需要从您的方法中得到答案,那么Function 就是。在你的情况下,你不需要回答,所以它是Sub

Sub SetBackgroundToRed(RangeToChange As Range)
    With RangeToChange.Interior
        .ColorIndex = 3
    End With
End Sub

【讨论】:

  • 嗨,山姆,谢谢!单元格将被循环并检查条件,这将决定范围,所以不幸的是不是选定的单元格:/
  • 我上面改了
【解决方案2】:
  • 这不能作为从工作表单元格调用的 UDF。除了一些边缘情况,例如this,从单元格 can't modify other cells on the worksheet 调用的 UDF。

    函数可以执行计算,将值或文本返回到输入它们的单元格。任何环境更改都应通过使用 Visual Basic 子例程进行。

  • 更喜欢Sub 而不是Function,因为这会做一些事情并且不会返回任何内容。
  • “我有四种颜色可以切换,所以我宁愿创建四个函数,每种颜色一个” - 最好创建 一个 函数并传递一个颜色参数。
Private Sub SetColor(ByVal RangeToChange As Range, ByVal Color As Long)
    RangeToChange.Interior.Color = Color
End Sub

像这样称呼

SetColor yourRange, OwnColorLong.Red  

【讨论】:

    【解决方案3】:

    我终于让它工作了!

    Dim rng As String
    rng = "A1"
    Range(rng).Interior.Color = OwnColorLong.Red
    

    问题是不知道如何将范围作为变量传递,显然我必须使用字符串,而不是范围。

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 1970-01-01
      • 2011-09-24
      • 2013-04-12
      • 1970-01-01
      • 2013-06-15
      • 2013-06-28
      • 2016-05-27
      • 1970-01-01
      相关资源
      最近更新 更多