Hi,
I haven't had time to look at the code thoroughly. The RGBFromLongColor procedure is attempting to modify the values of iR, iG, and iB respectively. This works because by default access passes the variables by reference (ByRef). When the variable is changed ny RGBfromLongColor the modified value is then passed back to the calling procedure.
It might be worth explicitly stating this like the following so it is clear that the parameters will be passed back:
Sub RGBfromLongColor(lColor As Long, ByRef iR As Integer, ByRef iG As Integer, ByRef iB As Integer)
This is a useful feature, but be aware that this can make debugging the code quite hard. In more complex examples it is not always obvious that the variables have been modified when looking at the main procedure.
Try checking the properties for your form and looking at the Event tab. You will see a Timer Interval setting, which is the delay in milliseconds used by the OnTimer event.
By setting this value you will adjust how frequently the colour changes. If this is set to a very low value then the form would not have time to update properly and this may be causing the flicker.