excel - 使用 VBA 选择并突出显示一个随机单元格
问题描述
我目前有一个 Excel 电子表格,当用户单击 Go 时,它会为工作表中的单元格分配一个新的随机数。范围值在 20 x 25 矩阵中的 1 到 500 之间。每次用户单击“开始”按钮时,我只想随机选择一个单元格的背景颜色并将其更改为红色。下面的代码目前正在为单元格分配随机数,并选择并突出显示随机单元格。但是,当再次单击 Go 时,先前选择的单元格仍然与新选择的单元格一起突出显示。单击Go时如何对其进行编码以仅突出显示新选择的单元格?
Public Sub GenerateRandom()
Set MyRange = Range("C4:AA23")
For i = 1 To 500
MyRange.Cells(i) = i
Next
For Each Cell In MyRange
swapcell = 1 + Int(Rnd * 500)
savedValue = Cell.Value
Cell.Value = MyRange.Cells(swapcell).Value
MyRange.Cells(swapcell) = savedValue
Next
With MyRange.Cells(1 + Int(Rnd * 500))
MyRange.Cells(RndBetween(1, 500)).Interior.Color = vbRed
End With
End Sub
Public Function RndBetween(ByVal Low, ByVal High) As Integer
Randomize
RndBetween = Int((High - Low + 1) * Rnd + Low)
End Function
解决方案
如上所述,在突出显示单元格之前清除范围颜色是最快的方法。但是,如果您的单元格的背景颜色设置为其他颜色,那么以下应该可以工作:
替代解决方案: 存储单元格的位置和颜色以突出显示单元格,然后在每次运行时恢复其原始颜色。您将声明子外部的位置,以便在子结束后它不会消失。如果您的背景颜色是其他颜色,这将有所帮助。问题在于它仅在 Excel 会话期间有效,如果您关闭并保存该位置将会丢失,除非您将其保存到隐藏的工作表中 = 此任务不必要的复杂性。
Dim OriginalCell As Range
Dim OriginalCol
Public Sub GenerateRandom()
Dim myRange As Range
Dim NewCell As Range
Set myRange = Range("C4:AA23")
For i = 1 To 500
myRange.Cells(i) = i
Next
For Each Cell In myRange
swapcell = 1 + Int(Rnd * 500)
savedValue = Cell.Value
Cell.Value = myRange.Cells(swapcell).Value
myRange.Cells(swapcell) = savedValue
Next
''''new code
Set NewCell = myRange.Cells(RndBetween(1, MyRange.Cells.Count))
If OriginalCell Is Nothing Then
Set OriginalCell = NewCell
OriginalCol = OriginalCell.Interior.Color
Else
OriginalCell.Interior.Color = OriginalCol
Set OriginalCell = NewCell
OriginalCol = OriginalCell.Interior.Color
End If
NewCell.Interior.Color = vbRed
'''''
End Sub
附带说明一下,将范围发送到数组并使用数组要快得多,但这是另一个主题。希望这可以帮助!
推荐阅读
- sql - 查询 SQL 以通过 MSSQL 获取所有列和最小最大日期时间
- javascript - Cache api - add XMLHttpRequest object
- angular - 如何在时刻 js 中格式化日期
- php - If radio button not checked, display all rows from column - formulating sql query
- javascript - 在运行时在 javascript 中更新 Map 的键
- laravel - Is there a way to represent date hole in chartjs time series?
- logging - librdkafka.redist 的日志是什么意思
- javascript - 通过 jquery/javascript 中的 Ajax 调用进行分页
- python - 连接到上游 jwilder/ngnix-proxy 时没有实时上游
- c - PSET3 - Tideman - 锁定对