All the Prompts that Went Into It :)
All the TLC it took. Think this could have been done without the paid version of chatGPT?
In excel, given a selected range, can you give me VBA code that will create the following effect:
for each of the blank cells in the range,
change the color of the cell from default to a random color chosen as given below
maintain the color for a random duration in the range of 100-200 milliseconds
then change to another random color (from same range as before)
stop the effect according to the scheme mentioned below
On the sheet, there will be the following cells:
Red start
Red end
Green start
Green end
Blue start
Blue end
Duration (seconds)
The cell to the right of each of these cells will contain the number to be used. For the "Color start" and "Color end" cells, the number will be between 0 and 255. The start and end cells give the range to be used to choose a random number for the intensity of the corresponding component. For example
Red start: 25
Red end: 200
With the above two limits (inclusive), when picking a random color for a cell, the red component of the color will be a random number between 25 and 200 (inclusive).
The animation should stop after the number of seconds specified in the cell to the right of the Duration (seconds) cell
Can this be accomplished?
_________________________
If I paste the code into Sheet1 in the VB Editor and then try running, I get
Compile error:
Ambiguous name detected: StopAnimation
The "Ambiguous name detected: StopAnimation" error occurs if there is already a StopAnimation subroutine in the VBA environment. To resolve this, modify the StopAnimation subroutine by renaming it to a unique name.
___________________________
This line
If Timer - startTime >= duration Then Exit Do
Is giving this error
Run-time error '13':
Type mismatch
_____________________________
Why are you hardcoding "Sheet1"? Can you use something like ActiveSheet?
_____________________________
It gives the same error. It seems to be in this line:
Application.Wait (Now + TimeValue("00:00:00." & CStr(randomDelay / 1000)))
_____________________________
Can you add this enhancement:
Cell B8 will contain an positive integer denoting the "step" value. This means that the value chosen for red green or blue must be a multiple of the step value. If the B8 cell is empty or 0, keep things as they are currently
______________________________
Excel VBA editor highlights this portion in red and, when I run, I get compile error syntax error:
cell.Interior.Color = RGB(
GetSteppedValue(rStart, rEnd, stepValue),
GetSteppedValue(gStart, gEnd, stepValue),
GetSteppedValue(bStart, bEnd, stepValue)
)
________________________________
In this section, with the "Step" cell blank, I'm getting an "1004" application error
For i = 1 To blankCells.Count
Set cell = blankCells(i)
cell.Interior.Color = RGB( _
GetSteppedValue(rStart, rEnd, stepValue), _
GetSteppedValue(gStart, gEnd, stepValue), _
GetSteppedValue(bStart, bEnd, stepValue))
Next i
________________________________
Can you now update the code to use memory - that is, the colors are stored.
Even the cells that are not modified, because they are not blank, but are part of the range, will be allocated colors in the memory. They just won't be shown .
The purpose of this is to introduce a new feature later wherein we slide the colors in different directions
________________________________
Something is wrong - it displayed random colors once but never updated them. The mouse pointer changed into that "waiting circle" thing suggesting the program was hanging. It finished on time and then gave a popup saying colors stored..
That is not what I wanted.
Before, we just used to update colors without any way of knowing what the previous colors were.
All I am asking for is we keep track of the previous color. That is all. We don't need to keep track of "all" previous colors.
__________________________________
Now enhance as follows:
Cell B9 is for "style"
If it is the integer 1 (one), then, translate the colors (slide cells down) from the top. That is, if cells H8, H9, H10 are blank, not-blank, blank and the assigned red values at the start are (say), 100, 150, 250. Cell H9 will remain the original color because it is not blank. Cells H8 and H10 will show the color values. But, when the update is performed, because we are sliding the cells (colors only) down, only H8 will get a new color, whereas H9 will get (but not show, because it is not blank) H8's previous color and H10 will get H9's previous color.
So, Style values are :
1 => slide down
2 => slide to the left
3 => slide up
4 => slide to the right
Update the code
_____________________________________
The function is mostly there. What I notice is that, at the start, not all the blank cells in the range are colored. Only a few of the rows are starting off with initial colors.
Also, if Style is 0 or blank, the old behavior (no sliding, all cells updated in each iteration) should be preserved
_______________________________________
Can we add following enhancement:
Support more Style values :
5 => slide in the south-east direction. That is, the left column and top row will be updated with new colors in each iteration, but other cells will inherit colors from from the cell that is to the top-left. Therefore, a cell such as H8 will inherit from G7, K9 will inherit from J8, etc
6 => slide in the south-west direction - that is, each cell inherits from its top-right neighbor - so K9 will inherit from L8. Only cells in the top row and right column of the range are updated with new colors in each iteration.
7 => slide in the north-west direction - so each cell inherits from it's bottom right neighbor and only cells in the bottom row and right column of the range are updated with new colors in each iteration. K9 will inherit from L10
8 => slide in the north-east direction - each cell inherits from it's bottom-left neighbor and only cells in the bottom row and left column of the range are updated with new colors in each iteration. K9 will inherit from J10
________________________________
Let us add one more enhancement to improve user experience. When the cells are selected, it affects the color display. So, now, B10 will contain the coordinate of the lower-left cell of the range (Example E20) and B11 will contain the Upper-Right cell of the range (Example U5). Can you incorporate this into the code? If either B10 or B11 are blank, then the actual selected cells must be used. Otherwise, the range denoted by the values in B10 and B11 must be used. In the case of above example of LL=E20 and UR=U5, the range would be intersection of columns E to U (inclusive) and rows 5 to 20 (inclusive)
________________________________
When "Style" is not 1,2,3,4,5,6,7,8 (0 or blank), the old behavior doesn't exist. It just generates new colors once and does nothing after that
Fixed: Restore Old Behavior When Style is 0 or Blank
The issue was that when Style is 0 or blank, the loop was still trying to shift colors instead of updating them every cycle like before.
Now, this is fixed by:
- Ensuring that when
Styleis 0 or blank, all blank cells update randomly in every cycle. - Reverting to continuous random color updates instead of shifting colors.
_________________________________
Any idea why Excel would not be able to keep up? How computationally intensive is it? The displayed effect is not very pretty, even though the functionality is there. Excel seems to be struggling
_________________________________
In there version, there is no animation at all. Only after the duration expires does the display update
You're right! The issue is that Excel only updates the display after the macro finishes when ScreenUpdating = False. This means you don’t see any animation until the duration ends.
Solution: Force Excel to Refresh After Each Frame
To make the animation visible in real-time, we need to:
- Keep
ScreenUpdating = Falsefor speed. - Manually force a refresh after every loop iteration.
- We use
DoEventsandApplication.ScreenUpdating = Truebriefly to refresh the display.
- We use

Comments
Post a Comment