随机颜色随着细胞的变化而变化Interior.Color
我把一些简单的东西拼凑在一起,看看会发生什么,当然我打破了excel。随机颜色随着细胞的变化而变化Interior.Color
Sub colourChange()
Dim r As Byte, g As Byte, b As Byte
On Error Resume Next
For l = 0 To 50
For j = 1 To 22
For k = 1 To 66
r = WorksheetFunction.RandBetween(0, 255)
g = WorksheetFunction.RandBetween(0, 255)
b = WorksheetFunction.RandBetween(0, 255)
Cells(j, k).Interior.Color = RGB(r, g, b)
Next k
Next j
Application.Wait Now + #12:00:03 AM#
Next l
End Sub
它开始很好,然后众生放缓至几乎瘫痪,最终甚至产生太多不同的单元格的格式错误。
有没有什么办法可以加快速度并阻止错误?我查了一下,excel应该支持4000种不同的单元格格式,我不应该击中一半!它记住以前的东西吗?这里发生了什么?
它很适合我。请注意您正在使用Wait
函数,这会导致每个“帧”延迟3秒)。加速它的方法是将延迟从3秒减少到1秒:)
但是,因为随机数发生器是基于系统时间的,并且如果我们减少延迟,它会变少。
您也可以使用函数Rnd()
并将其乘以256而不是使用工作表函数。但我不确定,它会显着影响执行的持续时间。
Rnd()* 256的确会执行得更快(因为你不必每次都访问'WorksheetFunction'对象),尽管它可以忽略不计。 –
这就是我的想法。感谢您的澄清。 –
我认为l = 0到50不需要。 而Application.ScreenUpdating =假设置帮助练习更快。 我猜Excel的内部颜色总数有限制。
Sub colourChange()
Dim r As Byte, g As Byte, b As Byte
Dim vR(), n As Integer
'Cells.Clear
n = 3000
ReDim vR(1 To n)
For i = 1 To n
r = WorksheetFunction.RandBetween(0, 255)
g = WorksheetFunction.RandBetween(0, 255)
b = WorksheetFunction.RandBetween(0, 255)
vR(i) = RGB(r, g, b)
Next i
Application.ScreenUpdating = False
For j = 1 To 500
For k = 1 To 100
Cells(j, k).Interior.Color = vR(WorksheetFunction.RandBetween(1, n))
Next k
Next j
Application.ScreenUpdating = True
End Sub
其他方式,先练子的getColor()(仅第一次),然后 实践colourchang()。
Public vR()
Public n As Integer
Sub getColor()
Dim r As Byte, g As Byte, b As Byte
Dim i As Integer
'Cells.Clear
n = 3000
ReDim vR(1 To n)
For i = 1 To n
r = WorksheetFunction.RandBetween(0, 255)
g = WorksheetFunction.RandBetween(0, 255)
b = WorksheetFunction.RandBetween(0, 255)
vR(i) = RGB(r, g, b)
Next i
End Sub
Sub colourChange()
Dim j As Integer, k As Integer, m As Integer
Application.ScreenUpdating = False
For j = 1 To 500
For k = 1 To 100
m = WorksheetFunction.RandBetween(1, n)
Cells(j, k).Interior.Color = vR(m)
Next k
Next j
Application.ScreenUpdating = True
End Sub
这似乎工作还不错!但之后,我跑了好几次,但它仍然会产生同样的错误: 运行时错误“1004”:太多不同的单元格格式。 – HotSauceCoconuts
单元格格式有限制。请将n改为500或小于500.但我不知道具体的限制。 –
嗯现在我得到一个新的错误,它陷入了这样的: 'Cells(j,k).Interior.Color = vR(WorksheetFunction.RandBetween(1,n))' 错误是... '运行时错误1004:无法获得Range类的内部属性' 我怀疑它是相同的东西 – HotSauceCoconuts
不知道。这不记得以前的格式。在空白工作簿(Excel 2016)上运行此功能可以很好地处理内存使用情况。没有错误或任何东西。 –
你为什么要用'Wait'? – Wolfie
删除'wait'并重新运行 –