随机颜色随着细胞Interior.Color改变

我拼凑了一些简单的东西来看看会发生什么,当然我打破了Excel。

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种不同的单元格格式,我不应该击中一半! 它记得以前的东西吗? 这里发生了什么?

这对我来说很有用。 请注意,您正在使用Waitfunction,这将导致每个“帧”延迟3秒:)加速的方法是将延迟从3秒减less到1秒:)

但是颜色不会发生太大的变化,因为随机数发生器是基于系统时间的,而如果我们减less延迟的话,它的变化就会变小。

您也可以使用函数Rnd()并将其乘以256而不是使用工作表函数。 但我不确定,这会大大影响执行的时间。

我认为l = 0到50不需要。 和Application.ScreenUpdating = False设置有助于更快地练习。 我猜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 

其他方法,首先练习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