I have developed a VBA script that (among other things) changes the color of ovals on an Excel sheet based on input data in another sheet. The ovals are part of pre-made groups of shapes that are copied into the workbook with the script. These groups were made a by someone else long before I started working with them.
Most of the time the color population part of the program works perfectly. However, I have found some instances where the color of certain ovals will not populate. Nothing is going wrong in the code. But, if I delete the shape that won't populate color, and copy and paste one that will into its place, it works. The only conclusion that I can come up with is that there is something different about the properties of the ovals. But I'm at a loss for what that might be.
The color is being updated with this statement.
Worksheets(sheetName).Shapes(groupName(i)).GroupItems(shapeName(i)).Fill.ForeColor.RGB = color
But, like I said, the code isn't the issue. That statement works and the color is is not being lost somewhere in the code.
The picture below is the output from a print statement placed right before the part of the code that inserts the color into the oval. If everything is working correctly I would expect to see exactly what I do see.
The next two pictures show a sample of the shapes in question. The top two ovals and textboxes are in a group named CONN 1. The bottom two are in a group named CONN 2. When the program runs it references the shapes within the group based on the individual name of the shape (ie. The line in the immediate window above that says "CONN 1,AE,362,RED" means that the textbox in CONN 1 next to the AE label should show "362" and the oval should turn red).
Here's what they look like before the program runs.
Here's what they look like after the program runs.
The oval on top next to the AF label should have turned red, but it didn't. The difference between CONN 1 and CONN 2 is that in CONN 2 I deleted the oval AF, copied oval AE into the place that oval AF had occupied and renamed it.
Do you have any idea why this might be happening? Thanks.
UPDATE: I just figured out that if I run the macro, select any oval that is not populating with color, manually go to the fill tool and select Automatic, it fills with the proper color.
Related
I have a bar graph as seen below, I need to change the colour of all the bars to let's say green.
Currently the only way I have been able to find to do this is click each individual date and then the fill bucket green as excel doesn't allow you to CTRL + Click multiple elements. Is there a way to change the colour of all the bars shown in one go?
Worth mentioning I can not change the colours by creating a "values table" as the workbook is locked and I have to do this for several different graphs.
That's happening because you have created the chart using every date as an individual serie. I suggest to use the "Switch Row/Column" option and became all the dates as a unique serie, so all the bars will have the same color.
In the other hand if you need to keep the chart as you shown on the picture shared, is possible to change every bar at once but just using a VBA code.
After several days of searching Excel vba forums I have finally given in and must now ask for help.
The problem is that CodeModle.Insertlines causes excel to drop all variables. I have a couple arrays that I need to use / check boxes and list boxes etc. all get wiped when I run the code below
With Application.Workbooks(ActiveWorkbook.Name).VBProject.VBComponents("UserSavedQueries").CodeModule
.InsertLines 2, "tmp = " & """" & "THIS IS SOME SAMPLE TEXT " & """"
End With
I fully admit that the Insertlines was a bit of a work around as a way to an end, but that way now seems blocked. Please can someone advise how to insert lines into a module without resetting all variable?
For the bigger picture (and for someone to advise how I probably should have tackled this in the first place)
I have a sheet that pulls together a bunch of parameters from list boxes, checkboxes cells etc when a user selects the ‘Go’ button.
the selections are formatted to make a JSON message that is sent to an API and the response is displayed in a table on a second sheet.
To give some context, Imagine Listbox1 called “search criteria” with selections of “Manufacturer, Colours, Countries”. Listbox2 called “Filters” changes context depending on the selection on Listbox1. So we could have for Listbox2: “Ford, BMW, Nissan” , “Red, Blue, Green, Black, White”, “ ”. Not the actual data but it shows the varying length of each selection. There are actually around 12 available selections some of which have 100+ filter options.
The user may select “Ford, Red” which would return red Fords in all countries or “Ford,BMW,Green,Scotland” which would just Green Fords and BMWs in Scotland.
All of this works nicely.
NOW: I need to add the ability to have “Saved User Selections”. I need to avoid dumping these selections in a worksheet (even hidden) as it allows the user to “fiddle” with the shape and format of the selection which will break the JSON parsing. So I decided to save the user selections in a VB module. A UserForm provides the ability to Name the saved selection, date-stamp it and runs the code above. Parsing the UserSavedQueries module returns a listbox of all saved selections, which, when double-clicked are intended to populate listbox1 & 2 ready for the user to hit ‘Go’.
Considered options: I haven’t ruled out saving to an external file, or maybe even registry, but would prefer to keep self-contained within the one file.
This article came closest to helping, but I'm not sure how it would work for my use-case
I think the image attached describes better than I can in words the functionality I am trying to locate within excel.
Is there a way to auto group based on the contents within the columns as shown? This is achievable for the example shown, but when there are up to say 30 Groups and many sub group types, I am wondering whether excel can auto-detect and work its way through the list, grouping as shown as it goes.
You can get a similar result using conditional formatting. select the whole table and create a new conditional format rule and choose formula and enter =A1=A2 set the format font to white (I've used very light grey to show that the data is still there)
To get the borders, do the same again and this time enter the formula =A1<>A2 and make the top border black.
It's not exactly the same as yours but it's close.
I have an Excel 2010 chart, with several series. I have added data labels to one of the series. I want to change the font size of all labels of that series at once. Can it be done?
Note that if the contents of data labels are combinations of the three standard options in the Format Data Labels dialog ("Series Name", "X Value", or "Y Value"), I simply change the font size in the ribbon and it works.
But if data labels contain cell references (i.e., formulas), I could only change the font size of one label at a time.
I guess a macro would help. I tried something a while ago, and faced a sequence of problems (do not remember exactly which).
Anyone knows of a shorter/alternative solution?
It appears I found the cause.
Referring to the figure, whenever any of the cells referred to by the data labels is empty (e.g., deleting the contents of D4), I cannot change the font size.
If I reinstate D4, I can change the font size again. This is reproducible for the simple worksheet/chart of the figure.
According to this,
Workaround 1: Fill up all empty cells referred to. Change the format of labels. Remove added contents.
Workaround 2: Change to a dummy range for the data labels, which has no empty cells. Change the format of labels. Switch back to your intended range.
This might require The XY Chart Labeler, an excellent add-in by Rob Bovey.
This does not always work (there are cases where one cannot change font even with all non-empty cells), so there should be another possible cause for the problem (besides the one reported).
A workaround:
For the workbook, Save As... (you can even use the same workbook name). The problem goes away.
But if you close the file and open it again, the problem reappears.
Most of the times it works.
A workaround (found prior to #1):
A very poor solution, but which possibly saves quite a few keystrokes/mouse clicks in many cases. Select the whole chart, and change the font size in the ribbon. It will change all text. Then recover the font size of all other text but the data labels.
It won't work in charts with more than one series with such data labels, if you want them to have different sizes!
A quick way to solve this is to:
Go to the chart and left mouse click on the 'data series' you want to edit.
Click anywhere in formula bar above. Don't change anything.
Click the 'tick icon' just to the left of the formula bar.
Go straight back to the same data series and right mouse click, and choose add data labels
This has worked in Excel 2016. Purely by luck I worked this out saving a great deal of time and frustration.
I asked this question on the LiveCode email list. No response, so I figure it must not be possible. I know about editing the template graphic that enables alternating row colors. That doesn't help me.
This lesson is the closest to what I have found, but it only sets the overlay color to empty cells. It also had an unwanted affect, where any data that was present in the grid no longer shows up.
http://lessons.runrev.com/s/lessons/m/datagrid/l/7327-how-do-i-override-the-default-behavior-for-rendering-data-to-a-cell
As a little experiment, since the data became invisible (note that I'm on WinXP), I tried placing an opaque graphic over the column I wish to colorize. I set the ink of the graphic to AddMax or AddOver, and it looked nice, but the text in the cells disappeared. Then I tried setting the ink to AddMin, and it still looks good, but the test shows through!!!!
So, I think this will work fine visually, but how can I pass a double-click through this graphic to the cell underneath (to allow cell editing only within this column)?
Yes, you can do this.
This suggestion comes from Trevor DeVore at http://www.bluemangolearning.com/
Create a custom column template using the property inspector. From there you can edit the behavior of the column to colorize the background color of the field for that column or just edit the field in the template group to change the color.
The background color will only show up in rows that have data, however.